lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 0955/1039] f2fs: fix to avoid panic in is_alive() if metadata is inconsistent
    Date
    From: Chao Yu <chao@kernel.org>

    commit f6db43076d190d9bf75559dec28e18b9d12e4ce5 upstream.

    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: bbf9f7d90f21 ("f2fs: Fix indefinite loop in f2fs_gc()")
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    fs/f2fs/gc.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/fs/f2fs/gc.c
    +++ b/fs/f2fs/gc.c
    @@ -1042,7 +1042,7 @@ static bool is_alive(struct f2fs_sb_info
    if (!test_and_set_bit(segno, SIT_I(sbi)->invalid_segmap)) {
    f2fs_err(sbi, "mismatched blkaddr %u (source_blkaddr %u) in seg %u",
    blkaddr, source_blkaddr, segno);
    - f2fs_bug_on(sbi, 1);
    + set_sbi_flag(sbi, SBI_NEED_FSCK);
    }
    }
    #endif

    \
     
     \ /
      Last update: 2022-01-25 04:09    [W:4.031 / U:0.260 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site