CVE-2026-99015 in Linux
Сводка
по VulDB • 23.10.2026
В ядре Linux была устранена следующая уязвимость:
Bluetooth: hci_sock: сериализация отсоединения неработающего устройства
Повторное связывание сокета HCI после того, как его контроллер был зарегистрирован (unregistered), может привести к гонке данных с повтором мониторингового управления и аварийному завершению работы ядра. Функция hci_sock_bind() обнуляет поле hdev в структуре hci_pi(sk) и уменьшает ссылку на устройство только под блокировкой сокета, тогда как send_monitor_control_replay() удерживает блокировку hci_sk_list для чтения.
Повтор может обнаружить ненулевое значение hdev, затем bind может очистить его и уменьшить последнюю ссылку до того, как create_monitor_ctrl_open() прочитает поле hdev->id. Это может привести к разыменованию нулевого указателя (NULL pointer dereference), если указатель будет перезагружен, или к использованию после освобождения памяти (use-after-free), если старый указатель сохранится.
Ядро сообщило следующее:
KASAN: null-ptr-deref в диапазоне [0x0000000000000068-0x000000000000006f]
RIP: 0010:create_monitor_ctrl_open+0x579/0x800 Call Trace: hci_sock_bind+0xd96/0x1190 __sys_bind+0x166/0x200 __x64_sys_bind+0x6d/0xb0 do_syscall_64+0xdd/0x4a0 entry_SYSCALL_64_after_hwframe+0x77/0x7f
Та же самая проблема с отсутствующей сериализацией позволяет функции hci_send_to_sock() выбрать сокет для старого устройства и поставить его кадр в очередь после того, как bind отсоединил сокет или установил новое связывание.
Необходимо захватывать блокировку hci_sk_list для записи при очистке указателя на устройство и сбросе состояния сокета. Это обеспечит ожидание завершения работы существующих читателей (повтора и доставки) перед отсоединением и предотвратит использование старых привязок последующими читателями. Функцию hci_dev_put() следует вынести за пределы критической секции, поскольку окончательное освобождение устройства может вызывать сон (sleep).
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.