====================================================== WARNING: possible circular locking dependency detected syzkaller #0 Not tainted ------------------------------------------------------ syz.0.328/4399 is trying to acquire lock: ffff800088af38c0 (major_names_lock){+.+.}-{4:4}, at: blk_probe_dev+0x44/0x1a4 block/genhd.c:885 but task is already holding lock: ffff000019a22358 (&mddev->reconfig_mutex){+.+.}-{4:4}, at: mddev_lock drivers/md/md.h:713 [inline] ffff000019a22358 (&mddev->reconfig_mutex){+.+.}-{4:4}, at: mddev_suspend_and_lock drivers/md/md.h:1026 [inline] ffff000019a22358 (&mddev->reconfig_mutex){+.+.}-{4:4}, at: mddev_suspend_and_lock drivers/md/md.h:1018 [inline] ffff000019a22358 (&mddev->reconfig_mutex){+.+.}-{4:4}, at: md_ioctl+0xab8/0x2dd4 drivers/md/md.c:8426 which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #2 (&mddev->reconfig_mutex){+.+.}-{4:4}: lock_acquire kernel/locking/lockdep.c:5942 [inline] lock_acquire+0x2b8/0x3fc kernel/locking/lockdep.c:5899 __mutex_lock_common kernel/locking/mutex.c:646 [inline] __mutex_lock+0x14c/0x1000 kernel/locking/mutex.c:821 mutex_lock_nested+0x24/0x30 kernel/locking/mutex.c:874 mddev_lock_nointr drivers/md/md.h:734 [inline] md_alloc+0x2d8/0xcb4 drivers/md/md.c:6413 md_alloc_and_put drivers/md/md.c:6452 [inline] md_probe drivers/md/md.c:6468 [inline] md_probe+0x50/0x90 drivers/md/md.c:6463 blk_probe_dev+0x110/0x1a4 block/genhd.c:888 blk_request_module+0x18/0xa0 block/genhd.c:901 blkdev_get_no_open+0x8c/0xec block/bdev.c:870 blkdev_open+0xe4/0x3f4 block/fops.c:677 do_dentry_open+0x35c/0xf24 fs/open.c:1000 vfs_open_consume+0x8c/0x340 fs/open.c:1131 do_open fs/namei.c:4851 [inline] path_openat+0xefc/0x1d50 fs/namei.c:5016 do_file_open+0x18c/0x380 fs/namei.c:5045 do_sys_openat2+0x134/0x184 fs/open.c:1443 do_sys_open fs/open.c:1449 [inline] __do_compat_sys_openat fs/open.c:1511 [inline] __se_compat_sys_openat fs/open.c:1509 [inline] __arm64_compat_sys_openat+0x130/0x1d4 fs/open.c:1509 __invoke_syscall arch/arm64/kernel/syscall.c:35 [inline] invoke_syscall+0x74/0x240 arch/arm64/kernel/syscall.c:49 el0_svc_common.constprop.0+0xac/0x230 arch/arm64/kernel/syscall.c:121 do_el0_svc_compat+0x40/0x58 arch/arm64/kernel/syscall.c:146 el0_svc_compat+0x54/0x1e0 arch/arm64/kernel/entry-common.c:948 el0t_32_sync_handler+0x88/0xac arch/arm64/kernel/entry-common.c:966 el0t_32_sync+0x19c/0x1a0 arch/arm64/kernel/entry.S:611 -> #1 (disks_mutex){+.+.}-{4:4}: lock_acquire kernel/locking/lockdep.c:5942 [inline] lock_acquire+0x2b8/0x3fc kernel/locking/lockdep.c:5899 __mutex_lock_common kernel/locking/mutex.c:646 [inline] __mutex_lock+0x14c/0x1000 kernel/locking/mutex.c:821 mutex_lock_nested+0x24/0x30 kernel/locking/mutex.c:874 md_alloc+0x4c/0xcb4 drivers/md/md.c:6355 md_alloc_and_put drivers/md/md.c:6452 [inline] md_probe drivers/md/md.c:6468 [inline] md_probe+0x50/0x90 drivers/md/md.c:6463 blk_probe_dev+0x110/0x1a4 block/genhd.c:888 blk_request_module+0x18/0xa0 block/genhd.c:901 blkdev_get_no_open+0x8c/0xec block/bdev.c:870 blkdev_open+0xe4/0x3f4 block/fops.c:677 do_dentry_open+0x35c/0xf24 fs/open.c:1000 vfs_open_consume+0x8c/0x340 fs/open.c:1131 do_open fs/namei.c:4851 [inline] path_openat+0xefc/0x1d50 fs/namei.c:5016 do_file_open+0x18c/0x380 fs/namei.c:5045 do_sys_openat2+0x134/0x184 fs/open.c:1443 do_sys_open fs/open.c:1449 [inline] __do_compat_sys_openat fs/open.c:1511 [inline] __se_compat_sys_openat fs/open.c:1509 [inline] __arm64_compat_sys_openat+0x130/0x1d4 fs/open.c:1509 __invoke_syscall arch/arm64/kernel/syscall.c:35 [inline] invoke_syscall+0x74/0x240 arch/arm64/kernel/syscall.c:49 el0_svc_common.constprop.0+0xac/0x230 arch/arm64/kernel/syscall.c:121 do_el0_svc_compat+0x40/0x58 arch/arm64/kernel/syscall.c:146 el0_svc_compat+0x54/0x1e0 arch/arm64/kernel/entry-common.c:948 el0t_32_sync_handler+0x88/0xac arch/arm64/kernel/entry-common.c:966 el0t_32_sync+0x19c/0x1a0 arch/arm64/kernel/entry.S:611 -> #0 (major_names_lock){+.+.}-{4:4}: check_prev_add+0x110/0xcb4 kernel/locking/lockdep.c:3209 check_prevs_add kernel/locking/lockdep.c:3328 [inline] validate_chain kernel/locking/lockdep.c:3952 [inline] __lock_acquire+0x1490/0x1af0 kernel/locking/lockdep.c:5288 lock_acquire kernel/locking/lockdep.c:5942 [inline] lock_acquire+0x2b8/0x3fc kernel/locking/lockdep.c:5899 __mutex_lock_common kernel/locking/mutex.c:646 [inline] __mutex_lock+0x14c/0x1000 kernel/locking/mutex.c:821 mutex_lock_nested+0x24/0x30 kernel/locking/mutex.c:874 blk_probe_dev+0x44/0x1a4 block/genhd.c:885 blk_request_module+0x18/0xa0 block/genhd.c:901 blkdev_get_no_open+0x8c/0xec block/bdev.c:870 bdev_file_open_by_dev block/bdev.c:1091 [inline] bdev_file_open_by_dev+0x60/0x160 block/bdev.c:1079 md_import_device+0xe4/0x370 drivers/md/md.c:3861 md_add_new_disk+0x38c/0x146c drivers/md/md.c:7536 md_ioctl+0x1e88/0x2dd4 drivers/md/md.c:8525 md_compat_ioctl+0x2c/0xe0 drivers/md/md.c:8586 compat_blkdev_ioctl+0x5c4/0x810 block/ioctl.c:854 __do_compat_sys_ioctl fs/ioctl.c:695 [inline] __se_compat_sys_ioctl fs/ioctl.c:638 [inline] __arm64_compat_sys_ioctl+0x1a8/0x218 fs/ioctl.c:638 __invoke_syscall arch/arm64/kernel/syscall.c:35 [inline] invoke_syscall+0x74/0x240 arch/arm64/kernel/syscall.c:49 el0_svc_common.constprop.0+0xac/0x230 arch/arm64/kernel/syscall.c:121 do_el0_svc_compat+0x40/0x58 arch/arm64/kernel/syscall.c:146 el0_svc_compat+0x54/0x1e0 arch/arm64/kernel/entry-common.c:948 el0t_32_sync_handler+0x88/0xac arch/arm64/kernel/entry-common.c:966 el0t_32_sync+0x19c/0x1a0 arch/arm64/kernel/entry.S:611 other info that might help us debug this: Chain exists of: major_names_lock --> disks_mutex --> &mddev->reconfig_mutex Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock(&mddev->reconfig_mutex); lock(disks_mutex); lock(&mddev->reconfig_mutex); lock(major_names_lock); *** DEADLOCK *** locks held by syz.0.328/4399: 1, last CPU#0: #0: ffff000019a22358 (&mddev->reconfig_mutex){+.+.}-{4:4}, at: mddev_lock drivers/md/md.h:713 [inline] #0: ffff000019a22358 (&mddev->reconfig_mutex){+.+.}-{4:4}, at: mddev_suspend_and_lock drivers/md/md.h:1026 [inline] #0: ffff000019a22358 (&mddev->reconfig_mutex){+.+.}-{4:4}, at: mddev_suspend_and_lock drivers/md/md.h:1018 [inline] #0: ffff000019a22358 (&mddev->reconfig_mutex){+.+.}-{4:4}, at: md_ioctl+0xab8/0x2dd4 drivers/md/md.c:8426 stack backtrace: CPU: 0 UID: 0 PID: 4399 Comm: syz.0.328 Not tainted syzkaller #0 PREEMPT Hardware name: linux,dummy-virt (DT) Call trace: show_stack+0x18/0x24 arch/arm64/kernel/stacktrace.c:499 (C) __dump_stack lib/dump_stack.c:94 [inline] dump_stack_lvl+0x7c/0xb0 lib/dump_stack.c:120 dump_stack+0x1c/0x28 lib/dump_stack.c:129 print_circular_bug+0x23c/0x284 kernel/locking/lockdep.c:2087 check_noncircular+0x174/0x194 kernel/locking/lockdep.c:2219 check_prev_add+0x110/0xcb4 kernel/locking/lockdep.c:3209 check_prevs_add kernel/locking/lockdep.c:3328 [inline] validate_chain kernel/locking/lockdep.c:3952 [inline] __lock_acquire+0x1490/0x1af0 kernel/locking/lockdep.c:5288 lock_acquire kernel/locking/lockdep.c:5942 [inline] lock_acquire+0x2b8/0x3fc kernel/locking/lockdep.c:5899 __mutex_lock_common kernel/locking/mutex.c:646 [inline] __mutex_lock+0x14c/0x1000 kernel/locking/mutex.c:821 mutex_lock_nested+0x24/0x30 kernel/locking/mutex.c:874 blk_probe_dev+0x44/0x1a4 block/genhd.c:885 blk_request_module+0x18/0xa0 block/genhd.c:901 blkdev_get_no_open+0x8c/0xec block/bdev.c:870 bdev_file_open_by_dev block/bdev.c:1091 [inline] bdev_file_open_by_dev+0x60/0x160 block/bdev.c:1079 md_import_device+0xe4/0x370 drivers/md/md.c:3861 md_add_new_disk+0x38c/0x146c drivers/md/md.c:7536 md_ioctl+0x1e88/0x2dd4 drivers/md/md.c:8525 md_compat_ioctl+0x2c/0xe0 drivers/md/md.c:8586 compat_blkdev_ioctl+0x5c4/0x810 block/ioctl.c:854 __do_compat_sys_ioctl fs/ioctl.c:695 [inline] __se_compat_sys_ioctl fs/ioctl.c:638 [inline] __arm64_compat_sys_ioctl+0x1a8/0x218 fs/ioctl.c:638 __invoke_syscall arch/arm64/kernel/syscall.c:35 [inline] invoke_syscall+0x74/0x240 arch/arm64/kernel/syscall.c:49 el0_svc_common.constprop.0+0xac/0x230 arch/arm64/kernel/syscall.c:121 do_el0_svc_compat+0x40/0x58 arch/arm64/kernel/syscall.c:146 el0_svc_compat+0x54/0x1e0 arch/arm64/kernel/entry-common.c:948 el0t_32_sync_handler+0x88/0xac arch/arm64/kernel/entry-common.c:966 el0t_32_sync+0x19c/0x1a0 arch/arm64/kernel/entry.S:611 md: could not open device unknown-block(0,0). md: md_import_device returned -6