Message ID | 20230602102451.602105-1-korotkov.maxim.s@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [f2fs-dev,v2] fsck.f2fs: fix memleak in f2fs_create() | expand |
On 2023/6/2 18:24, Maxim Korotkov wrote: > In error handling cases, the function exited without releasing memory > > Signed-off-by: Maxim Korotkov <korotkov.maxim.s@gmail.com> Reviewed-by: Chao Yu <chao@kernel.org> Thanks,
On 2023/6/2 18:24, Maxim Korotkov wrote: > In error handling cases, the function exited without releasing memory > > Signed-off-by: Maxim Korotkov <korotkov.maxim.s@gmail.com> > --- > changelog: fixed code review remarks > fsck/dir.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/fsck/dir.c b/fsck/dir.c > index 4a3eb6e..29c89de 100644 > --- a/fsck/dir.c > +++ b/fsck/dir.c > @@ -704,7 +704,8 @@ int f2fs_create(struct f2fs_sb_info *sbi, struct dentry *de) > ret = convert_inline_dentry(sbi, parent, ni.blk_addr); > if (ret) { > MSG(0, "Convert inline dentry for pino=%x failed.\n", de->pino); > - return -1; > + ret = -1; > + goto free_parent_dir; > } > > ret = f2fs_find_entry(sbi, parent, de); > @@ -713,6 +714,7 @@ int f2fs_create(struct f2fs_sb_info *sbi, struct dentry *de) > de->name, de->pino, ret); > if (de->file_type == F2FS_FT_REG_FILE) > de->ino = 0; > + ret = 0; > goto free_parent_dir; > } > > @@ -728,7 +730,8 @@ int f2fs_create(struct f2fs_sb_info *sbi, struct dentry *de) > if (hardlink_ni.blk_addr == NULL_ADDR) { > MSG(1, "No original inode for hard link to_ino=%x\n", > found_hardlink->to_ino); > - return -1; > + ret = -1; > + goto free_child_dir; > } > > /* Use previously-recorded inode */ > @@ -750,6 +753,7 @@ int f2fs_create(struct f2fs_sb_info *sbi, struct dentry *de) > if (ret) { > MSG(0, "Skip the existing \"%s\" pino=%x ERR=%d\n", > de->name, de->pino, ret); > + ret = 0; > goto free_child_dir; > } > > @@ -804,7 +808,7 @@ free_child_dir: > free(child); > free_parent_dir: > free(parent); > - return 0; > + return ret; Oh, unneeded indent in the end of sentence. Thanks, > } > > int f2fs_mkdir(struct f2fs_sb_info *sbi, struct dentry *de)
diff --git a/fsck/dir.c b/fsck/dir.c index 4a3eb6e..29c89de 100644 --- a/fsck/dir.c +++ b/fsck/dir.c @@ -704,7 +704,8 @@ int f2fs_create(struct f2fs_sb_info *sbi, struct dentry *de) ret = convert_inline_dentry(sbi, parent, ni.blk_addr); if (ret) { MSG(0, "Convert inline dentry for pino=%x failed.\n", de->pino); - return -1; + ret = -1; + goto free_parent_dir; } ret = f2fs_find_entry(sbi, parent, de); @@ -713,6 +714,7 @@ int f2fs_create(struct f2fs_sb_info *sbi, struct dentry *de) de->name, de->pino, ret); if (de->file_type == F2FS_FT_REG_FILE) de->ino = 0; + ret = 0; goto free_parent_dir; } @@ -728,7 +730,8 @@ int f2fs_create(struct f2fs_sb_info *sbi, struct dentry *de) if (hardlink_ni.blk_addr == NULL_ADDR) { MSG(1, "No original inode for hard link to_ino=%x\n", found_hardlink->to_ino); - return -1; + ret = -1; + goto free_child_dir; } /* Use previously-recorded inode */ @@ -750,6 +753,7 @@ int f2fs_create(struct f2fs_sb_info *sbi, struct dentry *de) if (ret) { MSG(0, "Skip the existing \"%s\" pino=%x ERR=%d\n", de->name, de->pino, ret); + ret = 0; goto free_child_dir; } @@ -804,7 +808,7 @@ free_child_dir: free(child); free_parent_dir: free(parent); - return 0; + return ret; } int f2fs_mkdir(struct f2fs_sb_info *sbi, struct dentry *de)
In error handling cases, the function exited without releasing memory Signed-off-by: Maxim Korotkov <korotkov.maxim.s@gmail.com> --- changelog: fixed code review remarks fsck/dir.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)