* [PATCH bluetooth v1] Bluetooth: hci_core: Initialize link key before publication
@ 2026-10-19 8:17 Binbin Deng
2026-10-20 18:20 ` patchwork-bot+bluetooth
0 siblings, 1 reply; 2+ messages in thread
From: Binbin Deng @ 2026-10-19 8:17 UTC (permalink / raw)
To: marcel, luiz.dentz, johan.hedberg
Cc: linux-bluetooth, linux-kernel, Binbin Deng
hci_add_link_key() allocates a new link key with kzalloc(), inserts it into
hdev->link_keys with list_add_rcu(), and only then initializes its address,
value, type, and PIN length. RCU readers such as hci_find_link_key()
and the debugfs link_keys_show() do not take hci_dev_lock, so they can
traverse the new entry during that initialization window and observe
a zero or partially initialized key.
This can be triggered by racing a link-key update with another CPU looking
up or dumping keys. In particular, userspace can issue
MGMT_OP_LOAD_LINK_KEYS while another process reads the corresponding
debugfs file.
Complete all fields of a newly allocated key before publishing it with
list_add_rcu(). Existing keys remain visible and keep their current
in-place update behavior.
Found during a static-analysis-assisted audit: candidate sites were
surfaced by a Coccinelle rule, and the reader/writer paths were
confirmed by LLM-assisted (GLM-5.3) code inspection. The issue was
not observed at runtime; it is identified by code inspection only.
Fixes: 0378b5977013 ("Bluetooth: Convert link keys list to use RCU")
Signed-off-by: Binbin Deng <18983559317@163.com>
---
net/bluetooth/hci_core.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index d183efaf9063..06313211f48e 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -1252,7 +1252,6 @@ struct link_key *hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn,
key = kzalloc_obj(*key);
if (!key)
return NULL;
- list_add_rcu(&key->list, &hdev->link_keys);
}
BT_DBG("%s key for %pMR type %u", hdev->name, bdaddr, type);
@@ -1276,6 +1275,9 @@ struct link_key *hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn,
else
key->type = type;
+ if (!old_key)
+ list_add_rcu(&key->list, &hdev->link_keys);
+
if (persistent)
*persistent = hci_persistent_key(hdev, conn, type,
old_key_type);
--
2.43.0
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH bluetooth v1] Bluetooth: hci_core: Initialize link key before publication
2026-10-19 8:17 [PATCH bluetooth v1] Bluetooth: hci_core: Initialize link key before publication Binbin Deng
@ 2026-10-20 18:20 ` patchwork-bot+bluetooth
0 siblings, 0 replies; 2+ messages in thread
From: patchwork-bot+bluetooth @ 2026-10-20 18:20 UTC (permalink / raw)
To: Binbin Deng
Cc: marcel, luiz.dentz, johan.hedberg, linux-bluetooth, linux-kernel
Hello:
This patch was applied to bluetooth/bluetooth-next.git (master)
by Luiz Augusto von Dentz <luiz.von.dentz@intel.com>:
On Mon, 19 Oct 2026 16:17:11 +0800 you wrote:
> hci_add_link_key() allocates a new link key with kzalloc(), inserts it into
> hdev->link_keys with list_add_rcu(), and only then initializes its address,
> value, type, and PIN length. RCU readers such as hci_find_link_key()
> and the debugfs link_keys_show() do not take hci_dev_lock, so they can
> traverse the new entry during that initialization window and observe
> a zero or partially initialized key.
>
> [...]
Here is the summary with links:
- [v1] Bluetooth: hci_core: Initialize link key before publication
https://git.kernel.org/bluetooth/bluetooth-next/c/153c30aec42d
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] 2+ messages in thread
end of thread, other threads:[~2026-10-20 18:20 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-19 8:17 [PATCH bluetooth v1] Bluetooth: hci_core: Initialize link key before publication Binbin Deng
2026-10-20 18:20 ` 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
all inboxes | Powered by JetHome®