CVE-2026-19935
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
Kolejki hosta Bluetooth LE odebrały dane kanału zorientowanego połączeniowo (CoC) L2CAP w celu odroczonego przetwarzania za pośrednictwem struktury k_work osadzonej w obiekcie kanału (le_chan->rx_work, procedura obsługi l2cap_rx_process()) za każdym razem, gdy kanał korzysta z dynamicznego PSM (0x0080-0x00FF). Porzucenie kanału w l2cap_chan_destroy() w subsys/bluetooth/host/l2cap.c anuluje przekroczenie limitu czasu retransmisji i wyczerpuje RX FIFO, ale nigdy nie anuluje rx_work. Ponieważ ten element pracy został przesłany do systemowej kolejki roboczej, podczas gdy przetwarzanie odbioru HCI działa w dedykowanej kolejce roboczej Bluetooth RX (CONFIG_BT_RECV_WORKQ_BT, ustawienie domyślne), umieszczony w kolejce element rx_work może przeżyć dłużej niż kanał, na który wskazuje.
Zdalny, nieuwierzytelniony partner z ustalonym kanałem CoC wyzwala to, wysyłając ramkę K danych, po której następuje żądanie rozłączenia L2CAP. Ramka K przesyła rx_work do systemowej kolejki roboczej; ponieważ oba wątki kolejki roboczej współpracują, a kolejka robocza Bluetooth RX działa z wyższym priorytetem (K_PRIO_COOP(CONFIG_BT_RX_PRIO) w porównaniu z CONFIG_SYSTEM_WORKQUEUE_PRIORITY), oczekujący element nie może zostać uruchomiony przed przetworzeniem następującego żądania rozłączenia w le_disconn_req() -> l2cap_chan_del() -> l2cap_chan_destroy(). Następnie stos wywołuje wywołanie zwrotne release(), co API dokumentuje jako oznaczające, że stos porzucił wszystkie odniesienia, a aplikacja może zwolnić pamięć kanału.
W związku z tym aplikacja zwalnia lub ponownie przyjmuje do obiektu, który systemowa kolejka robocza nadal utrzymuje na liście oczekujących. Jeśli pamięć zostanie zwolniona i ponownie przydzielona, kolejka robocza później wyrejestruje węzeł listy i wskaźnik funkcji obsługi odczytany z ponownie wykorzystanej pamięci; jeśli obiekt zostanie ponownie użyty w późniejszym połączeniu, funkcja l2cap_chan_add() wywołuje k_work_init() na elemencie pracy, który wciąż znajduje się w kolejce, uszkadzając listę oczekujących kolejki roboczej, w wyniku czego niepowiązane elementy pracy zostaną usunięte lub kolejka będzie się obracać w zapętlonej liście. Powiązany wariant pozwala l2cap_rx_process() działać jednocześnie z porzucaniem, ściganiem się z net_buf unref le_chan->_sdu i czyszczeniem chan->conn.
Poprawka kieruje pracę RX kanału do kolejki roboczej Bluetooth – w tym samym kontekście, w którym działa każda ścieżka rozrywania – i dodaje jawną k_work_cancel() le_chan->rx_work w l2cap_chan_destroy(), więc żadne odniesienie do kanału nie przetrwa wywołania zwrotnego release(). Nie ma to wpływu na konfiguracje bez CONFIG_BT_L2CAP_DYNAMIC_CHANNEL lub korzystające wyłącznie z PSM przypisanych do SIG (EATT 0x0027, OTS 0x0025), które korzystają z wbudowanej ścieżki odbiorczej.
>_ Słabości (CWE)
>_ Referencje
Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.
This product uses the NVD API but is not endorsed or certified by the NVD.
Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.
CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org