mirror of
https://github.com/torvalds/linux.git
synced 2026-10-07 05:31:08 -04:00
staging: erofs: fix potential double iput in erofs_read_super()
Some error cases like failing from d_make_root() will cause double iput because d_make_root() also does iput in its error path. Signed-off-by: Chengguang Xu <[email protected]> Reviewed-by: Chao Yu <[email protected]> Reviewed-by: Gao Xiang <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
This commit is contained in:
1 parent
45a50ab1d6
commit
94832d9399
1 file changed
+3
-6
@@ -421,13 +421,14 @@ static int erofs_read_super(struct super_block *sb,
|
||||
errln("rootino(nid %llu) is not a directory(i_mode %o)",
|
||||
ROOT_NID(sbi), inode->i_mode);
|
||||
err = -EINVAL;
|
||||
goto err_isdir;
|
||||
iput(inode);
|
||||
goto err_iget;
|
||||
}
|
||||
|
||||
sb->s_root = d_make_root(inode);
|
||||
if (sb->s_root == NULL) {
|
||||
err = -ENOMEM;
|
||||
goto err_makeroot;
|
||||
goto err_iget;
|
||||
}
|
||||
|
||||
/* save the device name to sbi */
|
||||
@@ -453,10 +454,6 @@ static int erofs_read_super(struct super_block *sb,
|
||||
*/
|
||||
err_devname:
|
||||
dput(sb->s_root);
|
||||
err_makeroot:
|
||||
err_isdir:
|
||||
if (sb->s_root == NULL)
|
||||
iput(inode);
|
||||
err_iget:
|
||||
#ifdef EROFS_FS_HAS_MANAGED_CACHE
|
||||
iput(sbi->managed_cache);
|
||||
|
||||
Reference in new issue
Block a user