* [PATCH] erofs: add error handling for erofs_fill_super()
@ 2019-11-19 11:37 Chengguang Xu
2019-11-19 12:53 ` Gao Xiang
0 siblings, 1 reply; 4+ messages in thread
From: Chengguang Xu @ 2019-11-19 11:37 UTC (permalink / raw)
To: xiang, chao; +Cc: Chengguang Xu, linux-erofs
There are some potential resource leaks in error case
of erofs_fill_super(), so add proper error handling
for it.
Signed-off-by: Chengguang Xu <cgxu519@mykernel.net>
---
fs/erofs/super.c | 31 +++++++++++++++++++++++--------
1 file changed, 23 insertions(+), 8 deletions(-)
diff --git a/fs/erofs/super.c b/fs/erofs/super.c
index 0e369494f2f2..06e721bd1c8c 100644
--- a/fs/erofs/super.c
+++ b/fs/erofs/super.c
@@ -369,7 +369,7 @@ static int erofs_fill_super(struct super_block *sb, void *data, int silent)
sb->s_fs_info = sbi;
err = erofs_read_superblock(sb);
if (err)
- return err;
+ goto free;
sb->s_flags |= SB_RDONLY | SB_NOATIME;
sb->s_maxbytes = MAX_LFS_FILESIZE;
@@ -385,7 +385,7 @@ static int erofs_fill_super(struct super_block *sb, void *data, int silent)
err = erofs_parse_options(sb, data);
if (err)
- return err;
+ goto free;
if (test_opt(sbi, POSIX_ACL))
sb->s_flags |= SB_POSIXACL;
@@ -398,29 +398,44 @@ static int erofs_fill_super(struct super_block *sb, void *data, int silent)
/* get the root inode */
inode = erofs_iget(sb, ROOT_NID(sbi), true);
- if (IS_ERR(inode))
- return PTR_ERR(inode);
+ if (IS_ERR(inode)) {
+ err = PTR_ERR(inode);
+ goto free;
+ }
if (!S_ISDIR(inode->i_mode)) {
erofs_err(sb, "rootino(nid %llu) is not a directory(i_mode %o)",
ROOT_NID(sbi), inode->i_mode);
iput(inode);
- return -EINVAL;
+ err = -EINVAL;
+ goto free;
}
sb->s_root = d_make_root(inode);
- if (!sb->s_root)
- return -ENOMEM;
+ if (!sb->s_root) {
+ err = -ENOMEM;
+ goto free;
+ }
erofs_shrinker_register(sb);
/* sb->s_umount is already locked, SB_ACTIVE and SB_BORN are not set */
err = erofs_init_managed_cache(sb);
if (err)
- return err;
+ goto free_root_inode;
erofs_info(sb, "mounted with opts: %s, root inode @ nid %llu.",
(char *)data, ROOT_NID(sbi));
+
return 0;
+
+free_root_inode:
+ dput(sb->s_root);
+ sb->s_root = NULL;
+ erofs_shrinker_unregister(sb);
+free:
+ kfree(sbi);
+ sb->s_fs_info = NULL;
+ return err;
}
static struct dentry *erofs_mount(struct file_system_type *fs_type, int flags,
--
2.20.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] erofs: add error handling for erofs_fill_super()
2019-11-19 11:37 [PATCH] erofs: add error handling for erofs_fill_super() Chengguang Xu
@ 2019-11-19 12:53 ` Gao Xiang
2019-11-20 10:08 ` Chengguang Xu
2019-11-20 10:08 ` Chengguang Xu
0 siblings, 2 replies; 4+ messages in thread
From: Gao Xiang @ 2019-11-19 12:53 UTC (permalink / raw)
To: Chengguang Xu; +Cc: miaoxie, xiang, linux-erofs
Hi Chengguang,
On Tue, Nov 19, 2019 at 07:37:44PM +0800, Chengguang Xu wrote:
> There are some potential resource leaks in error case
> of erofs_fill_super(), so add proper error handling
> for it.
>
> Signed-off-by: Chengguang Xu <cgxu519@mykernel.net>
> ---
> fs/erofs/super.c | 31 +++++++++++++++++++++++--------
> 1 file changed, 23 insertions(+), 8 deletions(-)
>
> diff --git a/fs/erofs/super.c b/fs/erofs/super.c
> index 0e369494f2f2..06e721bd1c8c 100644
> --- a/fs/erofs/super.c
> +++ b/fs/erofs/super.c
> @@ -369,7 +369,7 @@ static int erofs_fill_super(struct super_block *sb, void *data, int silent)
> sb->s_fs_info = sbi;
> err = erofs_read_superblock(sb);
> if (err)
> - return err;
> + goto free;
Could you give some hints what is the potential leak exactly?
Actually, it was modified on purpose recently, see the following threads:
https://lore.kernel.org/r/20190720224955.GD17978@ZenIV.linux.org.uk
and
https://lore.kernel.org/r/20190721040547.GF17978@ZenIV.linux.org.uk
Thanks,
Gao Xiang
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] erofs: add error handling for erofs_fill_super()
2019-11-19 12:53 ` Gao Xiang
@ 2019-11-20 10:08 ` Chengguang Xu
2019-11-20 10:08 ` Chengguang Xu
1 sibling, 0 replies; 4+ messages in thread
From: Chengguang Xu @ 2019-11-20 10:08 UTC (permalink / raw)
To: Gao Xiang; +Cc: miaoxie, xiang, linux-erofs
---- 在 星期二, 2019-11-19 20:51:13 Gao Xiang <gaoxiang25@huawei.com> 撰写 ----
> Hi Chengguang,
>
> On Tue, Nov 19, 2019 at 07:37:44PM +0800, Chengguang Xu wrote:
> > There are some potential resource leaks in error case
> > of erofs_fill_super(), so add proper error handling
> > for it.
> >
> > Signed-off-by: Chengguang Xu <cgxu519@mykernel.net>
> > ---
> > fs/erofs/super.c | 31 +++++++++++++++++++++++--------
> > 1 file changed, 23 insertions(+), 8 deletions(-)
> >
> > diff --git a/fs/erofs/super.c b/fs/erofs/super.c
> > index 0e369494f2f2..06e721bd1c8c 100644
> > --- a/fs/erofs/super.c
> > +++ b/fs/erofs/super.c
> > @@ -369,7 +369,7 @@ static int erofs_fill_super(struct super_block *sb, void *data, int silent)
> > sb->s_fs_info = sbi;
> > err = erofs_read_superblock(sb);
> > if (err)
> > - return err;
> > + goto free;
>
> Could you give some hints what is the potential leak exactly?
> Actually, it was modified on purpose recently, see the following threads:
> https://lore.kernel.org/r/20190720224955.GD17978@ZenIV.linux.org.uk
> and
> https://lore.kernel.org/r/20190721040547.GF17978@ZenIV.linux.org.uk
Sorry, it seems I misread some part of code, please just drop the patch.
Thanks
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] erofs: add error handling for erofs_fill_super()
2019-11-19 12:53 ` Gao Xiang
2019-11-20 10:08 ` Chengguang Xu
@ 2019-11-20 10:08 ` Chengguang Xu
1 sibling, 0 replies; 4+ messages in thread
From: Chengguang Xu @ 2019-11-20 10:08 UTC (permalink / raw)
To: Gao Xiang; +Cc: miaoxie, xiang, linux-erofs
---- 在 星期二, 2019-11-19 20:51:13 Gao Xiang <gaoxiang25@huawei.com> 撰写 ----
> Hi Chengguang,
>
> On Tue, Nov 19, 2019 at 07:37:44PM +0800, Chengguang Xu wrote:
> > There are some potential resource leaks in error case
> > of erofs_fill_super(), so add proper error handling
> > for it.
> >
> > Signed-off-by: Chengguang Xu <cgxu519@mykernel.net>
> > ---
> > fs/erofs/super.c | 31 +++++++++++++++++++++++--------
> > 1 file changed, 23 insertions(+), 8 deletions(-)
> >
> > diff --git a/fs/erofs/super.c b/fs/erofs/super.c
> > index 0e369494f2f2..06e721bd1c8c 100644
> > --- a/fs/erofs/super.c
> > +++ b/fs/erofs/super.c
> > @@ -369,7 +369,7 @@ static int erofs_fill_super(struct super_block *sb, void *data, int silent)
> > sb->s_fs_info = sbi;
> > err = erofs_read_superblock(sb);
> > if (err)
> > - return err;
> > + goto free;
>
> Could you give some hints what is the potential leak exactly?
> Actually, it was modified on purpose recently, see the following threads:
> https://lore.kernel.org/r/20190720224955.GD17978@ZenIV.linux.org.uk
> and
> https://lore.kernel.org/r/20190721040547.GF17978@ZenIV.linux.org.uk
Sorry, it seems I misread some part of code, please just drop the patch.
Thanks
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-11-20 10:23 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-19 11:37 [PATCH] erofs: add error handling for erofs_fill_super() Chengguang Xu
2019-11-19 12:53 ` Gao Xiang
2019-11-20 10:08 ` Chengguang Xu
2019-11-20 10:08 ` Chengguang Xu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).