diff options
author | Chao Yu <yuchao0@huawei.com> | 2020-04-07 18:01:06 +0800 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2020-05-06 07:41:06 -0700 |
commit | f73f222723af4a82febeae2a4661cbea7da3d487 (patch) | |
tree | e53f4232f4f225ba7defd8540736b8b6c1dda25f | |
parent | f8f14b9c0f8f6a7913b5fda0f01d4313ccb32852 (diff) | |
download | f2fs-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.c | 9 |
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); } |