diff options
author | Chengguang Xu <cgxu519@gmx.com> | 2019-01-23 09:12:25 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-01-25 11:52:02 +0300 |
commit | 94832d93992176b7c37672e1fc7b7acc16e70286 (patch) | |
tree | 9a4708ad1b3c97ab226accb473078bd627e0b1b3 /drivers/staging/erofs | |
parent | 45a50ab1d684c951ba4d70c1b7bbdd95383bccad (diff) | |
download | linux-94832d93992176b7c37672e1fc7b7acc16e70286.tar.xz |
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 <cgxu519@gmx.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Reviewed-by: Gao Xiang <gaoxiang25@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/erofs')
-rw-r--r-- | drivers/staging/erofs/super.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/staging/erofs/super.c b/drivers/staging/erofs/super.c index af5140eede18..176fca2af379 100644 --- a/drivers/staging/erofs/super.c +++ b/drivers/staging/erofs/super.c @@ -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); |