• Chao Yu's avatar
    f2fs: fix to avoid panic in is_alive() if metadata is inconsistent · f6db4307
    Chao Yu authored
    As report by Wenqing Liu in bugzilla:
    
    https://bugzilla.kernel.org/show_bug.cgi?id=215231
    
    If we enable CONFIG_F2FS_CHECK_FS config, and with fuzzed image attached
    in above link, we will encounter panic when executing below script:
    
    1. mkdir mnt
    2. mount -t f2fs tmp1.img mnt
    3. touch tmp
    
    F2FS-fs (loop11): mismatched blkaddr 5765 (source_blkaddr 1) in seg 3
    kernel BUG at fs/f2fs/gc.c:1042!
     do_garbage_collect+0x90f/0xa80 [f2fs]
     f2fs_gc+0x294/0x12a0 [f2fs]
     f2fs_balance_fs+0x2c5/0x7d0 [f2fs]
     f2fs_create+0x239/0xd90 [f2fs]
     lookup_open+0x45e/0xa90
     open_last_lookups+0x203/0x670
     path_openat+0xae/0x490
     do_filp_open+0xbc/0x160
     do_sys_openat2+0x2f1/0x500
     do_sys_open+0x5e/0xa0
     __x64_sys_openat+0x28/0x40
    
    Previously, f2fs tries to catch data inconcistency exception in between
    SSA and SIT table during GC, however once the exception is caught, it will
    call f2fs_bug_on to hang kernel, it's not needed, instead, let's set
    SBI_NEED_FSCK flag and skip migrating current block.
    
    Fixes: bbf9f7d9 ("f2fs: Fix indefinite loop in f2fs_gc()")
    Signed-off-by: default avatarChao Yu <chao@kernel.org>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    f6db4307
gc.c 51.7 KB