CVE-2026-98736 in Linux
Сводка
по VulDB • 18.10.2026
В ядре Linux была устранена следующая уязвимость:
Bluetooth: hci_conn — блокировка доступа к родительскому объекту при настройке расширенного SCO (enhanced SCO)
Функция `hci_enhanced_setup_sync()` выполняется в рабочем потоке запроса без захвата мьютекса `hci_dev_lock`, который был удержан вызывающей стороной на момент постановки задачи в очередь. Проверка возможности CVSD и функция `find_next_esco_param()` обращаются к полю `conn->parent` (родительский объект соединения), тогда как рабочий поток приема может разорвать связь с этим родителем и освободить его память.
Следующая интерливинг-последовательность операций может привести к уязвимости use-after-free:
hci_enhanced_setup_sync() hci_disconn_complete_evt() загрузка conn->parent hci_dev_lock() hci_conn_del(родитель ACL) разрыв связи с дочерним объектом SCO уменьшение ссылки на родительский объект соединения очистка поля child->parent освобождение родителя ACL bt_link_release() kfree(parent) hci_dev_unlock() чтение parent->features[0][3]
Ссылка, удерживаемая для дочернего объекта SCO, поставленного в очередь, не сохраняет родительский объект ACL живым после разрыва связи. Коммит `42de40abe25d` ("Bluetooth: hci_conn: fix the SCO setup context lifetime") защищает дочерний объект, сохраненный в контексте очереди, но оставляет эти обращения к родительскому объекту без защиты.
При диагностической задержке в 40 мс после загрузки `conn->parent`, на инструментализированном ядре на основе коммита `fd179f8a05be` (который уже содержит `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
Выделено задачей 92: __hci_conn_add+0x304/0x1df0 hci_connect_acl+0x349/0x3e0 hci_connect_sco+0x3b/0x9a0 sco_sock_connect+0x475/0xca0
Освобождено задачей 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
Доступаемый адрес находится на 71-м байте внутри освобожденного родителя ACL, в байте `features[0][3]`; поставленный в очередь дочерний объект SCO является другим объектом. Диагностика сохраняет загруженный родительский объект во время задержки, что соответствует не измененной скомпилированной проверке возможностей, и не изменяет ссылки на родительские объекты или путь их освобождения (teardown path).
Необходимо удерживать `hci_dev_lock()` в течение переключения кодеков, включая каждый вызов функции `find_next_esco_param()`, и отпускать его при всех ошибках выбора. Функцию `configure_datapath_sync()` следует оставить вне критической секции, так как она ожидает события HCI. Необходимо сохранить логику выбора параметров и существующие возвращаемые значения.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.