Re: [syzbot] INFO: task hung in ext4_fill_super

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux