Commit a96fd1cc authored by Linus Torvalds's avatar Linus Torvalds

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
...@@ -54,7 +54,7 @@ static int ubifs_hash_calc_hmac(const struct ubifs_info *c, const u8 *hash, ...@@ -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 * ubifs_prepare_auth_node - Prepare an authentication node
* @c: UBIFS file-system description object * @c: UBIFS file-system description object
* @node: the node to calculate a hash for * @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. * 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. * It creates a HMAC from the given input hash and writes it to the node.
......
...@@ -57,10 +57,6 @@ ...@@ -57,10 +57,6 @@
/** /**
* switch_gc_head - switch the garbage collection journal head. * switch_gc_head - switch the garbage collection journal head.
* @c: UBIFS file-system description object * @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 * 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, * @c->gc_lnum. Returns %0 in case of success, %-EAGAIN if commit is required,
......
...@@ -931,8 +931,6 @@ static int add_replay_bud(struct ubifs_info *c, int lnum, int offs, int jhead, ...@@ -931,8 +931,6 @@ static int add_replay_bud(struct ubifs_info *c, int lnum, int offs, int jhead,
* validate_ref - validate a reference node. * validate_ref - validate a reference node.
* @c: UBIFS file-system description object * @c: UBIFS file-system description object
* @ref: the reference node to validate * @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 * 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 * returned if the reference node is new, otherwise %-EINVAL is returned if
......
...@@ -1110,14 +1110,20 @@ static int ubifs_parse_options(struct ubifs_info *c, char *options, ...@@ -1110,14 +1110,20 @@ static int ubifs_parse_options(struct ubifs_info *c, char *options,
break; break;
} }
case Opt_auth_key: case Opt_auth_key:
c->auth_key_name = kstrdup(args[0].from, GFP_KERNEL); if (!is_remount) {
if (!c->auth_key_name) c->auth_key_name = kstrdup(args[0].from,
return -ENOMEM; GFP_KERNEL);
if (!c->auth_key_name)
return -ENOMEM;
}
break; break;
case Opt_auth_hash_name: case Opt_auth_hash_name:
c->auth_hash_name = kstrdup(args[0].from, GFP_KERNEL); if (!is_remount) {
if (!c->auth_hash_name) c->auth_hash_name = kstrdup(args[0].from,
return -ENOMEM; GFP_KERNEL);
if (!c->auth_hash_name)
return -ENOMEM;
}
break; break;
case Opt_ignore: case Opt_ignore:
break; break;
...@@ -1141,6 +1147,18 @@ static int ubifs_parse_options(struct ubifs_info *c, char *options, ...@@ -1141,6 +1147,18 @@ static int ubifs_parse_options(struct ubifs_info *c, char *options,
return 0; 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. * destroy_journal - destroy journal data structures.
* @c: UBIFS file-system description object * @c: UBIFS file-system description object
...@@ -1313,7 +1331,7 @@ static int mount_ubifs(struct ubifs_info *c) ...@@ -1313,7 +1331,7 @@ static int mount_ubifs(struct ubifs_info *c)
err = ubifs_read_superblock(c); err = ubifs_read_superblock(c);
if (err) if (err)
goto out_free; goto out_auth;
c->probing = 0; c->probing = 0;
...@@ -1325,18 +1343,18 @@ static int mount_ubifs(struct ubifs_info *c) ...@@ -1325,18 +1343,18 @@ static int mount_ubifs(struct ubifs_info *c)
ubifs_err(c, "'compressor \"%s\" is not compiled in", ubifs_err(c, "'compressor \"%s\" is not compiled in",
ubifs_compr_name(c, c->default_compr)); ubifs_compr_name(c, c->default_compr));
err = -ENOTSUPP; err = -ENOTSUPP;
goto out_free; goto out_auth;
} }
err = init_constants_sb(c); err = init_constants_sb(c);
if (err) if (err)
goto out_free; goto out_auth;
sz = ALIGN(c->max_idx_node_sz, c->min_io_size) * 2; sz = ALIGN(c->max_idx_node_sz, c->min_io_size) * 2;
c->cbuf = kmalloc(sz, GFP_NOFS); c->cbuf = kmalloc(sz, GFP_NOFS);
if (!c->cbuf) { if (!c->cbuf) {
err = -ENOMEM; err = -ENOMEM;
goto out_free; goto out_auth;
} }
err = alloc_wbufs(c); err = alloc_wbufs(c);
...@@ -1611,6 +1629,8 @@ static int mount_ubifs(struct ubifs_info *c) ...@@ -1611,6 +1629,8 @@ static int mount_ubifs(struct ubifs_info *c)
free_wbufs(c); free_wbufs(c);
out_cbuf: out_cbuf:
kfree(c->cbuf); kfree(c->cbuf);
out_auth:
ubifs_exit_authentication(c);
out_free: out_free:
kfree(c->write_reserve_buf); kfree(c->write_reserve_buf);
kfree(c->bu.buf); kfree(c->bu.buf);
...@@ -1650,8 +1670,7 @@ static void ubifs_umount(struct ubifs_info *c) ...@@ -1650,8 +1670,7 @@ static void ubifs_umount(struct ubifs_info *c)
ubifs_lpt_free(c, 0); ubifs_lpt_free(c, 0);
ubifs_exit_authentication(c); ubifs_exit_authentication(c);
kfree(c->auth_key_name); ubifs_release_options(c);
kfree(c->auth_hash_name);
kfree(c->cbuf); kfree(c->cbuf);
kfree(c->rcvrd_mst_node); kfree(c->rcvrd_mst_node);
kfree(c->mst_node); kfree(c->mst_node);
...@@ -2221,6 +2240,7 @@ static int ubifs_fill_super(struct super_block *sb, void *data, int silent) ...@@ -2221,6 +2240,7 @@ static int ubifs_fill_super(struct super_block *sb, void *data, int silent)
out_unlock: out_unlock:
mutex_unlock(&c->umount_mutex); mutex_unlock(&c->umount_mutex);
out_close: out_close:
ubifs_release_options(c);
ubi_close_volume(c->ubi); ubi_close_volume(c->ubi);
out: out:
return err; return err;
......
...@@ -360,7 +360,6 @@ static int lnc_add_directly(struct ubifs_info *c, struct ubifs_zbranch *zbr, ...@@ -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. * lnc_free - remove a leaf node from the leaf node cache.
* @zbr: zbranch of leaf node * @zbr: zbranch of leaf node
* @node: leaf node
*/ */
static void lnc_free(struct ubifs_zbranch *zbr) static void lnc_free(struct ubifs_zbranch *zbr)
{ {
...@@ -3466,7 +3465,7 @@ int ubifs_dirty_idx_node(struct ubifs_info *c, union ubifs_key *key, int level, ...@@ -3466,7 +3465,7 @@ int ubifs_dirty_idx_node(struct ubifs_info *c, union ubifs_key *key, int level,
/** /**
* dbg_check_inode_size - check if inode size is correct. * dbg_check_inode_size - check if inode size is correct.
* @c: UBIFS file-system description object * @c: UBIFS file-system description object
* @inum: inode number * @inode: inode to check
* @size: inode size * @size: inode size
* *
* This function makes sure that the inode size (@size) is correct and it does * This function makes sure that the inode size (@size) is correct and it does
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment