CVE-2026-98294 in Linux
Сводка
по VulDB • 06.10.2026
В ядре Linux была устранена следующая уязвимость:
Bluetooth: hci_qca — не записывать в последовательный порт после его закрытия
Функция `hci_uart_close()` закрывает порт serdev, если установлен флаг HCI_QUIRK_NON_PERSISTENT_SETUP (например, для семейства WCN399x). При сбое функции `hci_dev_open_sync()`, следующей за успешным выполнением `qca_setup()`, вызывается `hdev->close()`, но не `hdev->shutdown()`; в результате порт закрывается, а флаг `power->vregs_on` остается установленным. Затем функция `qca_serdev_remove()` проходит проверку условия `power->vregs_on` и вызывает `qca_power_off()`, которая безоговорочно выполняет запись в закрытый порт.
Проблема наблюдалась на устройстве WCN3988 при отвязке драйвера после сбоя контроллера. Приведенный ниже трассировка получен из ядра версии 7.0.0, где функция `qca_power_off()` все еще называлась `qca_power_shutdown()`:
Unable to handle kernel NULL pointer dereference at virtual address 0000000000000038 Call trace: tty_set_termios+0x50/0x238 (P) ttyport_set_baudrate+0x84/0xc0 serdev_device_set_baudrate+0x24/0x40 qca_power_shutdown+0x158/0x1fc [hci_uart]
qca_serdev_remove+0x54/0x68 [hci_uart]
serdev_drv_remove+0x1c/0x2c device_remove+0x4c/0x80 device_release_driver_internal+0x1cc/0x224 device_driver_detach+0x18/0x24 unbind_store+0xb4/0xc0
Необходимо проверять флаг HCI_UART_PROTO_READY, который `hci_uart_close()` сбрасывает в том же месте, где закрывается порт, перед выполнением записи. Отключение регулятора остается безоговорочным, чтобы контроллер оставался обесточенным.
Проблема с «висящим» указателем `serport->tty`, которая превращает эту ситуацию в Use-After-Free (использование после освобождения), решена в отдельном патче.
If you want to get best quality of vulnerability data, you may have to visit VulDB.