All of lore.kernel.org
 help / color / mirror / Atom feed
From: syzbot <syzbot+c12e2f941af1feb5632c@syzkaller.appspotmail.com>
To: hdanton@sina.com, linux-kernel@vger.kernel.org,
	 syzkaller-bugs@googlegroups.com
Subject: Re: [syzbot] [bluetooth?] KASAN: slab-use-after-free Read in l2cap_connect (2)
Date: Sun, 08 Sep 2024 06:58:02 -0700	[thread overview]
Message-ID: <0000000000005cd79106219c07b0@google.com> (raw)
In-Reply-To: <20240908133747.2610-1-hdanton@sina.com>

Hello,

syzbot has tested the proposed patch but the reproducer is still triggering an issue:
possible deadlock in hci_dev_do_close

======================================================
WARNING: possible circular locking dependency detected
6.11.0-rc6-syzkaller-00326-gd1f2d51b711a-dirty #0 Not tainted
------------------------------------------------------
syz-executor/5776 is trying to acquire lock:
ffff88807d6ca148 ((wq_completion)hci1#2){+.+.}-{0:0}, at: touch_wq_lockdep_map+0x6e/0x120 kernel/workqueue.c:3875

but task is already holding lock:
ffff888060a68d80 (&hdev->req_lock){+.+.}-{3:3}, at: hci_dev_do_close+0x26/0x90 net/bluetooth/hci_core.c:481

which lock already depends on the new lock.


the existing dependency chain (in reverse order) is:

-> #2 (&hdev->req_lock){+.+.}-{3:3}:
       __mutex_lock_common kernel/locking/mutex.c:608 [inline]
       __mutex_lock+0x175/0x9c0 kernel/locking/mutex.c:752
       hci_acldata_packet net/bluetooth/hci_core.c:3792 [inline]
       hci_rx_work+0xabf/0x1650 net/bluetooth/hci_core.c:4033
       process_one_work+0x9c5/0x1b40 kernel/workqueue.c:3231
       process_scheduled_works kernel/workqueue.c:3312 [inline]
       worker_thread+0x6c8/0xed0 kernel/workqueue.c:3389
       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

-> #1 ((work_completion)(&hdev->rx_work)){+.+.}-{0:0}:
       process_one_work+0x927/0x1b40 kernel/workqueue.c:3207
       process_scheduled_works kernel/workqueue.c:3312 [inline]
       worker_thread+0x6c8/0xed0 kernel/workqueue.c:3389
       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

-> #0 ((wq_completion)hci1#2){+.+.}-{0:0}:
       check_prev_add kernel/locking/lockdep.c:3133 [inline]
       check_prevs_add kernel/locking/lockdep.c:3252 [inline]
       validate_chain kernel/locking/lockdep.c:3868 [inline]
       __lock_acquire+0x24ed/0x3cb0 kernel/locking/lockdep.c:5142
       lock_acquire kernel/locking/lockdep.c:5759 [inline]
       lock_acquire+0x1b1/0x560 kernel/locking/lockdep.c:5724
       touch_wq_lockdep_map+0x78/0x120 kernel/workqueue.c:3875
       __flush_workqueue+0x129/0x1200 kernel/workqueue.c:3917
       drain_workqueue+0x18f/0x3d0 kernel/workqueue.c:4081
       hci_dev_close_sync+0x333/0x1110 net/bluetooth/hci_sync.c:5181
       hci_dev_do_close+0x2e/0x90 net/bluetooth/hci_core.c:483
       hci_unregister_dev+0x213/0x620 net/bluetooth/hci_core.c:2698
       vhci_release+0x7f/0x100 drivers/bluetooth/hci_vhci.c:664
       __fput+0x408/0xbb0 fs/file_table.c:422
       task_work_run+0x14e/0x250 kernel/task_work.c:228
       exit_task_work include/linux/task_work.h:40 [inline]
       do_exit+0xaa3/0x2bb0 kernel/exit.c:882
       do_group_exit+0xd3/0x2a0 kernel/exit.c:1031
       get_signal+0x25fb/0x2770 kernel/signal.c:2917
       arch_do_signal_or_restart+0x90/0x7e0 arch/x86/kernel/signal.c:310
       exit_to_user_mode_loop kernel/entry/common.c:111 [inline]
       exit_to_user_mode_prepare include/linux/entry-common.h:328 [inline]
       __syscall_exit_to_user_mode_work kernel/entry/common.c:207 [inline]
       syscall_exit_to_user_mode+0x150/0x2a0 kernel/entry/common.c:218
       do_syscall_64+0xda/0x250 arch/x86/entry/common.c:89
       entry_SYSCALL_64_after_hwframe+0x77/0x7f

other info that might help us debug this:

Chain exists of:
  (wq_completion)hci1#2 --> (work_completion)(&hdev->rx_work) --> &hdev->req_lock

 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(&hdev->req_lock);
                               lock((work_completion)(&hdev->rx_work));
                               lock(&hdev->req_lock);
  lock((wq_completion)hci1#2);

 *** DEADLOCK ***

1 lock held by syz-executor/5776:
 #0: ffff888060a68d80 (&hdev->req_lock){+.+.}-{3:3}, at: hci_dev_do_close+0x26/0x90 net/bluetooth/hci_core.c:481

stack backtrace:
CPU: 0 UID: 0 PID: 5776 Comm: syz-executor Not tainted 6.11.0-rc6-syzkaller-00326-gd1f2d51b711a-dirty #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/06/2024
Call Trace:
 <TASK>
 __dump_stack lib/dump_stack.c:93 [inline]
 dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:119
 check_noncircular+0x31a/0x400 kernel/locking/lockdep.c:2186
 check_prev_add kernel/locking/lockdep.c:3133 [inline]
 check_prevs_add kernel/locking/lockdep.c:3252 [inline]
 validate_chain kernel/locking/lockdep.c:3868 [inline]
 __lock_acquire+0x24ed/0x3cb0 kernel/locking/lockdep.c:5142
 lock_acquire kernel/locking/lockdep.c:5759 [inline]
 lock_acquire+0x1b1/0x560 kernel/locking/lockdep.c:5724
 touch_wq_lockdep_map+0x78/0x120 kernel/workqueue.c:3875
 __flush_workqueue+0x129/0x1200 kernel/workqueue.c:3917
 drain_workqueue+0x18f/0x3d0 kernel/workqueue.c:4081
 hci_dev_close_sync+0x333/0x1110 net/bluetooth/hci_sync.c:5181
 hci_dev_do_close+0x2e/0x90 net/bluetooth/hci_core.c:483
 hci_unregister_dev+0x213/0x620 net/bluetooth/hci_core.c:2698
 vhci_release+0x7f/0x100 drivers/bluetooth/hci_vhci.c:664
 __fput+0x408/0xbb0 fs/file_table.c:422
 task_work_run+0x14e/0x250 kernel/task_work.c:228
 exit_task_work include/linux/task_work.h:40 [inline]
 do_exit+0xaa3/0x2bb0 kernel/exit.c:882
 do_group_exit+0xd3/0x2a0 kernel/exit.c:1031
 get_signal+0x25fb/0x2770 kernel/signal.c:2917
 arch_do_signal_or_restart+0x90/0x7e0 arch/x86/kernel/signal.c:310
 exit_to_user_mode_loop kernel/entry/common.c:111 [inline]
 exit_to_user_mode_prepare include/linux/entry-common.h:328 [inline]
 __syscall_exit_to_user_mode_work kernel/entry/common.c:207 [inline]
 syscall_exit_to_user_mode+0x150/0x2a0 kernel/entry/common.c:218
 do_syscall_64+0xda/0x250 arch/x86/entry/common.c:89
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fc96277bb8a
Code: Unable to access opcode bytes at 0x7fc96277bb60.
RSP: 002b:00007ffc87843a70 EFLAGS: 00000293 ORIG_RAX: 0000000000000003
RAX: 0000000000000000 RBX: 0000000000000003 RCX: 00007fc96277bb8a
RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000003
RBP: 00007ffc87843abc R08: 00007ffc878433cc R09: 00007ffc878437d7
R10: 00007ffc87843450 R11: 0000000000000293 R12: 0000000000000032
R13: 0000000000045913 R14: 00000000000458e1 R15: 00007ffc87843b10
 </TASK>


Tested on:

commit:         d1f2d51b Merge tag 'clk-fixes-for-linus' of git://git...
git tree:       upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=14dd1f29980000
kernel config:  https://syzkaller.appspot.com/x/.config?x=57042fe37c7ee7c2
dashboard link: https://syzkaller.appspot.com/bug?extid=c12e2f941af1feb5632c
compiler:       gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40
patch:          https://syzkaller.appspot.com/x/patch.diff?x=10014877980000


  reply	other threads:[~2024-09-08 13:58 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-24 20:23 [syzbot] [bluetooth?] KASAN: slab-use-after-free Read in l2cap_connect (2) syzbot
2024-09-07 14:42 ` syzbot
2024-09-08  0:01   ` Hillf Danton
2024-09-08  0:24     ` syzbot
2024-09-08  1:28   ` Edward Adam Davis
2024-09-08  1:51     ` syzbot
2024-09-08  2:06   ` Edward Adam Davis
2024-09-08  2:29     ` syzbot
2024-09-08  2:41   ` Edward Adam Davis
2024-09-08  3:06     ` syzbot
2024-09-08  3:15   ` Edward Adam Davis
2024-09-08  3:58     ` syzbot
2024-09-08  3:25   ` Hillf Danton
2024-09-08  4:07     ` syzbot
2024-09-08  4:07   ` Edward Adam Davis
2024-09-08  4:37     ` syzbot
2024-09-08  7:22   ` [PATCH] Bluetooth/l2cap: Fix uaf in l2cap_connect Edward Adam Davis
2024-09-10 20:56     ` Luiz Augusto von Dentz
2024-09-20 15:07       ` Luiz Augusto von Dentz
2024-09-21  1:40         ` Edward Adam Davis
2024-09-21 10:56       ` Hillf Danton
2024-09-23 14:32         ` Luiz Augusto von Dentz
2024-09-23 14:37           ` Aleksandr Nogikh
2024-09-23 15:20             ` Luiz Augusto von Dentz
2024-09-23 15:28               ` [syzbot] [bluetooth?] KASAN: slab-use-after-free Read in l2cap_connect (2) syzbot
2024-09-23 15:38               ` [PATCH] Bluetooth/l2cap: Fix uaf in l2cap_connect Aleksandr Nogikh
2024-09-23 15:48               ` Luiz Augusto von Dentz
2024-09-23 16:21                 ` [syzbot] [bluetooth?] KASAN: slab-use-after-free Read in l2cap_connect (2) syzbot
2024-09-08  8:32   ` Hillf Danton
2024-09-08  8:52     ` syzbot
2024-09-08 11:15   ` Hillf Danton
2024-09-08 11:33     ` syzbot
2024-09-08 12:50   ` Hillf Danton
2024-09-08 13:10     ` syzbot
2024-09-08 13:37   ` Hillf Danton
2024-09-08 13:58     ` syzbot [this message]
2024-09-09 11:06   ` Hillf Danton
2024-09-09 11:31     ` syzbot
2024-09-11 11:29   ` Hillf Danton
2024-09-11 11:59     ` syzbot
2024-09-12 11:49   ` Hillf Danton
2024-09-12 14:51     ` syzbot
2024-09-10 18:43 ` syzbot
2024-09-23 16:13 ` [syzbot] Re: [PATCH] Bluetooth/l2cap: Fix uaf in l2cap_connect syzbot
     [not found] <CABBYNZ+Fj1bDqSG7PkF5OFEx_OWkgm2gEm8640odaQX5EBGxPg@mail.gmail.com>
2024-09-23 16:45 ` [syzbot] [bluetooth?] KASAN: slab-use-after-free Read in l2cap_connect (2) syzbot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0000000000005cd79106219c07b0@google.com \
    --to=syzbot+c12e2f941af1feb5632c@syzkaller.appspotmail.com \
    --cc=hdanton@sina.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=syzkaller-bugs@googlegroups.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.