• Chao Yu's avatar
    f2fs: fix to avoid accessing uninitialized spinlock · cc249e4c
    Chao Yu authored
    syzbot reports a kernel bug:
    
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0x1e3/0x2cb lib/dump_stack.c:106
     assign_lock_key+0x22a/0x240 kernel/locking/lockdep.c:981
     register_lock_class+0x287/0x9b0 kernel/locking/lockdep.c:1294
     __lock_acquire+0xe4/0x1f60 kernel/locking/lockdep.c:4934
     lock_acquire+0x1a7/0x400 kernel/locking/lockdep.c:5668
     __raw_spin_lock include/linux/spinlock_api_smp.h:133 [inline]
     _raw_spin_lock+0x2a/0x40 kernel/locking/spinlock.c:154
     spin_lock include/linux/spinlock.h:350 [inline]
     f2fs_save_errors fs/f2fs/super.c:3868 [inline]
     f2fs_handle_error+0x29/0x230 fs/f2fs/super.c:3896
     f2fs_iget+0x215/0x4bb0 fs/f2fs/inode.c:516
     f2fs_fill_super+0x47d3/0x7b50 fs/f2fs/super.c:4222
     mount_bdev+0x26c/0x3a0 fs/super.c:1401
     legacy_get_tree+0xea/0x180 fs/fs_context.c:610
     vfs_get_tree+0x88/0x270 fs/super.c:1531
     do_new_mount+0x289/0xad0 fs/namespace.c:3040
     do_mount fs/namespace.c:3383 [inline]
     __do_sys_mount fs/namespace.c:3591 [inline]
     __se_sys_mount+0x2e3/0x3d0 fs/namespace.c:3568
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x2b/0x70 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    F2FS-fs (loop1): Failed to read F2FS meta data inode
    
    The root cause is if sbi->error_lock may be accessed before
    its initialization, fix it.
    
    Link: https://lore.kernel.org/linux-f2fs-devel/0000000000007edb6605ecbb6442@google.com/T/#u
    Reported-by: syzbot+40642be9b7e0bb28e0df@syzkaller.appspotmail.com
    Fixes: 95fa90c9 ("f2fs: support recording errors into superblock")
    Signed-off-by: default avatarChao Yu <chao@kernel.org>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    cc249e4c
super.c 124 KB