Cloudanix VulnDB

CVE-2026-98736

None

CVSS

—

EPSS

0.2%

Published

Oct 18, 2026

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A bug in how Linux handles certain Bluetooth audio connections can let a local user crash the whole system or potentially run code with higher privileges.

Exploitation
Local Privilege
Attacker needs
Local User
Complexity
Moderate
Impact
Privilege Gain
Component
OS kernel
Class
Memory Corruption
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

Use-after-free in hci_enhanced_setup_sync() when dereferencing conn->parent without hci_dev_lock held, allowing the ACL parent to be freed by a concurrent hci_disconn_complete_evt on the receive workqueue during enhanced SCO setup on the request workqueue.

Why it matters to the business

Kernel memory corruption on Linux systems using Bluetooth SCO/eSCO connections can lead to system crashes, denial of service, or potential local privilege escalation; low exploitation likelihood but affects any kernel with the vulnerable Bluetooth stack until patched.

How an attack unfolds

An attacker with local access triggers interleaved Bluetooth SCO connection setup and ACL disconnection events so that hci_enhanced_setup_sync loads a parent pointer that is subsequently freed by hci_conn_del, then reads from the freed object during codec capability checks or find_next_esco_param.

How to fix it

Update to a kernel containing the fix that acquires hci_dev_lock across the CVSD capability check and find_next_esco_param calls inside hci_enhanced_setup_sync while leaving configure_datapath_sync outside the lock; rebuild and reboot with the patched kernel.

How to confirm the fix worked

Confirm the lock acquisition around the parent accesses in hci_enhanced_setup_sync source; run Bluetooth SCO connection/disconnection stress tests under KASAN or KMSAN to verify absence of use-after-free reports.

Typical attack path

  1. Establish ACL and SCO connections via userspace Bluetooth stack
  2. Trigger concurrent disconnection of the ACL parent while enhanced SCO setup work item is queued
  3. Force the setup handler to dereference the now-freed parent object
  4. Trigger slab use-after-free via KASAN-detectable read or attacker-controlled reuse

How to detect it

Inspect kernel logs and KASAN reports for slab-use-after-free involving hci_enhanced_setup_sync, hci_cmd_sync_work, or hci_conn_del during Bluetooth event processing; correlate with recent SCO socket connect and disconnect activity.

What your security team should do

  • Prioritize kernel updates for systems exposing Bluetooth functionality
  • Disable Bluetooth SCO/eSCO profiles if kernel patching is delayed
  • Monitor for Bluetooth-related kernel oops or KASAN reports in production logs
  • Track upstream stable and distribution kernel advisories for backported fixes

The record

In the Linux kernel, the following vulnerability has been resolved: Bluetooth: hci_conn: Lock parent access during enhanced SCO setup Bluetooth: hci_conn: Lock parent access during enhanced SCO setup hci_enhanced_setup_sync() runs on the request workqueue without the hci_dev_lock held by its caller when setup was queued. Its CVSD capability check and find_next_esco_param() dereference conn->parent while the receive workqueue can unlink and release that parent. The following interleaving can cause a use-after-free: hci_enhanced_setup_sync() hci_disconn_complete_evt() load conn->parent hci_dev_lock() hci_conn_del(ACL parent) unlink SCO child drop link's parent reference clear child->parent release ACL parent bt_link_release() kfree(parent) hci_dev_unlock() read parent->features[0][3] The reference held for the queued SCO child does not keep its ACL parent alive after unlinking. Commit 42de40abe25d ("Bluetooth: hci_conn: fix the SCO setup context lifetime") protects the child stored in the queued context, but leaves these parent accesses unprotected. With a 40 ms diagnostic delay after loading conn->parent, an instrumented kernel based on fd179f8a05be, which already contains 42de40abe25d, BUG: KASAN: slab-use-after-free in hci_enhanced_setup_sync+0xda5/0xdf0 Read of size 1 at addr ffff888102204047 by task kworker/u17:0/93 Call Trace: hci_enhanced_setup_sync+0xda5/0xdf0 hci_cmd_sync_work+0x13c/0x290 process_one_work+0x6b4/0x10e0 Allocated by task 92: __hci_conn_add+0x304/0x1df0 hci_connect_acl+0x349/0x3e0 hci_connect_sco+0x3b/0x9a0 sco_sock_connect+0x475/0xca0 Freed by task 94: kfree+0x121/0x3c0 bt_link_release+0x79/0xa0 device_release+0xc8/0x240 kobject_put+0x14d/0x280 hci_conn_del+0x524/0xe30 hci_disconn_complete_evt+0x403/0x8c0 hci_event_packet+0x71b/0xb20 hci_rx_work+0x293/0x730 The accessed address is 71 bytes into the freed ACL parent, at its features[0][3] byte; the queued SCO child is a different object. The diagnostic preserves the loaded parent across the delay, matching the unmodified compiled capability check, and does not change the parent references or teardown path. Hold hci_dev_lock() across the codec switch, including every call to find_next_esco_param(), and release it on all selection errors. Keep configure_datapath_sync() outside the critical section because it waits for HCI events. Preserve parameter selection and existing return values.

Affected packages

Ecosystem Package Introduced Fixed