On 6/16/21 12:56 PM, syzbot wrote:
Hello, syzbot found the following issue on: HEAD commit: f21b807c Merge tag 'drm-fixes-2021-06-11' of git://anongit.. git tree: upstream console output: https://syzkaller.appspot.com/x/log.txt?x=165fca57d00000 kernel config: https://syzkaller.appspot.com/x/.config?x=30f476588412c065 dashboard link: https://syzkaller.appspot.com/bug?extid=c9ff4822a62eee994ea3 syz repro: https://syzkaller.appspot.com/x/repro.syz?x=17d19ce0300000 C reproducer: https://syzkaller.appspot.com/x/repro.c?x=108d7988300000 Bisection is inconclusive: the issue happens on the oldest tested release. bisection log: https://syzkaller.appspot.com/x/bisect.txt?x=1646b8d0300000 final oops: https://syzkaller.appspot.com/x/report.txt?x=1546b8d0300000 console output: https://syzkaller.appspot.com/x/log.txt?x=1146b8d0300000 IMPORTANT: if you fix the issue, please add the following tag to the commit: Reported-by: syzbot+c9ff4822a62eee994ea3@xxxxxxxxxxxxxxxxxxxxxxxxx INFO: task syz-executor768:8567 blocked for more than 143 seconds. Not tainted 5.13.0-rc5-syzkaller #0 "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. task:syz-executor768 state:D stack:27544 pid: 8567 ppid: 8423 flags:0x00004004 Call Trace: context_switch kernel/sched/core.c:4339 [inline] __schedule+0x916/0x23e0 kernel/sched/core.c:5147 schedule+0xcf/0x270 kernel/sched/core.c:5226 schedule_timeout+0x1db/0x250 kernel/time/timer.c:1868 do_wait_for_common kernel/sched/completion.c:85 [inline] __wait_for_common kernel/sched/completion.c:106 [inline] wait_for_common kernel/sched/completion.c:117 [inline] wait_for_completion+0x168/0x270 kernel/sched/completion.c:138 kthread_stop+0x17a/0x720 kernel/kthread.c:642 ext4_fill_super+0x87ac/0xdfa0 fs/ext4/super.c:5190 mount_bdev+0x34d/0x410 fs/super.c:1368 legacy_get_tree+0x105/0x220 fs/fs_context.c:592 vfs_get_tree+0x89/0x2f0 fs/super.c:1498 do_new_mount fs/namespace.c:2905 [inline] path_mount+0x132a/0x1fa0 fs/namespace.c:3235 do_mount fs/namespace.c:3248 [inline] __do_sys_mount fs/namespace.c:3456 [inline] __se_sys_mount fs/namespace.c:3433 [inline] __x64_sys_mount+0x27f/0x300 fs/namespace.c:3433 do_syscall_64+0x3a/0xb0 arch/x86/entry/common.c:47 entry_SYSCALL_64_after_hwframe+0x44/0xae RIP: 0033:0x445b2a RSP: 002b:00007ffc5efbf598 EFLAGS: 00000202 ORIG_RAX: 00000000000000a5 RAX: ffffffffffffffda RBX: 00007ffc5efbf5f0 RCX: 0000000000445b2a RDX: 0000000020000000 RSI: 00000000200000c0 RDI: 00007ffc5efbf5b0 RBP: 00007ffc5efbf5b0 R08: 00007ffc5efbf5f0 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000202 R12: 00000000200003f8 R13: 0000000000000003 R14: 0000000000000004 R15: 0000000000000005
#syz test git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master With regards, Pavel Skripkin
>From 9eb3e2f727e1c33ec39c28694a1528b9cc4a32eb Mon Sep 17 00:00:00 2001 From: Pavel Skripkin <paskripkin@xxxxxxxxx> Date: Thu, 5 Aug 2021 17:23:40 +0300 Subject: [PATCH] ext4: avoid huge mmp update interval value /* .. */ Signed-off-by: Pavel Skripkin <paskripkin@xxxxxxxxx> --- fs/ext4/mmp.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/fs/ext4/mmp.c b/fs/ext4/mmp.c index bc364c119af6..2f632344d38c 100644 --- a/fs/ext4/mmp.c +++ b/fs/ext4/mmp.c @@ -7,6 +7,9 @@ #include "ext4.h" +#define EXT4_KMMP_MAX_INTERVAL 100 +#define EXT4_KMMP_MIN_INTERVAL 5 + /* Checksumming functions */ static __le32 ext4_mmp_csum(struct super_block *sb, struct mmp_struct *mmp) { @@ -140,6 +143,11 @@ static int kmmpd(void *data) unsigned long diff; int retval; + /* We should avoid unreasonale huge update interval, since it can cause + * task hung bug on umount or on error handling path in ext4_fill_super() + */ + mmp_update_interval = clamp(mmp_update_interval, EXT4_KMMP_MIN_INTERVAL, EXT4_KMMP_MAX_INTERVAL); + mmp_block = le64_to_cpu(es->s_mmp_block); mmp = (struct mmp_struct *)(bh->b_data); mmp->mmp_time = cpu_to_le64(ktime_get_real_seconds()); @@ -156,6 +164,9 @@ static int kmmpd(void *data) memcpy(mmp->mmp_nodename, init_utsname()->nodename, sizeof(mmp->mmp_nodename)); + ext4_msg(sb, KERN_INFO, "Started kmmp thread with update interval = %u\n", + mmp_update_interval); + while (!kthread_should_stop() && !sb_rdonly(sb)) { if (!ext4_has_feature_mmp(sb)) { ext4_warning(sb, "kmmpd being stopped since MMP feature" -- 2.32.0