Hello,
syzbot has tested the proposed patch but the reproducer still triggered
crash:
WARNING: held lock freed!
F2FS-fs (loop4): invalid crc value
F2FS-fs (loop4): Wrong journal entry on segno 26
F2FS-fs (loop4): Failed to initialize F2FS segment manager
=========================
WARNING: held lock freed!
4.17.0-rc1+ #1 Not tainted
-------------------------
syz-executor4/4845 is freeing memory ffff8801cf80c080-ffff8801cf80c87f,
with a lock still held there!
00000000fe3dd31b (&array[i].journal_rwsem){++++}, at: build_sit_entries
fs/f2fs/segment.c:3660 [inline]
00000000fe3dd31b (&array[i].journal_rwsem){++++}, at:
build_segment_manager+0x7bd9/0xbdc0 fs/f2fs/segment.c:3873
2 locks held by syz-executor4/4845:
#0: 00000000f769252a (&type->s_umount_key#42/1){+.+.}, at: alloc_super
fs/super.c:212 [inline]
#0: 00000000f769252a (&type->s_umount_key#42/1){+.+.}, at:
sget_userns+0x2dd/0xf20 fs/super.c:503
#1: 00000000fe3dd31b (&array[i].journal_rwsem){++++}, at:
build_sit_entries fs/f2fs/segment.c:3660 [inline]
#1: 00000000fe3dd31b (&array[i].journal_rwsem){++++}, at:
build_segment_manager+0x7bd9/0xbdc0 fs/f2fs/segment.c:3873
stack backtrace:
CPU: 1 PID: 4845 Comm: syz-executor4 Not tainted 4.17.0-rc1+ #1
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
Google 01/01/2011
Call Trace:
__dump_stack lib/dump_stack.c:77 [inline]
dump_stack+0x1b9/0x294 lib/dump_stack.c:113
F2FS-fs (loop2): Magic Mismatch, valid(0xf2f52010) - read(0x0)
print_freed_lock_bug kernel/locking/lockdep.c:4385 [inline]
debug_check_no_locks_freed.cold.61+0xa5/0xb1 kernel/locking/lockdep.c:4418
kfree+0xbb/0x260 mm/slab.c:3810
F2FS-fs (loop2): Can't find valid F2FS filesystem in 1th superblock
destroy_curseg fs/f2fs/segment.c:3932 [inline]
destroy_segment_manager+0x3f8/0xad0 fs/f2fs/segment.c:3987
f2fs_fill_super+0x4b39/0x7bf0 fs/f2fs/super.c:2981
F2FS-fs (loop2): invalid crc value
F2FS-fs (loop2): Wrong journal entry on segno 26
F2FS-fs (loop2): Failed to initialize F2FS segment manager
mount_bdev+0x30c/0x3e0 fs/super.c:1165
f2fs_mount+0x34/0x40 fs/f2fs/super.c:3020
mount_fs+0xae/0x328 fs/super.c:1268
vfs_kern_mount.part.34+0xd4/0x4d0 fs/namespace.c:1037
vfs_kern_mount fs/namespace.c:1027 [inline]
do_new_mount fs/namespace.c:2517 [inline]
do_mount+0x564/0x3070 fs/namespace.c:2847
ksys_mount+0x12d/0x140 fs/namespace.c:3063
__do_sys_mount fs/namespace.c:3077 [inline]
__se_sys_mount fs/namespace.c:3074 [inline]
__x64_sys_mount+0xbe/0x150 fs/namespace.c:3074
do_syscall_64+0x1b1/0x800 arch/x86/entry/common.c:287
entry_SYSCALL_64_after_hwframe+0x49/0xbe
RIP: 0033:0x457daa
RSP: 002b:00007fca20efaba8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a5
RAX: ffffffffffffffda RBX: 0000000020000000 RCX: 0000000000457daa
RDX: 0000000020000000 RSI: 0000000020000100 RDI: 00007fca20efabf0
RBP: 000000000000006a R08: 0000000020016a00 R09: 0000000020000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000003
R13: 000000000000006a R14: 00000000006fcb80 R15: 0000000000000000
syz-executor4 (4845) used greatest stack depth: 16920 bytes left
syz-executor (4879) used greatest stack depth: 16344 bytes left
syz-executor (5165) used greatest stack depth: 16264 bytes left
f2fs_msg: 2399 callbacks suppressed
F2FS-fs (loop5): Wrong journal entry on segno 26
F2FS-fs (loop5): Failed to initialize F2FS segment manager
F2FS-fs (loop7): Wrong journal entry on segno 26
F2FS-fs (loop7): Failed to initialize F2FS segment manager
F2FS-fs (loop3): Wrong journal entry on segno 26
F2FS-fs (loop3): Failed to initialize F2FS segment manager
F2FS-fs (loop7): Magic Mismatch, valid(0xf2f52010) - read(0x0)
F2FS-fs (loop3): Magic Mismatch, valid(0xf2f52010) - read(0x0)
F2FS-fs (loop7): Can't find valid F2FS filesystem in 1th superblock
F2FS-fs (loop3): Can't find valid F2FS filesystem in 1th superblock
f2fs_msg: 2612 callbacks suppressed
F2FS-fs (loop1): Magic Mismatch, valid(0xf2f52010) - read(0x0)
F2FS-fs (loop2): Wrong journal entry on segno 26
F2FS-fs (loop1): Can't find valid F2FS filesystem in 1th superblock
F2FS-fs (loop6): Wrong journal entry on segno 26
F2FS-fs (loop2): Failed to initialize F2FS segment manager
F2FS-fs (loop6): Failed to initialize F2FS segment manager
F2FS-fs (loop7): Wrong journal entry on segno 26
F2FS-fs (loop7): Failed to initialize F2FS segment manager
F2FS-fs (loop0): Wrong journal entry on segno 26
F2FS-fs (loop0): Failed to initialize F2FS segment manager
Tested on
https://github.com/jaegeuk/f2fs.git/g-dev-test commit
96e7b0fd8b564ad309975fe9ec6dec5d3052669d (Fri Apr 20 04:10:28 2018 +0000)
Revert "fs/dcache.c: add cond_resched() in shrink_dentry_list()"
https://syzkaller.appspot.com/x/log.txt?id=4507715741155328