[PATCH v2] erofs-utils: sbi->devs should be cleared after freed
Gao Xiang
hsiangkao at linux.alibaba.com
Mon Aug 21 19:39:29 AEST 2023
Otherwise, it could cause double-free if sbi reuses
when fuzzing [1].
[1] https://github.com/erofs/erofsnightly/actions/runs/5921003885/job/16053013007
Signed-off-by: Gao Xiang <hsiangkao at linux.alibaba.com>
---
changes since v1:
- add a missing sbi->devs = NULL in erofs_init_devices().
lib/super.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/lib/super.c b/lib/super.c
index 58e2574..38caf4d 100644
--- a/lib/super.c
+++ b/lib/super.c
@@ -53,6 +53,7 @@ static int erofs_init_devices(struct erofs_sb_info *sbi,
ret = dev_read(sbi, 0, &dis, pos, sizeof(dis));
if (ret < 0) {
free(sbi->devs);
+ sbi->devs = NULL;
return ret;
}
@@ -123,14 +124,18 @@ int erofs_read_superblock(struct erofs_sb_info *sbi)
return ret;
ret = erofs_xattr_prefixes_init(sbi);
- if (ret)
+ if (ret && sbi->devs) {
free(sbi->devs);
+ sbi->devs = NULL;
+ }
return ret;
}
void erofs_put_super(struct erofs_sb_info *sbi)
{
- if (sbi->devs)
+ if (sbi->devs) {
free(sbi->devs);
+ sbi->devs = NULL;
+ }
erofs_xattr_prefixes_cleanup(sbi);
}
--
2.24.4
More information about the Linux-erofs
mailing list