CVE-2025-68304
N/A
Summary
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: hci_core: lookup hci_conn on RX path on protocol side
The hdev lock/lookup/unlock/use pattern in the packet RX path doesn't ensure hci_conn* is not concurrently modified/deleted. This locking appears to be leftover from before conn_hash started using RCU commit bf4c63252490b ("Bluetooth: convert conn hash to RCU") and not clear if it had purpose since then.
Currently, there are code paths that delete hci_conn* from elsewhere than the ordered hdev->workqueue where the RX work runs in. E.g. commit 5af1f84ed13a ("Bluetooth: hci_sync: Fix UAF on hci_abort_conn_sync") introduced some of these, and there probably were a few others before it. It's better to do the locking so that even if these run concurrently no UAF is possible.
Move the lookup of hci_conn and associated socket-specific conn to protocol recv handlers, and do them within a single critical section to cover hci_conn* usage and lookup.
syzkaller has reported a crash that appears to be this issue:
[Task hdev->workqueue] [Task 2]
hci_disconnect_all_sync
l2cap_recv_acldata(hcon)
hci_conn_get(hcon)
hci_abort_conn_sync(hcon)
hci_dev_lock
hci_dev_lock
hci_conn_del(hcon)
v-------------------------------- hci_dev_unlock
hci_conn_put(hcon)
conn = hcon->l2cap_data (UAF)
Affected Software
| Vendor | Product | Version Range | Status |
|---|---|---|---|
| Linux | Linux | 5af1f84ed13a416297ab9ced7537f4d5ae7f329a < ec74cdf77310c43b01b83ee898a9bd4b4b0b8e93 | affected |
| Linux | Linux | 5af1f84ed13a416297ab9ced7537f4d5ae7f329a < 79a2d4678ba90bdba577dc3af88cc900d6dcd5ee | affected |
| Linux | Linux | cd55c13bbb3d093ae601aa97e588ed4c1390ebb1 | affected |
| Linux | Linux | 4d3ca4a9aaf0aa798a6be372dc0fc3a29e37dd57 | affected |
| Linux | Linux | 80265dd1d944c3f33e52375b5dbe654980bd2688 | affected |
| Linux | Linux | 6.1.149 < 6.2 | affected |
| Linux | Linux | 6.4.16 < 6.5 | affected |
| Linux | Linux | 6.5.3 < 6.6 | affected |
| Linux | Linux | 6.6 | affected |
| Linux | Linux | 0 < 6.6 | unaffected |
| Linux | Linux | 6.17.11 <= 6.17.* | unaffected |
| Linux | Linux | 6.18 <= * | unaffected |
Weaknesses
References
- https://git.kernel.org/stable/c/ec74cdf77310c43b01b83ee898a9bd4b4b0b8e93
- https://git.kernel.org/stable/c/79a2d4678ba90bdba577dc3af88cc900d6dcd5ee
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.