aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSheng Yong <shengyong1@huawei.com>2016-02-23 19:45:32 +0800
committerluca020400 <luca.stefani.ge1@gmail.com>2016-04-04 17:17:55 +0200
commit10bd289690f62dec712848bbb1b118d226470051 (patch)
treefeeee1b1b91e0d2b62c9b8fe1c281312d9a815c9
parentd9a8e137a06c0e7dc7ee94d853e8b19816754205 (diff)
downloadandroid_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.c13
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);