Katalog CVE

CVE-2026-98809

Niskie ryzyko· EPSS 6%
Opublikowano: Zaktualizowano: Przetłumaczono: NVD NIST

Prawdopodobieństwo exploitacji (EPSS)

Niskie ryzyko
0.17%

Percentyl 6 - wyżej niż 6% wszystkich znanych CVE

Streszczenie

W jądrze Linux w funkcji hci_unregister_dev() wyłączane są cmd_work i cmd_timer, a następnie wywoływane jest hci_cmd_sync_clear(), które czeka na zakończenie workera przetwarzającego kolejkę cmd_sync_work_list. Ponieważ cmd_work jest wyłączone, żadne polecenie HCI nie dociera do kontrolera, więc każde oczekujące polecenie czeka pełny HCI_CMD_TIMEOUT (2 s), a kolejka nie ma ograniczenia rozmiaru. Zamknięcie /dev/vhci może zablokować się na czas backlog * 2 s (w reprodukcji ponad 5000 wpisów = godziny zawieszenia).

Ocena ryzyka

Lokalny użytkownik może wywołać wielogodzinne zawieszenie wątku jądra (np. w vhci_release), co prowadzi do odmowy usługi i zablokowania procesów zamykających urządzenie Bluetooth.

Rekomendacja

Zaktualizuj jądro Linux do wersji zawierającej poprawkę, która przestaje przyjmować nowe wpisy po ustawieniu HCI_UNREGISTER i budzi oczekujące żądania z -ENODEV przed anulowaniem pracy.

Inne podatności w Linux kernel

Zobacz wszystkie
Oryginalny opis (angielski, źródło NVD)

In the Linux kernel, the following vulnerability has been resolved: Bluetooth: hci_sync: don't drain cmd_sync backlog on unregister hci_unregister_dev() disables cmd_work and cmd_timer, then calls hci_cmd_sync_clear(), whose cancel_work_sync() waits for hci_cmd_sync_work() to return. That worker dequeues and runs every entry on cmd_sync_work_list. With cmd_work disabled nothing reaches the controller, so each queued HCI command waits the full HCI_CMD_TIMEOUT (2s). The backlog has no bound. Userspace can keep queuing MGMT commands such as MGMT_OP_GET_CLOCK_INFO against a controller that doesn't answer. Closing /dev/vhci then blocks in vhci_release() for backlog * 2s: INFO: task syz-executor:5749 blocked for more than 143 seconds. cancel_work_sync hci_cmd_sync_clear hci_unregister_dev vhci_release In a local reproduction the backlog held more than 5000 entries, which comes to hours of hang. Stop the worker from taking new entries once HCI_UNREGISTER is set, and wake any request still waiting with -ENODEV before cancelling the work. The entries left over are destroyed with -ECANCELED by the existing sweep in hci_cmd_sync_clear(). They stay on the list until the work has stopped, so hci_cmd_sync_dequeue() and friends still see them. A callback already running may still issue another command, which delays unregister by at most one timeout per remaining command, not by the whole backlog.

Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS