possible deadlock in hci_unregister_dev (3)

Status: upstream: reported on 2026/09/14 03:58
Reported-by: syzbot+7dc05204062eac5a25f1@syzkaller.appspotmail.com
First crash: 59d, last: 31d
▶ ▼ Similar bugs (4)
Kernel Title Rank 🛈 Repro Cause bisect Fix bisect Count Last Reported Patched Status
linux-6.1 possible deadlock in hci_unregister_dev 4 1 1277d 1277d 0/3 auto-obsoleted due to no activity on 2023/08/23 18:31
upstream possible deadlock in hci_unregister_dev (2) bluetooth 4 6 926d 930d 0/29 auto-obsoleted due to no activity on 2024/06/29 16:40
linux-6.1 possible deadlock in hci_unregister_dev (2) 4 4 1129d 1133d 0/3 auto-obsoleted due to no activity on 2024/01/18 06:44
upstream possible deadlock in hci_unregister_dev bluetooth 4 175 1046d 1543d 0/29 auto-obsoleted due to no activity on 2024/03/11 12:23

Sample crash report:
======================================================
WARNING: possible circular locking dependency detected
syzkaller #0 Not tainted
------------------------------------------------------
syz-executor/4276 is trying to acquire lock:
ffff88802fd8cbb8 ((work_completion)(&(&hdev->discov_off)->work)){+.+.}-{0:0}, at: __flush_work+0x109/0xac0 kernel/workqueue.c:3072

but task is already holding lock:
ffff88802fd8c428 (&hdev->lock){+.+.}-{3:3}, at: hci_unregister_dev+0x2e6/0x500 net/bluetooth/hci_core.c:2723

which lock already depends on the new lock.


the existing dependency chain (in reverse order) is:

-> #1 (&hdev->lock){+.+.}-{3:3}:
       __mutex_lock_common kernel/locking/mutex.c:603 [inline]
       __mutex_lock+0x12d/0xae0 kernel/locking/mutex.c:747
       discov_off+0x86/0x1f0 net/bluetooth/mgmt.c:1034
       process_one_work+0x8ab/0x1160 kernel/workqueue.c:2292
       worker_thread+0xaf5/0x12a0 kernel/workqueue.c:2439
       kthread+0x29d/0x330 kernel/kthread.c:376
       ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:295

-> #0 ((work_completion)(&(&hdev->discov_off)->work)){+.+.}-{0:0}:
       check_prev_add kernel/locking/lockdep.c:3162 [inline]
       check_prevs_add kernel/locking/lockdep.c:3281 [inline]
       validate_chain kernel/locking/lockdep.c:3897 [inline]
       __lock_acquire+0x3a03/0x7ea0 kernel/locking/lockdep.c:5171
       lock_acquire+0x1bc/0x4a0 kernel/locking/lockdep.c:5790
       __flush_work+0x122/0xac0 kernel/workqueue.c:3072
       __cancel_work_timer+0x3f4/0x560 kernel/workqueue.c:3163
       mgmt_index_removed+0x269/0x310 net/bluetooth/mgmt.c:9528
       hci_unregister_dev+0x2ee/0x500 net/bluetooth/hci_core.c:2724
       vhci_release+0x7f/0xd0 drivers/bluetooth/hci_vhci.c:565
       __fput+0x20a/0x8b0 fs/file_table.c:320
       task_work_run+0x1d0/0x260 kernel/task_work.c:203
       exit_task_work include/linux/task_work.h:39 [inline]
       do_exit+0x9d5/0x2570 kernel/exit.c:887
       do_group_exit+0x229/0x2e0 kernel/exit.c:1030
       get_signal+0x1259/0x1340 kernel/signal.c:2884
       arch_do_signal_or_restart+0xc4/0x1310 arch/x86/kernel/signal.c:871
       exit_to_user_mode_loop+0x70/0x110 kernel/entry/common.c:177
       exit_to_user_mode_prepare+0xee/0x180 kernel/entry/common.c:213
       __syscall_exit_to_user_mode_work kernel/entry/common.c:295 [inline]
       syscall_exit_to_user_mode+0x16/0x40 kernel/entry/common.c:306
       do_syscall_64+0x58/0xa0 arch/x86/entry/common.c:82
       entry_SYSCALL_64_after_hwframe+0x68/0xd2

other info that might help us debug this:

 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(&hdev->lock);
                               lock((work_completion)(&(&hdev->discov_off)->work));
                               lock(&hdev->lock);
  lock((work_completion)(&(&hdev->discov_off)->work));

 *** DEADLOCK ***

1 lock held by syz-executor/4276:
 #0: ffff88802fd8c428 (&hdev->lock){+.+.}-{3:3}, at: hci_unregister_dev+0x2e6/0x500 net/bluetooth/hci_core.c:2723

stack backtrace:
CPU: 1 PID: 4276 Comm: syz-executor Not tainted syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/16/2026
Call Trace:
 <TASK>
 dump_stack_lvl+0x188/0x24e lib/dump_stack.c:106
 check_noncircular+0x2f8/0x400 kernel/locking/lockdep.c:2215
 check_prev_add kernel/locking/lockdep.c:3162 [inline]
 check_prevs_add kernel/locking/lockdep.c:3281 [inline]
 validate_chain kernel/locking/lockdep.c:3897 [inline]
 __lock_acquire+0x3a03/0x7ea0 kernel/locking/lockdep.c:5171
 lock_acquire+0x1bc/0x4a0 kernel/locking/lockdep.c:5790
 __flush_work+0x122/0xac0 kernel/workqueue.c:3072
 __cancel_work_timer+0x3f4/0x560 kernel/workqueue.c:3163
 mgmt_index_removed+0x269/0x310 net/bluetooth/mgmt.c:9528
 hci_unregister_dev+0x2ee/0x500 net/bluetooth/hci_core.c:2724
 vhci_release+0x7f/0xd0 drivers/bluetooth/hci_vhci.c:565
 __fput+0x20a/0x8b0 fs/file_table.c:320
 task_work_run+0x1d0/0x260 kernel/task_work.c:203
 exit_task_work include/linux/task_work.h:39 [inline]
 do_exit+0x9d5/0x2570 kernel/exit.c:887
 do_group_exit+0x229/0x2e0 kernel/exit.c:1030
 get_signal+0x1259/0x1340 kernel/signal.c:2884
 arch_do_signal_or_restart+0xc4/0x1310 arch/x86/kernel/signal.c:871
 exit_to_user_mode_loop+0x70/0x110 kernel/entry/common.c:177
 exit_to_user_mode_prepare+0xee/0x180 kernel/entry/common.c:213
 __syscall_exit_to_user_mode_work kernel/entry/common.c:295 [inline]
 syscall_exit_to_user_mode+0x16/0x40 kernel/entry/common.c:306
 do_syscall_64+0x58/0xa0 arch/x86/entry/common.c:82
 entry_SYSCALL_64_after_hwframe+0x68/0xd2
RIP: 0033:0x7f266e79d2c7
Code: Unable to access opcode bytes at 0x7f266e79d29d.
RSP: 002b:00007ffed1374488 EFLAGS: 00000206 ORIG_RAX: 0000000000000057
RAX: 0000000000000000 RBX: 0000000000000000 RCX: 00007f266e79d2c7
RDX: 00007ffed13744b0 RSI: 00007ffed1374540 RDI: 00007ffed1374540
RBP: 00007ffed1374540 R08: 00007ffed1375540 R09: 00000000ffffffff
R10: 0000000000000100 R11: 0000000000000206 R12: 00007ffed13755d0
R13: 00007f266e834ccb R14: 00000000001a5656 R15: 00007ffed1375610
 </TASK>

Crashes (4):
Time Kernel Commit Syzkaller Config Log Report Syz repro C repro VM info Assets (help?) Manager Title
2026/10/12 02:56 linux-6.1.y a500ba24937a 4f92358f .config console log report info [disk image] [vmlinux] [kernel image] ci2-linux-6-1-kasan possible deadlock in hci_unregister_dev
2026/10/12 02:55 linux-6.1.y a500ba24937a 4f92358f .config console log report info [disk image] [vmlinux] [kernel image] ci2-linux-6-1-kasan possible deadlock in hci_unregister_dev
2026/10/06 00:56 linux-6.1.y a500ba24937a f7710056 .config console log report info [disk image] [vmlinux] [kernel image] ci2-linux-6-1-kasan possible deadlock in hci_unregister_dev
2026/09/14 03:58 linux-6.1.y cf82dcca9634 70a60e12 .config console log report info [disk image] [vmlinux] [kernel image] ci2-linux-6-1-kasan-arm64 possible deadlock in hci_unregister_dev
* Struck through repros no longer work on HEAD.