diff options
author | Sheng Yong <shengyong1@huawei.com> | 2016-02-23 19:45:32 +0800 |
---|---|---|
committer | luca020400 <luca.stefani.ge1@gmail.com> | 2016-04-04 17:17:55 +0200 |
commit | 10bd289690f62dec712848bbb1b118d226470051 (patch) | |
tree | feeee1b1b91e0d2b62c9b8fe1c281312d9a815c9 | |
parent | d9a8e137a06c0e7dc7ee94d853e8b19816754205 (diff) | |
download | android_external_f2fs-tools-10bd289690f62dec712848bbb1b118d226470051.tar.gz android_external_f2fs-tools-10bd289690f62dec712848bbb1b118d226470051.tar.bz2 android_external_f2fs-tools-10bd289690f62dec712848bbb1b118d226470051.zip |
fsck.f2fs: fix corrupted nat entry [0]
The first nat entry must be null. If it is corrupted, we set its bit in
nat_area_bitmap, without increasing valid_nat_entry_cnt, fsck_verify will
nullify it at last.
Reported-by: Cheng Yinchao <chengyinchao@huawei.com>
Signed-off-by: Sheng Yong <shengyong1@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-rw-r--r-- | fsck/mount.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/fsck/mount.c b/fsck/mount.c index 4c807f9..ec040c8 100644 --- a/fsck/mount.c +++ b/fsck/mount.c @@ -1683,7 +1683,18 @@ void build_nat_area_bitmap(struct f2fs_sb_info *sbi) &nat_block->entries[i]); if (ni.blk_addr == 0) continue; - ASSERT(nid + i != 0x0); + if (nid + i == 0) { + /* + * nat entry [0] must be null. If + * it is corrupted, set its bit in + * nat_area_bitmap, fsck_verify will + * nullify it + */ + ASSERT_MSG("Invalid nat entry[0]: blk_addr[0x%x]\n", + ni.blk_addr); + config.fix_on = 1; + fsck->chk.valid_nat_entry_cnt--; + } DBG(3, "nid[0x%8x] addr[0x%16x] ino[0x%8x]\n", nid + i, ni.blk_addr, ni.ino); |