Medium · published February 14, 2026
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: hci_uart: fix null-ptr-deref in hci_uart_write_work
hci_uart_set_proto() sets HCI_UART_PROTO_INIT before calling
hci_uart_register_dev(), which calls proto->open() to initialize
hu->priv. However, if a TTY write wakeup occurs during this window,
hci_uart_tx_wakeup() may schedule write_work before hu->priv is
initialized, leading to a NULL pointer dereference in
hci_uart_write_work() when proto->dequeue() accesses hu->priv.
The race condition is:
CPU0 CPU1
---- ----
hci_uart_set_proto()
set_bit(HCI_UART_PROTO_INIT)
hci_uart_register_dev()
tty write wakeup
hci_uart_tty_wakeup()
hci_uart_tx_wakeup()
schedule_work(&hu->write_work)
proto->open(hu)
// initializes hu->priv
hci_uart_write_work()
hci_uart_dequeue()
proto->dequeue(hu)
// accesses hu->priv (NULL!)
Fix this by moving set_bit(HCI_UART_PROTO_INIT) after proto->open()
succeeds, ensuring hu->priv is initialized before any work can be
scheduled.
| Product | Versions | Fixed in |
|---|---|---|
| linux/linux_kernel | ≥ 5.4.293, < 5.5 | 5.5 |
| linux/linux_kernel | ≥ 5.10.237, < 5.10.249 | 5.10.249 |
| linux/linux_kernel | ≥ 5.15.181, < 5.15.199 | 5.15.199 |
| linux/linux_kernel | ≥ 6.1.135, < 6.1.162 | 6.1.162 |
| linux/linux_kernel | ≥ 6.6.88, < 6.6.123 | 6.6.123 |
| linux/linux_kernel | ≥ 6.12.24, < 6.12.69 | 6.12.69 |
| linux/linux_kernel | ≥ 6.13.12, < 6.14 | 6.14 |
| linux/linux_kernel | ≥ 6.14.3, < 6.18.9 | 6.18.9 |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |