aboutsummaryrefslogtreecommitdiff
path: root/fsck/mount.c
diff options
context:
space:
mode:
authorChao Yu <yuchao0@huawei.com>2020-04-15 11:26:48 +0800
committerJaegeuk Kim <jaegeuk@kernel.org>2020-05-06 07:41:06 -0700
commite8d9f6d7b345c2a649dfc52ce3babc8f3770cb39 (patch)
treec4f268319b9486e6d7fa48176da952d04153ee43 /fsck/mount.c
parent7a22451bc2b41eabf343c20512ad30bcdc7d3ba9 (diff)
downloadf2fs-tools-e8d9f6d7b345c2a649dfc52ce3babc8f3770cb39.tar.gz
fsck.f2fs: fix to avoid overflow during print_inode_info()
While dumping files during fsck, print_inode_info() didn't check sanity of inode, so insane i_extra_isize could cause overflow when printing i_addr, to avoid that, let's add a check condition. Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fsck/mount.c')
-rw-r--r--fsck/mount.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/fsck/mount.c b/fsck/mount.c
index 0aab071..fb45941 100644
--- a/fsck/mount.c
+++ b/fsck/mount.c
@@ -237,9 +237,14 @@ void print_inode_info(struct f2fs_sb_info *sbi,
}
for (i = 0; i < ADDRS_PER_INODE(inode); i++) {
- block_t blkaddr = le32_to_cpu(inode->i_addr[i + ofs]);
+ block_t blkaddr;
char *flag = "";
+ if (i + ofs >= DEF_ADDRS_PER_INODE)
+ break;
+
+ blkaddr = le32_to_cpu(inode->i_addr[i + ofs]);
+
if (blkaddr == 0x0)
continue;
if (blkaddr == COMPRESS_ADDR)