CVE-2026-63944: Bluetooth: hci_sync: fix UAF in hci_le_create_cis_sync
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: hcisync: fix UAF in hcilecreatecissync
hcilecreatecissync() dereferences conn->conntimeout after releasing both rcureadlock() and hcidevlock(hdev). The conn pointer was obtained from an RCU-protected iteration over hdev->connhash.list and is not valid once these locks are dropped. A concurrent disconnect can free the hciconn between the unlock and the dereference, causing a use-after-free read.
The cancellation mechanism in hciconndel() cannot prevent this because hcilecreatecispending() queues hcicreatecissync with data=NULL:
hcicmdsyncqueue(hdev, hcicreatecissync, NULL, NULL);
While hciconndel() dequeues with data=conn:
hcicmdsyncdequeue(hdev, NULL, conn, NULL);
Since NULL != conn, the lookup in hcicmdsynclookupentry() never matches, and the pending work item is not cancelled.
Fix this by saving conn->conntimeout into a local variable while the locks are still held, so the stale conn pointer is never dereferenced after unlock.
This is the same class of bug as the one fixed by commit 035c25007c9e ("Bluetooth: hcisync: Fix UAF on lereadfeaturescomplete") which addressed the identical pattern in a different function.
This vulnerability was identified using 0sec.ai, an open-source automated security auditing platform (https://github.com/0sec-labs).