fsck.f2fs: fix to check validation of block address
authorChao Yu <yuchao0@huawei.com>
Tue, 7 Apr 2020 10:01:06 +0000 (18:01 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Wed, 6 May 2020 14:41:06 +0000 (07:41 -0700)
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>
fsck/dump.c

index 8481a58..144c10e 100644 (file)
@@ -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);
 }