HIGH
bluetooth BIS UAF
CVE-2026-46111
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
KernelScan AI7.1HIGH
01Description
In the Linux kernel, the following vulnerability has been resolved: Bluetooth: hci_conn: fix potential UAF in create_big_sync Add hci_conn_valid() check in create_big_sync() to detect stale connections before proceeding with BIG creation. Handle the resulting -ECANCELED in create_big_complete() and re-validate the connection under hci_dev_lock() before dereferencing, matching the pattern used by create_le_conn_complete() and create_pa_complete(). Keep the hci_conn object alive across the async boundary by taking a reference via hci_conn_get() when queueing create_big_sync(), and dropping it in the completion callback. The refcount and the lock are complementary: the refcount keeps the object allocated, while hci_dev_lock() serializes hci_conn_hash_del()'s list_del_rcu() on hdev->conn_hash, as required by hci_conn_del(). hci_conn_put() is called outside hci_dev_unlock() so the final put (which resolves to kfree() via bt_link_release) does not run under hdev->lock, though the release path would be safe either way. Without this, create_big_complete() would unconditionally dereference the conn pointer on error, causing a use-after-free via hci_connect_cfm() and hci_conn_del().
02KernelScan AI Analysis
Risk summary
A use-after-free vulnerability in Bluetooth BIS connection handling allows adjacent attackers with low privileges to trigger kernel memory corruption. The race condition occurs when hci_conn objects are freed while asynchronous BIG creation operations are still pending, leading to use-after-free dereferences in completion callbacks. Successful exploitation can result in information disclosure, arbitrary memory corruption, or kernel panic.
Vulnerability analysis
The vulnerability stems from improper lifetime management of hci_conn objects during BIS (Broadcast Isochronous Stream) connection creation. The original code queued asynchronous HCI command sync operations without holding a reference on the connection object, allowing hci_conn_del() to free the object while create_big_complete() still needed to dereference it. The fix adds hci_conn_get()/hci_conn_put() reference counting across the async boundary, hci_conn_valid() checks under hci_dev_lock() to detect stale connections, and proper -ECANCELED handling. This affects the Bluetooth LE Audio code path and requires an attacker to be within Bluetooth range and able to trigger BIS creation via the local Bluetooth socket interface.
03Fix Versions
| Branch | Fixed in | Patch commit |
|---|---|---|
| 6.12 | 6.12.90 | 1750a2df0eab |
| 6.18 | 6.18.32 | dc34f8d8240f |
| 6.6 | 6.6.140 | 6823f730bf19 |
| 7.0 | 7.0.7 | f8eaf92c57ad |
| mainline | 7.1-rc3 | 0beddb0c380b |