Message ID | 20230531072238.370186-1-korotkov.maxim.s@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [f2fs-dev] fsck.f2fs: fix memleak in f2fs_create() | expand |
On 2023/5/31 15:22, Maxim Korotkov wrote: > In error handling cases, exiting a function without releasing memory > Added tags to clean up resources and return error code > Found by RASU JSC > Signed-off-by: Maxim Korotkov <maskorotkov@rasu.ru> > --- > fsck/dir.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/fsck/dir.c b/fsck/dir.c > index 4a3eb6e..c3508bf 100644 > --- a/fsck/dir.c > +++ b/fsck/dir.c > @@ -704,7 +704,7 @@ 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; > + goto err_free_parent_dir; How about: ret = -1 goto free_parent_dir; > } > > ret = f2fs_find_entry(sbi, parent, de); > @@ -728,7 +728,7 @@ 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; > + goto err_free_child_dir; ret = -1 goto free_child_dir; > } > > /* Use previously-recorded inode */ > @@ -805,6 +805,11 @@ free_child_dir: > free_parent_dir: > free(parent); > return 0; return ret; Thanks, > +err_free_child_dir: > + free(child); > +err_free_parent_dir: > + free(parent); > + return -1; > } > > int f2fs_mkdir(struct f2fs_sb_info *sbi, struct dentry *de)
diff --git a/fsck/dir.c b/fsck/dir.c index 4a3eb6e..c3508bf 100644 --- a/fsck/dir.c +++ b/fsck/dir.c @@ -704,7 +704,7 @@ 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; + goto err_free_parent_dir; } ret = f2fs_find_entry(sbi, parent, de); @@ -728,7 +728,7 @@ 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; + goto err_free_child_dir; } /* Use previously-recorded inode */ @@ -805,6 +805,11 @@ free_child_dir: free_parent_dir: free(parent); return 0; +err_free_child_dir: + free(child); +err_free_parent_dir: + free(parent); + return -1; } int f2fs_mkdir(struct f2fs_sb_info *sbi, struct dentry *de)
In error handling cases, exiting a function without releasing memory Added tags to clean up resources and return error code Found by RASU JSC Signed-off-by: Maxim Korotkov <maskorotkov@rasu.ru> --- fsck/dir.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)