CVE-2026-98736 in Linux
Zusammenfassung
von VulDB • 18.10.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
Bluetooth: hci_conn: Sperren des Parent-Zugriffs während der erweiterten SCO-Einrichtung (enhanced SCO setup)
hci_enhanced_setup_sync() wird im Request-Workqueue ausgeführt, ohne dass das von seinem Aufrufer gehaltene hci_dev_lock gesperrt ist, wenn die Einrichtung in die Warteschlange gestellt wurde. Seine CVSD-Fähigkeitsprüfung und find_next_esco_param() dereferenzieren conn->parent, während der Receive-Workqueue diesen Parent entkoppeln und freigeben kann.
Die folgende Interleaving-Situation (Verschachtelung) kann zu einem Use-After-Free führen:
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]
Die Referenz, die für das in der Warteschlange befindliche SCO-Kind gehalten wird, hält seinen ACL-Parent nach dem Entkoppeln nicht am Leben. Das Commit 42de40abe25d („Bluetooth: hci_conn: fix the SCO setup context lifetime“) schützt das im queued Context gespeicherte Kind, lässt jedoch diese Parent-Zugriffe ungeschützt.
Mit einer diagnostischen Verzögerung von 40 ms nach dem Laden von conn->parent zeigt ein instrumentierter Kernel basierend auf fd179f8a05be (der bereits 42de40abe25d enthält):
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+0x1d/0x280 hci_conn_del+0x524/0xe30 hci_disconn_complete_evt+0x403/0x8c0 hci_event_packet+0x71b/0xb20 hci_rx_work+0x293/0x730
Die zugegriffene Adresse befindet sich 71 Bytes in den freigegebenen ACL-Parent hinein, an seinem features[0][3]-Byte; das in der Warteschlange befindliche SCO-Kind ist ein anderes Objekt. Die Diagnose bewahrt den geladenen Parent über die Verzögerung hinweg auf, entspricht dem unveränderten kompilierten Fähigkeitscheck und ändert nicht die Parent-Referenzen oder den Teardown-Pfad.
Halten Sie hci_dev_lock() während des Codec-Wechsels, einschließlich jedes Aufrufs von find_next_esco_param(), und geben Sie es bei allen Auswahlfreigefehlern frei. Halten Sie configure_datapath_sync() außerhalb der kritischen Sektion, da sie auf HCI-Ereignisse wartet. Bewahren Sie die Parameterauswahl und vorhandene Rückgabewerte bei.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.