Commit a96fd1cc authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'for-linus-5.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/ubifs

Pull ubifs updates from Richard Weinberger:

 - Kernel-doc fixes

 - Fixes for memory leaks in authentication option parsing

* tag 'for-linus-5.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/ubifs:
  ubifs: mount_ubifs: Release authentication resource in error handling path
  ubifs: Don't parse authentication mount options in remount process
  ubifs: Fix a memleak after dumping authentication mount options
  ubifs: Fix some kernel-doc warnings in tnc.c
  ubifs: Fix some kernel-doc warnings in replay.c
  ubifs: Fix some kernel-doc warnings in gc.c
  ubifs: Fix 'hash' kernel-doc warning in auth.c
parents 9d9af100 e2a05cc7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ static int ubifs_hash_calc_hmac(const struct ubifs_info *c, const u8 *hash,
 * ubifs_prepare_auth_node - Prepare an authentication node
 * @c: UBIFS file-system description object
 * @node: the node to calculate a hash for
 * @hash: input hash of previous nodes
 * @inhash: input hash of previous nodes
 *
 * This function prepares an authentication node for writing onto flash.
 * It creates a HMAC from the given input hash and writes it to the node.
+0 −4
Original line number Diff line number Diff line
@@ -57,10 +57,6 @@
/**
 * switch_gc_head - switch the garbage collection journal head.
 * @c: UBIFS file-system description object
 * @buf: buffer to write
 * @len: length of the buffer to write
 * @lnum: LEB number written is returned here
 * @offs: offset written is returned here
 *
 * This function switch the GC head to the next LEB which is reserved in
 * @c->gc_lnum. Returns %0 in case of success, %-EAGAIN if commit is required,
+0 −2
Original line number Diff line number Diff line
@@ -931,8 +931,6 @@ out:
 * validate_ref - validate a reference node.
 * @c: UBIFS file-system description object
 * @ref: the reference node to validate
 * @ref_lnum: LEB number of the reference node
 * @ref_offs: reference node offset
 *
 * This function returns %1 if a bud reference already exists for the LEB. %0 is
 * returned if the reference node is new, otherwise %-EINVAL is returned if
+32 −12
Original line number Diff line number Diff line
@@ -1110,14 +1110,20 @@ static int ubifs_parse_options(struct ubifs_info *c, char *options,
			break;
		}
		case Opt_auth_key:
			c->auth_key_name = kstrdup(args[0].from, GFP_KERNEL);
			if (!is_remount) {
				c->auth_key_name = kstrdup(args[0].from,
								GFP_KERNEL);
				if (!c->auth_key_name)
					return -ENOMEM;
			}
			break;
		case Opt_auth_hash_name:
			c->auth_hash_name = kstrdup(args[0].from, GFP_KERNEL);
			if (!is_remount) {
				c->auth_hash_name = kstrdup(args[0].from,
								GFP_KERNEL);
				if (!c->auth_hash_name)
					return -ENOMEM;
			}
			break;
		case Opt_ignore:
			break;
@@ -1141,6 +1147,18 @@ static int ubifs_parse_options(struct ubifs_info *c, char *options,
	return 0;
}

/*
 * ubifs_release_options - release mount parameters which have been dumped.
 * @c: UBIFS file-system description object
 */
static void ubifs_release_options(struct ubifs_info *c)
{
	kfree(c->auth_key_name);
	c->auth_key_name = NULL;
	kfree(c->auth_hash_name);
	c->auth_hash_name = NULL;
}

/**
 * destroy_journal - destroy journal data structures.
 * @c: UBIFS file-system description object
@@ -1313,7 +1331,7 @@ static int mount_ubifs(struct ubifs_info *c)

	err = ubifs_read_superblock(c);
	if (err)
		goto out_free;
		goto out_auth;

	c->probing = 0;

@@ -1325,18 +1343,18 @@ static int mount_ubifs(struct ubifs_info *c)
		ubifs_err(c, "'compressor \"%s\" is not compiled in",
			  ubifs_compr_name(c, c->default_compr));
		err = -ENOTSUPP;
		goto out_free;
		goto out_auth;
	}

	err = init_constants_sb(c);
	if (err)
		goto out_free;
		goto out_auth;

	sz = ALIGN(c->max_idx_node_sz, c->min_io_size) * 2;
	c->cbuf = kmalloc(sz, GFP_NOFS);
	if (!c->cbuf) {
		err = -ENOMEM;
		goto out_free;
		goto out_auth;
	}

	err = alloc_wbufs(c);
@@ -1611,6 +1629,8 @@ out_wbufs:
	free_wbufs(c);
out_cbuf:
	kfree(c->cbuf);
out_auth:
	ubifs_exit_authentication(c);
out_free:
	kfree(c->write_reserve_buf);
	kfree(c->bu.buf);
@@ -1650,8 +1670,7 @@ static void ubifs_umount(struct ubifs_info *c)
	ubifs_lpt_free(c, 0);
	ubifs_exit_authentication(c);

	kfree(c->auth_key_name);
	kfree(c->auth_hash_name);
	ubifs_release_options(c);
	kfree(c->cbuf);
	kfree(c->rcvrd_mst_node);
	kfree(c->mst_node);
@@ -2221,6 +2240,7 @@ out_umount:
out_unlock:
	mutex_unlock(&c->umount_mutex);
out_close:
	ubifs_release_options(c);
	ubi_close_volume(c->ubi);
out:
	return err;
+1 −2
Original line number Diff line number Diff line
@@ -360,7 +360,6 @@ static int lnc_add_directly(struct ubifs_info *c, struct ubifs_zbranch *zbr,
/**
 * lnc_free - remove a leaf node from the leaf node cache.
 * @zbr: zbranch of leaf node
 * @node: leaf node
 */
static void lnc_free(struct ubifs_zbranch *zbr)
{
@@ -3466,7 +3465,7 @@ out_unlock:
/**
 * dbg_check_inode_size - check if inode size is correct.
 * @c: UBIFS file-system description object
 * @inum: inode number
 * @inode: inode to check
 * @size: inode size
 *
 * This function makes sure that the inode size (@size) is correct and it does