aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChao Yu <yuchao0@huawei.com>2020-04-07 18:01:06 +0800
committerJaegeuk Kim <jaegeuk@kernel.org>2020-05-06 07:41:06 -0700
commitf73f222723af4a82febeae2a4661cbea7da3d487 (patch)
treee53f4232f4f225ba7defd8540736b8b6c1dda25f
parentf8f14b9c0f8f6a7913b5fda0f01d4313ccb32852 (diff)
downloadf2fs-tools-f73f222723af4a82febeae2a4661cbea7da3d487.tar.gz
fsck.f2fs: fix to check validation of block address
Otherwise, if block address is invalid, we may access invalid memory address in is_sit_bitmap_set(). Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-rw-r--r--fsck/dump.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/fsck/dump.c b/fsck/dump.c
index 8481a58..144c10e 100644
--- a/fsck/dump.c
+++ b/fsck/dump.c
@@ -486,10 +486,15 @@ void dump_node(struct f2fs_sb_info *sbi, nid_t nid, int force)
DBG(1, "nat_entry.version [0x%x]\n", ni.version);
DBG(1, "nat_entry.ino [0x%x]\n", ni.ino);
+ if (!IS_VALID_BLK_ADDR(sbi, ni.blk_addr)) {
+ MSG(force, "Invalid node blkaddr: %u\n\n", ni.blk_addr);
+ goto out;
+ }
+
if (ni.blk_addr == 0x0)
MSG(force, "Invalid nat entry\n\n");
else if (!is_sit_bitmap_set(sbi, ni.blk_addr))
- MSG(force, "Invalid node blk addr\n\n");
+ MSG(force, "Invalid sit bitmap, %u\n\n", ni.blk_addr);
DBG(1, "node_blk.footer.ino [0x%x]\n", le32_to_cpu(node_blk->footer.ino));
DBG(1, "node_blk.footer.nid [0x%x]\n", le32_to_cpu(node_blk->footer.nid));
@@ -504,7 +509,7 @@ void dump_node(struct f2fs_sb_info *sbi, nid_t nid, int force)
print_node_info(sbi, node_blk, force);
MSG(force, "Invalid (i)node block\n\n");
}
-
+out:
free(node_blk);
}