CVE-2026-85032
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
Klasa urządzeń MCTP przez USB w subsys/pmci/mctp/mctp_usb.c dzieli obsługę RX na dwa wątki: systemowa kolejka robocza uruchamia mctp_usb_class_out_work(), która analizuje dane wyjściowe hosta bajt po bajcie i wypełnia bufor pakietów w usb->rx_pkt, podczas gdy wątek stosu urządzenia USB uruchamia mctp_usb_class_disable(). Procedura obsługi wyłączania korzystała z funkcji k_work_cancel(), która usuwa element roboczy z kolejki, ale natychmiast powraca, nie czekając na już uruchomioną procedurę obsługi, a następnie wywołuje mctp_usb_reset_rx_state() do mctp_pktbuf_free() bufora pakietów, którego proces roboczy może nadal używać.
Oba punkty wejścia do mctp_usb_class_disable() są sterowane przez podłączony host USB: żądanie SET_CONFIGURATION i reset magistrali USB docierają do nich za pośrednictwem usbd_config_reset() w subsys/usb/device_next/usbd_config.c. Host, który przesyła strumieniowo częściowe ramki MCTP do zbiorczego punktu końcowego OUT i wielokrotnie wymusza zmianę konfiguracji lub reset magistrali, kontroluje zatem zarówno analizowane dane, jak i moment, w którym następuje przerwanie, i może ponawiać próbę wyścigu w nieskończoność bez poświadczeń lub interakcji użytkownika.
Jeśli wolne miejsce wyląduje, gdy proces roboczy trzyma wskaźnik, pracownik zapisuje bajty dostarczone przez hosta do zwolnionej pamięci dedykowanej sterty MCTP (CONFIG_MCTP_HEAP_SIZE w subsys/pmci/mctp/mctp_memory.c), uszkadzając odzyskane bufory lub metadane wolnych bloków sys_heap; to okno wymaga prawdziwej równoległości, tj. CONFIG_SMP lub wywłaszczalnego CONFIG_SYSTEM_WORKQUEUE_PRIORITY. W przypadku domyślnej kolejki roboczej współpracującej pracownik może nadal korzystać z funkcji mctp_bus_rx() (wywołanie zwrotne aplikacji lub blokowanie odpowiedzi na komunikat kontrolny w mctp_usb_tx()), po czym wznawia działanie i wywołuje funkcję mctp_pktbuf_free(usb->rx_pkt) na wskaźniku, którego porzucenie ma wartość NULL, wyłuskiwanie wartości NULL i występowanie błędów w obiektach docelowych z wykrywaniem wskaźnika zerowego.
Poprawka zastępuje anulowanie funkcją k_work_cancel_sync() oraz nową strukturą k_work_sync out_work_sync, więc wyłączenie czeka na zakończenie procesu roboczego RX przed opróżnieniem FIFO i zwolnieniem bufora pakietów. Kodem, którego dotyczy problem, jest podsystem MCTP, oznaczony jako eksperymentalny, zbudowany wyłącznie z CONFIG_MCTP_USB.
>_ 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