syzbot


possible deadlock in blk_unregister_queue

Status: upstream: reported on 2024/11/26 00:01
Subsystems: block
[Documentation on labels]
Reported-by: syzbot+91585b36b538053343e4@syzkaller.appspotmail.com
Fix commit: b769a2f409e7 blktrace: move copy_[to|from]_user() out of ->debugfs_lock
Patched on: [ci-qemu-gce-upstream-auto ci-qemu-native-arm64-kvm ci-qemu-upstream ci-qemu-upstream-386 ci-qemu2-arm64 ci-qemu2-arm64-compat ci-qemu2-arm64-mte ci-qemu2-riscv64 ci-snapshot-upstream-root ci-upstream-bpf-kasan-gce ci-upstream-bpf-next-kasan-gce ci-upstream-gce-arm64 ci-upstream-gce-leak ci-upstream-kasan-badwrites-root ci-upstream-kasan-gce ci-upstream-kasan-gce-386 ci-upstream-kasan-gce-root ci-upstream-kasan-gce-selinux-root ci-upstream-kasan-gce-smack-root ci-upstream-kmsan-gce-386-root ci-upstream-kmsan-gce-root ci-upstream-linux-next-kasan-gce-root ci-upstream-net-kasan-gce ci-upstream-net-this-kasan-gce ci2-upstream-fs ci2-upstream-kcsan-gce ci2-upstream-usb], missing on: [ci-qemu2-arm32]
First crash: 147d, last: 89d
Discussions (2)
Title Replies (including bot) Last reply
[PATCH 2/2] blktrace: move copy_[to|from]_user() out of ->debugfs_lock 2 (2) 2024/12/04 20:40
[syzbot] [block?] possible deadlock in blk_unregister_queue 0 (1) 2024/11/26 00:01

Sample crash report:
======================================================
WARNING: possible circular locking dependency detected
6.13.0-rc6-syzkaller-00051-geea6e4b4dfb8 #0 Not tainted
------------------------------------------------------
kworker/u8:7/4664 is trying to acquire lock:
ffff888144bcdde0 (&q->sysfs_lock){+.+.}-{4:4}, at: blk_unregister_queue+0x125/0x2e0 block/blk-sysfs.c:867

but task is already holding lock:
ffff888144bcde70 (&q->sysfs_dir_lock){+.+.}-{4:4}, at: blk_unregister_queue+0xdb/0x2e0 block/blk-sysfs.c:858

which lock already depends on the new lock.


the existing dependency chain (in reverse order) is:

-> #5 (&q->sysfs_dir_lock){+.+.}-{4:4}:
       __mutex_lock_common kernel/locking/mutex.c:585 [inline]
       __mutex_lock+0x19b/0xa60 kernel/locking/mutex.c:735
       blk_mq_sysfs_unregister_hctxs+0x92/0x2d0 block/blk-mq-sysfs.c:278
       __blk_mq_update_nr_hw_queues+0x93f/0x14e0 block/blk-mq.c:5015
       blk_mq_update_nr_hw_queues+0x2a/0x40 block/blk-mq.c:5070
       nbd_start_device+0x15b/0xd70 drivers/block/nbd.c:1413
       nbd_start_device_ioctl drivers/block/nbd.c:1464 [inline]
       __nbd_ioctl drivers/block/nbd.c:1539 [inline]
       nbd_ioctl+0x21a/0xfd0 drivers/block/nbd.c:1579
       blkdev_ioctl+0x276/0x6d0 block/ioctl.c:693
       vfs_ioctl fs/ioctl.c:51 [inline]
       __do_sys_ioctl fs/ioctl.c:906 [inline]
       __se_sys_ioctl fs/ioctl.c:892 [inline]
       __x64_sys_ioctl+0x190/0x200 fs/ioctl.c:892
       do_syscall_x64 arch/x86/entry/common.c:52 [inline]
       do_syscall_64+0xcd/0x250 arch/x86/entry/common.c:83
       entry_SYSCALL_64_after_hwframe+0x77/0x7f

-> #4 (&q->q_usage_counter(io)#51){++++}-{0:0}:
       bio_queue_enter block/blk.h:75 [inline]
       blk_mq_submit_bio+0x1fb6/0x24c0 block/blk-mq.c:3090
       __submit_bio+0x384/0x540 block/blk-core.c:629
       __submit_bio_noacct_mq block/blk-core.c:710 [inline]
       submit_bio_noacct_nocheck+0x698/0xd70 block/blk-core.c:739
       submit_bio_noacct+0x93a/0x1e20 block/blk-core.c:868
       submit_bh fs/buffer.c:2819 [inline]
       block_read_full_folio+0x812/0xa50 fs/buffer.c:2446
       filemap_read_folio+0xc6/0x2a0 mm/filemap.c:2357
       filemap_update_page mm/filemap.c:2441 [inline]
       filemap_get_pages+0x155f/0x1be0 mm/filemap.c:2562
       filemap_read+0x3ca/0xd70 mm/filemap.c:2637
       blkdev_read_iter+0x187/0x480 block/fops.c:770
       new_sync_read fs/read_write.c:484 [inline]
       vfs_read+0x87f/0xbe0 fs/read_write.c:565
       ksys_read+0x12b/0x250 fs/read_write.c:708
       do_syscall_x64 arch/x86/entry/common.c:52 [inline]
       do_syscall_64+0xcd/0x250 arch/x86/entry/common.c:83
       entry_SYSCALL_64_after_hwframe+0x77/0x7f

-> #3 (mapping.invalidate_lock#2){++++}-{4:4}:
       down_read+0x9a/0x330 kernel/locking/rwsem.c:1524
       filemap_invalidate_lock_shared include/linux/fs.h:873 [inline]
       filemap_fault+0x2e0/0x2820 mm/filemap.c:3323
       __do_fault+0x10a/0x490 mm/memory.c:4907
       do_read_fault mm/memory.c:5322 [inline]
       do_fault mm/memory.c:5456 [inline]
       do_pte_missing+0xebd/0x3e00 mm/memory.c:3979
       handle_pte_fault mm/memory.c:5801 [inline]
       __handle_mm_fault+0x103c/0x2a40 mm/memory.c:5944
       handle_mm_fault+0x3fa/0xaa0 mm/memory.c:6112
       faultin_page mm/gup.c:1196 [inline]
       __get_user_pages+0x8d9/0x3b50 mm/gup.c:1494
       __get_user_pages_locked mm/gup.c:1824 [inline]
       __gup_longterm_locked+0x3b7/0x1870 mm/gup.c:2532
       gup_fast_fallback+0x1802/0x2690 mm/gup.c:3434
       get_user_pages_fast+0xa8/0x100 mm/gup.c:3512
       __iov_iter_get_pages_alloc+0x8ed/0x2280 lib/iov_iter.c:1177
       iov_iter_get_pages2+0xa4/0x100 lib/iov_iter.c:1219
       fuse_copy_fill+0x670/0x880 fs/fuse/dev.c:786
       fuse_copy_one fs/fuse/dev.c:1061 [inline]
       fuse_dev_do_write+0x220/0x3720 fs/fuse/dev.c:1990
       fuse_dev_write+0x14f/0x1e0 fs/fuse/dev.c:2087
       new_sync_write fs/read_write.c:586 [inline]
       vfs_write+0x5ae/0x1150 fs/read_write.c:679
       ksys_write+0x12b/0x250 fs/read_write.c:731
       do_syscall_x64 arch/x86/entry/common.c:52 [inline]
       do_syscall_64+0xcd/0x250 arch/x86/entry/common.c:83
       entry_SYSCALL_64_after_hwframe+0x77/0x7f

-> #2 (&mm->mmap_lock){++++}-{4:4}:
       __might_fault mm/memory.c:6751 [inline]
       __might_fault+0x11b/0x190 mm/memory.c:6744
       _inline_copy_from_user include/linux/uaccess.h:162 [inline]
       _copy_from_user+0x29/0xd0 lib/usercopy.c:18
       copy_from_user include/linux/uaccess.h:212 [inline]
       __blk_trace_setup+0xa8/0x180 kernel/trace/blktrace.c:626
       blk_trace_ioctl+0x163/0x290 kernel/trace/blktrace.c:740
       blkdev_ioctl+0x109/0x6d0 block/ioctl.c:682
       vfs_ioctl fs/ioctl.c:51 [inline]
       __do_sys_ioctl fs/ioctl.c:906 [inline]
       __se_sys_ioctl fs/ioctl.c:892 [inline]
       __x64_sys_ioctl+0x190/0x200 fs/ioctl.c:892
       do_syscall_x64 arch/x86/entry/common.c:52 [inline]
       do_syscall_64+0xcd/0x250 arch/x86/entry/common.c:83
       entry_SYSCALL_64_after_hwframe+0x77/0x7f

-> #1 (&q->debugfs_mutex){+.+.}-{4:4}:
       __mutex_lock_common kernel/locking/mutex.c:585 [inline]
       __mutex_lock+0x19b/0xa60 kernel/locking/mutex.c:735
       blk_register_queue+0x13c/0x4f0 block/blk-sysfs.c:774
       add_disk_fwnode+0x785/0x1300 block/genhd.c:493
       add_disk include/linux/blkdev.h:753 [inline]
       brd_alloc.isra.0+0x5a2/0x840 drivers/block/brd.c:401
       brd_init+0x12b/0x1d0 drivers/block/brd.c:481
       do_one_initcall+0x128/0x700 init/main.c:1266
       do_initcall_level init/main.c:1328 [inline]
       do_initcalls init/main.c:1344 [inline]
       do_basic_setup init/main.c:1363 [inline]
       kernel_init_freeable+0x5c7/0x900 init/main.c:1577
       kernel_init+0x1c/0x2b0 init/main.c:1466
       ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:147
       ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244

-> #0 (&q->sysfs_lock){+.+.}-{4:4}:
       check_prev_add kernel/locking/lockdep.c:3161 [inline]
       check_prevs_add kernel/locking/lockdep.c:3280 [inline]
       validate_chain kernel/locking/lockdep.c:3904 [inline]
       __lock_acquire+0x249e/0x3c40 kernel/locking/lockdep.c:5226
       lock_acquire.part.0+0x11b/0x380 kernel/locking/lockdep.c:5849
       __mutex_lock_common kernel/locking/mutex.c:585 [inline]
       __mutex_lock+0x19b/0xa60 kernel/locking/mutex.c:735
       blk_unregister_queue+0x125/0x2e0 block/blk-sysfs.c:867
       del_gendisk+0x2de/0xb20 block/genhd.c:710
       nbd_dev_remove+0x3b/0xe0 drivers/block/nbd.c:264
       process_one_work+0x9c5/0x1ba0 kernel/workqueue.c:3229
       process_scheduled_works kernel/workqueue.c:3310 [inline]
       worker_thread+0x6c8/0xf00 kernel/workqueue.c:3391
       kthread+0x2c1/0x3a0 kernel/kthread.c:389
       ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:147
       ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244

other info that might help us debug this:

Chain exists of:
  &q->sysfs_lock --> &q->q_usage_counter(io)#51 --> &q->sysfs_dir_lock

 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(&q->sysfs_dir_lock);
                               lock(&q->q_usage_counter(io)#51);
                               lock(&q->sysfs_dir_lock);
  lock(&q->sysfs_lock);

 *** DEADLOCK ***

3 locks held by kworker/u8:7/4664:
 #0: ffff888026067148 ((wq_completion)nbd-del){+.+.}-{0:0}, at: process_one_work+0x1293/0x1ba0 kernel/workqueue.c:3204
 #1: ffffc9000ff77d80 ((work_completion)(&nbd->remove_work)){+.+.}-{0:0}, at: process_one_work+0x921/0x1ba0 kernel/workqueue.c:3205
 #2: ffff888144bcde70 (&q->sysfs_dir_lock){+.+.}-{4:4}, at: blk_unregister_queue+0xdb/0x2e0 block/blk-sysfs.c:858

stack backtrace:
CPU: 0 UID: 0 PID: 4664 Comm: kworker/u8:7 Not tainted 6.13.0-rc6-syzkaller-00051-geea6e4b4dfb8 #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
Workqueue: nbd-del nbd_dev_remove_work
Call Trace:
 <TASK>
 __dump_stack lib/dump_stack.c:94 [inline]
 dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:120
 print_circular_bug+0x419/0x5d0 kernel/locking/lockdep.c:2074
 check_noncircular+0x31a/0x400 kernel/locking/lockdep.c:2206
 check_prev_add kernel/locking/lockdep.c:3161 [inline]
 check_prevs_add kernel/locking/lockdep.c:3280 [inline]
 validate_chain kernel/locking/lockdep.c:3904 [inline]
 __lock_acquire+0x249e/0x3c40 kernel/locking/lockdep.c:5226
 lock_acquire.part.0+0x11b/0x380 kernel/locking/lockdep.c:5849
 __mutex_lock_common kernel/locking/mutex.c:585 [inline]
 __mutex_lock+0x19b/0xa60 kernel/locking/mutex.c:735
 blk_unregister_queue+0x125/0x2e0 block/blk-sysfs.c:867
 del_gendisk+0x2de/0xb20 block/genhd.c:710
 nbd_dev_remove+0x3b/0xe0 drivers/block/nbd.c:264
 process_one_work+0x9c5/0x1ba0 kernel/workqueue.c:3229
 process_scheduled_works kernel/workqueue.c:3310 [inline]
 worker_thread+0x6c8/0xf00 kernel/workqueue.c:3391
 kthread+0x2c1/0x3a0 kernel/kthread.c:389
 ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:147
 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
 </TASK>

Crashes (29):
Time Kernel Commit Syzkaller Config Log Report Syz repro C repro VM info Assets (help?) Manager Title
2025/01/09 16:21 upstream eea6e4b4dfb8 40f46913 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-selinux-root possible deadlock in blk_unregister_queue
2025/01/09 16:21 upstream eea6e4b4dfb8 40f46913 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-selinux-root possible deadlock in blk_unregister_queue
2025/01/05 12:16 upstream ab75170520d4 f3558dbf .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-selinux-root possible deadlock in blk_unregister_queue
2025/01/02 23:00 upstream 0bc21e701a6f d3ccff63 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-selinux-root possible deadlock in blk_unregister_queue
2024/12/20 02:56 upstream eabcdba3ad40 1d58202c .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-smack-root possible deadlock in blk_unregister_queue
2024/12/20 02:43 upstream eabcdba3ad40 1d58202c .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-selinux-root possible deadlock in blk_unregister_queue
2024/12/19 17:58 upstream eabcdba3ad40 1d58202c .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-smack-root possible deadlock in blk_unregister_queue
2024/12/19 09:36 upstream c061cf420ded 1432fc84 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-smack-root possible deadlock in blk_unregister_queue
2024/12/17 12:20 upstream f44d154d6e3d f93b2b55 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-smack-root possible deadlock in blk_unregister_queue
2024/12/17 09:55 upstream f44d154d6e3d f93b2b55 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-badwrites-root possible deadlock in blk_unregister_queue
2024/12/16 09:14 upstream 78d4f34e2115 7cbfbb3a .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-smack-root possible deadlock in blk_unregister_queue
2025/01/13 14:14 upstream 5bc55a333a2f 249ceea9 .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream possible deadlock in blk_unregister_queue
2025/01/13 13:53 upstream 5bc55a333a2f 249ceea9 .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream possible deadlock in blk_unregister_queue
2024/12/09 04:24 upstream 62b5a46999c7 9ac0fdc6 .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream possible deadlock in blk_unregister_queue
2024/12/08 11:31 upstream 7503345ac5f5 9ac0fdc6 .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream possible deadlock in blk_unregister_queue
2024/11/28 12:01 upstream b86545e02e8c 5df23865 .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream possible deadlock in blk_unregister_queue
2024/11/25 07:27 upstream 9f16d5e6f220 68da6d95 .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream possible deadlock in blk_unregister_queue
2025/01/18 13:15 upstream 595523945be0 f2cb035c .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream-386 possible deadlock in blk_unregister_queue
2025/01/18 13:15 upstream 595523945be0 f2cb035c .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream-386 possible deadlock in blk_unregister_queue
2025/01/18 05:05 upstream ad26fc09dabf f2cb035c .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream-386 possible deadlock in blk_unregister_queue
2025/01/15 04:14 upstream c3812b15000c 7315a7cf .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream-386 possible deadlock in blk_unregister_queue
2024/12/22 09:31 upstream 48f506ad0b68 b4fbdbd4 .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream-386 possible deadlock in blk_unregister_queue
2024/12/17 12:23 upstream f44d154d6e3d bc1a1b50 .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream-386 possible deadlock in blk_unregister_queue
2024/12/17 08:20 upstream f44d154d6e3d f93b2b55 .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream-386 possible deadlock in blk_unregister_queue
2024/12/13 15:30 upstream f932fb9b4074 b1b5e51a .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream-386 possible deadlock in blk_unregister_queue
2024/11/21 14:22 upstream 43fb83c17ba2 4b25d554 .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream-386 possible deadlock in blk_unregister_queue
2024/11/22 18:41 linux-next cfba9f07a1d6 68da6d95 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-linux-next-kasan-gce-root possible deadlock in blk_unregister_queue
2025/01/11 15:52 git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux.git fixes 6f6ecce59d99 6dbc6a9b .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu2-riscv64 possible deadlock in blk_unregister_queue
2024/12/17 09:28 git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux.git fixes 21f1b85c8912 f93b2b55 .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu2-riscv64 possible deadlock in blk_unregister_queue
* Struck through repros no longer work on HEAD.