CVE-2026-98406
NieznaneStreszczenie
W jądrze Linux w funkcji ieee80211_set_bitrate_mask() brakowało sprawdzenia flagi IEEE80211_SDATA_IN_DRIVER przed wywołaniem sterownika. Gdy interfejs był w stanie running, ale nie był jeszcze dodany do sterownika (np. podczas bringup lub teardown), wywołanie przez ioctl SIOCSIWRATE prowadziło do ostrzeżenia WARN w driver-ops.h. Poprawka dodaje sprawdzenie IN_DRIVER i zwraca -ENETDOWN.
Ocena ryzyka
Podatność może być wywołana lokalnie przez użytkownika z uprawnieniami do interfejsu sieciowego, powodując ostrzeżenie jądra (WARN) i potencjalną destabilizację systemu. W środowiskach wielodostępnych lub przy automatyzacji może prowadzić do zakłóceń w działaniu sieci bezprzewodowej.
Rekomendacja
Zaktualizuj jądro Linux do wersji zawierającej poprawkę dla CVE-2026-98406. Jeśli aktualizacja nie jest możliwa, ogranicz dostęp do interfejsów bezprzewodowych i operacji ioctl SIOCSIWRATE dla niezaufanych użytkowników.
Inne podatności w Linux kernel
Zobacz wszystkie- CVE-2026-98431Nieznane
W jądrze Linux występuje zakleszczenie (deadlock) typu ABBA pomiędzy blokadami mmap_lock i disassociation_lock w podsystemie RDMA/uverbs. Wątek wykonujący mmap/fork zakłada blokady w kolejności mmap_lock → disassociation_lock, natomiast wątek wykonujący uverbs_user_mmap_disassociate() w kolejności odwrotnej, co prowadzi do możliwego zakleszczenia. Problem został rozwiązany poprzez usunięcie disassociation_lock i użycie istniejącej blokady hw_destroy_rwsem.
- CVE-2026-98430Nieznane
W jądrze Linux w sterowniku RDMA/efa procedura obsługi przerwania zarządzającego uzyskuje dostęp zarówno do kolejki ukończeń administracyjnych, jak i do kolejki zdarzeń asynchronicznych. Sterownik rejestrował przerwanie przed utworzeniem tych kolejek i niszczył je przed zwolnieniem przerwania, przez co czas życia procedury obsługi nie był ograniczony przez zasoby, do których się odwołuje. Poprawka inicjalizuje kolejki z zamaskowanymi przerwaniami, rejestruje przerwanie, a następnie przełącza w tryb przerwań, a przy usuwaniu resetuje urządzenie i zwalnia przerwanie przed zniszczeniem kolejek.
- CVE-2026-98429Nieznane
W jądrze Linux w sterowniku RDMA/efa procedura obsługi przerwania ukończeń uzyskuje dostęp do stanu EQ i bufora DMA. Jej przerwanie było rejestrowane przed zainicjalizowaniem tego stanu, a demontaż zwalniał bufor przed free_irq() synchronizującym procedurę obsługi. Poprawka inicjalizuje EQ bez uzbrajania go, rejestruje przerwanie, a następnie je uzbraja, a przy demontażu zwalnia przerwanie przed zniszczeniem EQ.
- CVE-2026-98428Nieznane
W jądrze Linux sterownik USB 6fire używa URB osadzonych w różnych strukturach dla PCM, MIDI i komunikacji, co jest wadliwą implementacją; ponieważ URB jest zarządzany przez licznik referencji, może to prowadzić do użycia zwolnionej pamięci (UAF), gdy URB jest zwalniany asynchronicznie. Poprawka konwertuje te osadzone URB na alokowane przez usb_alloc_urb(), zamieniając każde osadzone struct urb na wskaźnik i aktualizując wywołania; zasoby są zwalniane w wspólnych destruktorach wywoływanych zarówno przy błędzie inicjalizacji, jak i przy odłączeniu.
- CVE-2026-98427Nieznane
W jądrze Linux w kodzie algorytmu CoDel (net/sched) pętla odrzucania w codel_dequeue() mogła nie przesuwać się do przodu przy bardzo małych wartościach interwału, co prowadziło do opróżnienia całego backlogu pod blokadą qdisc w jednym wywołaniu. Nieuprzywilejowany użytkownik mógł w ten sposób wywołać soft lockup. Poprawka ogranicza krok pętli do co najmniej 1 ticka oraz maksymalnie 256 odrzuceń na wywołanie codel_dequeue().
- CVE-2026-98426Nieznane
W jądrze Linux w sterowniku wifi mwifiex funkcja mwifiex_pcie_request_irq() rejestruje każdy wektor MSI-X z dev_id dla danego indeksu (&card->msix_ctx[i]). Przy błędzie request_irq() pętla czyszcząca "for (j = 0; j < i; j++)" zwalnia msix_entries[j].vector, ale przekazuje &card->msix_ctx[i] z nieudanego indeksu jako dev_id. Ponieważ free_irq() dopasowuje po (irq, dev_id), nie znajduje akcji zarejestrowanej z &card->msix_ctx[j]: już zarejestrowane przerwanie j nie jest zwalniane (wyciek), a free_irq() ostrzega o zwalnianiu nieistniejącego przerwania. Poprawka używa &card->msix_ctx[j].
- CVE-2026-98425Nieznane
W jądrze Linux funkcja ieee80211_request_ibss_scan() w module mac80211 wywołuje ostrzeżenie, gdy regdomain nie pozostawia żadnego dozwolonego kanału do skanowania. Sytuacja ta może wystąpić, ponieważ regdomain może się zmienić podczas pracy interfejsu IBSS, który może działać jeszcze przez 60-sekundowy okres karencji przed wyłączeniem. Poprawka usuwa to ostrzeżenie.
- CVE-2026-98424Nieznane
W jądrze Linux funkcja cfg80211_switch_netns() w module cfg80211 przenosi interfejsy, a następnie przenosi samo wiphy, ustawiając jego przestrzeń nazw sieci i zmieniając nazwę, co powoduje przeniesienie w sysfs. Zmiana nazwy może się nie powieść (tylko przy błędach alokacji), pozostawiając niespójny stan i wywołując ostrzeżenie. Poprawka cofa przeniesienie i pozwala operacji zakończyć się niepowodzeniem, a jeśli cofnięcie się nie powiedzie, wywołuje WARN.
- CVE-2026-98423Nieznane
W jądrze Linux moduł mac80211_hwsim sprawdza pole ->started dla ramek pochodzących z wmediumd, ale radio może zostać zatrzymane po sprawdzeniu, a przed dostarczeniem ramki, co powoduje wywołanie WARN_ON(!local->started) w mac80211. Poprawka rozszerza zakres blokady mutex i synchronizuje się z nią przy zatrzymywaniu radia, a także usuwa zbędny komunikat błędu.
- CVE-2026-98422Nieznane
W jądrze Linux moduł mac80211 przy interfejsach AP_VLAN pobiera crypto_tx_tailroom_needed_cnt z interfejsu AP przy ifup, ale nigdy nie zmniejsza tego licznika, chyba że AP również zostanie wyłączony. Ponowne włączenie tego samego AP_VLAN ponownie zwiększa licznik, co ostatecznie wywołuje sprawdzenie WARN_ON_ONCE. Poprawka resetuje licznik przy ifdown.
Oryginalny opis (angielski, źródło NVD)
In the Linux kernel, the following vulnerability has been resolved: wifi: mac80211: avoid WARN in set_bitrate_mask when sdata not in driver ieee80211_set_bitrate_mask() checks if the interface is running via ieee80211_sdata_running(), but it does not check if the interface is still present in the driver. When sdata is running but IEEE80211_SDATA_IN_DRIVER is not set, the call reaches drv_set_bitrate_mask() in driver-ops.h which hits wlan1: Failed check-sdata-in-driver check, flags: 0x0 WARNING: net/mac80211/driver-ops.h:884 at drv_set_bitrate_mask Syzkaller triggers this via wext SIOCSIWRATE ioctl. The Call Trace shows wext_ioctl_dispatch() in wext-core.c dispatching the ioctl, calling ioctl_standard_call() for SIOCSIWRATE, which calls cfg80211_wext_siwrate() in wext-compat.c. That builds a bitrate mask and calls rdev_set_bitrate_mask() which ends up in ieee80211_set_bitrate_mask() in cfg.c. The interface is marked running via SDATA_STATE_RUNNING but flags is 0, so check_sdata_in_driver() fails. When the interface is being torn down, or when wext ioctl is issued during interface bringup before drv_add_interface() sets IN_DRIVER, the running check passes while IN_DRIVER is clear. Check IEEE80211_SDATA_IN_DRIVER in ieee80211_set_bitrate_mask() before calling the driver, returning -ENETDOWN. This avoids the WARN_ONCE in driver-ops.h and matches other cfg.c operations that bail early when not in driver. This change should be safe because wiphy mutex is held in cfg80211_wext_siwrate() via guard(wiphy), and IN_DRIVER is set/cleared under RTNL and wiphy paths in drv_add_interface() and drv_remove_interface() in driver-ops.c, so the check is race-free against driver add/remove. Returning -ENETDOWN is the same error other not-running paths use and does not introduce new locking. [also add second syzbot report]
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

