* [PATCH] Bluetooth: hci_sync: Serialize devcoredump reset during device open
@ 2026-10-06 14:39 Cen Zhang
2026-10-06 15:30 ` bluez.test.bot
2026-10-07 17:30 ` [PATCH] " patchwork-bot+bluetooth
0 siblings, 2 replies; 3+ messages in thread
From: Cen Zhang @ 2026-10-06 14:39 UTC (permalink / raw)
To: marcel, luiz.dentz
Cc: linux-bluetooth, linux-kernel, baijiaju1990, jjzuming, zzzccc427
An ACTIVE devcoredump's buffer cursors must remain valid from the
packet handler's state check through its copy. hci_devcd_rx() holds
hdev->lock across that interval, and hci_devcd_reset() requires the
same lock. However, hci_dev_open_sync() invokes reset without taking
it.
A registered VHCI controller can collect a dump through its debugfs
interface while the controller is down. If a successful open overlaps
with handling a nonempty dump packet, reset can run after the receiver's
ACTIVE check and before its copy:
hci_devcd_rx() hci_dev_open_sync()
dequeue nonempty skb
hci_dev_lock(hdev)
handler observes ACTIVE
hdev->open(hdev) succeeds
hci_devcd_reset(hdev)
dump.tail = NULL
dump.state = IDLE
hci_devcd_copy()
compare against old dump.end
memcpy(NULL, ..., skb->len)
hci_dev_unlock(hdev)
Reset leaves dump.end pointing at the old buffer and purges only queued
packets, so it cannot discard the skb already dequeued by the receiver.
The bounds check can pass with a NULL tail, leading to a nonempty copy
to address zero. KASAN reported a 24-byte NULL write in hci_devcd_rx().
Take hdev->lock around the open-time reset. The receiver then finishes
its state check and copy using valid cursors before reset, or observes
IDLE after reset and skips the copy.
KASAN report as below:
BUG: KASAN: null-ptr-deref in hci_devcd_rx+0x5d5/0x1a80
Write of size 24 at addr 0000000000000000 by task kworker/u17:0/496
CPU: 0 UID: 0 PID: 496 Comm: kworker/u17:0 Not tainted
7.2.0-rc6-pmb-bt-functional-v1+ #1 PREEMPT(lazy)
Hardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps
fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
Workqueue: hci0 hci_devcd_rx
Call Trace:
<TASK>
dump_stack_lvl+0x93/0xd0
kasan_report+0xe0/0x110
? hci_devcd_rx+0x5d5/0x1a80
kasan_check_range+0x105/0x1b0
__asan_memcpy+0x3c/0x60
hci_devcd_rx+0x5d5/0x1a80
? srso_alias_return_thunk+0x5/0xfbef5
? __pfx_hci_devcd_rx+0x10/0x10
? srso_alias_return_thunk+0x5/0xfbef5
? lock_release+0xc8/0x280
? srso_alias_return_thunk+0x5/0xfbef5
process_one_work+0x908/0x19c0
? __pfx_process_one_work+0x10/0x10
? srso_alias_return_thunk+0x5/0xfbef5
? lock_is_held_type+0x8f/0x100
? srso_alias_return_thunk+0x5/0xfbef5
worker_thread+0x65c/0xe40
? __pfx_worker_thread+0x10/0x10
kthread+0x34f/0x460
? srso_alias_return_thunk+0x5/0xfbef5
? __pfx_kthread+0x10/0x10
ret_from_fork+0x659/0x940
? __pfx_ret_from_fork+0x10/0x10
? srso_alias_return_thunk+0x5/0xfbef5
? __switch_to+0x74f/0xf80
? __pfx_kthread+0x10/0x10
ret_from_fork_asm+0x1a/0x30
</TASK>
==================================================================
Disabling lock debugging due to kernel taint
Fixes: 9695ef876fd1 ("Bluetooth: Add support for hci devcoredump")
Assisted-by: LLM
Signed-off-by: Cen Zhang <zzzccc427@gmail.com>
---
diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
index 1fe11d3ef1aaa8118811fb778b591e0413b4b3f0..8e4fc26b3c42d72a33393bd0b381414c4c0f927e 100644
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c
@@ -5454,7 +5454,9 @@ int hci_dev_open_sync(struct hci_dev *hdev)
goto done;
}
+ hci_dev_lock(hdev);
hci_devcd_reset(hdev);
+ hci_dev_unlock(hdev);
set_bit(HCI_RUNNING, &hdev->flags);
hci_sock_dev_event(hdev, HCI_DEV_OPEN);
^ permalink raw reply related [flat|nested] 3+ messages in thread
* RE: Bluetooth: hci_sync: Serialize devcoredump reset during device open
2026-10-06 14:39 [PATCH] Bluetooth: hci_sync: Serialize devcoredump reset during device open Cen Zhang
@ 2026-10-06 15:30 ` bluez.test.bot
2026-10-07 17:30 ` [PATCH] " patchwork-bot+bluetooth
1 sibling, 0 replies; 3+ messages in thread
From: bluez.test.bot @ 2026-10-06 15:30 UTC (permalink / raw)
To: linux-bluetooth, zzzccc427
[-- Attachment #1: Type: text/plain, Size: 2381 bytes --]
This is automated email and please do not reply to this email!
Dear submitter,
Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/series/1180369/
---Test result---
Test Summary:
CheckPatch PASS 0.74 seconds
VerifyFixes PASS 0.12 seconds
VerifySignedoff PASS 0.12 seconds
GitLint FAIL 0.33 seconds
SubjectPrefix PASS 0.12 seconds
BuildKernel PASS 30.24 seconds
CheckAllWarning PASS 36.40 seconds
CheckSparse PASS 36.59 seconds
BuildKernel32 PASS 29.93 seconds
CheckKernelLLVM PASS 35.37 seconds
TestRunnerSetup PASS 792.81 seconds
TestRunner_l2cap-tester PASS 12.86 seconds
TestRunner_iso-tester PASS 10.73 seconds
TestRunner_bnep-tester PASS 3.14 seconds
TestRunner_mgmt-tester FAIL 72.19 seconds
TestRunner_rfcomm-tester PASS 4.53 seconds
TestRunner_sco-tester PASS 5.63 seconds
TestRunner_ioctl-tester PASS 4.89 seconds
TestRunner_mesh-tester PASS 5.52 seconds
TestRunner_smp-tester PASS 6.99 seconds
TestRunner_userchan-tester PASS 3.20 seconds
TestRunner_6lowpan-tester PASS 4.42 seconds
IncrementalBuild PASS 28.76 seconds
Details
##############################
Test: GitLint - FAIL
Desc: Run gitlint
Output:
Bluetooth: hci_sync: Serialize devcoredump reset during device open
40: B2 Line has trailing whitespace: " "
41: B2 Line has trailing whitespace: " CPU: 0 UID: 0 PID: 496 Comm: kworker/u17:0 Not tainted "
42: B2 Line has trailing whitespace: " 7.2.0-rc6-pmb-bt-functional-v1+ #1 PREEMPT(lazy) "
43: B2 Line has trailing whitespace: " Hardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps "
##############################
Test: TestRunner_mgmt-tester - FAIL
Desc: Run mgmt-tester with test-runner
Output:
Total: 503, Passed: 502 (99.8%), Failed: 1, Not Run: 0
Failed Test Cases
Pairing Acceptor - SMP over BR/EDR 2 Timed out 2.481 seconds
https://github.com/bluez/bluetooth-next/pull/870
---
Regards,
Linux Bluetooth
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Bluetooth: hci_sync: Serialize devcoredump reset during device open
2026-10-06 14:39 [PATCH] Bluetooth: hci_sync: Serialize devcoredump reset during device open Cen Zhang
2026-10-06 15:30 ` bluez.test.bot
@ 2026-10-07 17:30 ` patchwork-bot+bluetooth
1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+bluetooth @ 2026-10-07 17:30 UTC (permalink / raw)
To: Cen Zhang
Cc: marcel, luiz.dentz, linux-bluetooth, linux-kernel, baijiaju1990,
jjzuming
Hello:
This patch was applied to bluetooth/bluetooth-next.git (master)
by Luiz Augusto von Dentz <luiz.von.dentz@intel.com>:
On Tue, 6 Oct 2026 22:39:21 +0800 you wrote:
> An ACTIVE devcoredump's buffer cursors must remain valid from the
> packet handler's state check through its copy. hci_devcd_rx() holds
> hdev->lock across that interval, and hci_devcd_reset() requires the
> same lock. However, hci_dev_open_sync() invokes reset without taking
> it.
>
> A registered VHCI controller can collect a dump through its debugfs
> interface while the controller is down. If a successful open overlaps
> with handling a nonempty dump packet, reset can run after the receiver's
> ACTIVE check and before its copy:
>
> [...]
Here is the summary with links:
- Bluetooth: hci_sync: Serialize devcoredump reset during device open
https://git.kernel.org/bluetooth/bluetooth-next/c/860b93123309
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-07 17:30 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-06 14:39 [PATCH] Bluetooth: hci_sync: Serialize devcoredump reset during device open Cen Zhang
2026-10-06 15:30 ` bluez.test.bot
2026-10-07 17:30 ` [PATCH] " patchwork-bot+bluetooth
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox