CVE-2026-98432
NieznaneStreszczenie
W jądrze Linux występuje podatność use-after-free w obsłudze opcji IPv4 dla gniazd TCP. Opcje ireq_opt są zwalniane zwykłym kfree(), mimo że inne wątki mogą ich jeszcze używać w ramach RCU (np. przy budowaniu SYNACK lub tworzeniu gniazda potomnego), co prowadzi do użycia zwolnionej pamięci w ip_options_build(). Problem dotyczy również migracji gniazd żądań (tcp_migrate_req).
Ocena ryzyka
Podatność może prowadzić do awarii jądra (panic) lub potencjalnego wykonania kodu w kontekście jądra, co zagraża stabilności i bezpieczeństwu systemu. Wykorzystanie wymaga zdalnego ruchu sieciowego, więc narażone są systemy pełniące rolę serwerów TCP.
Rekomendacja
Zaktualizuj jądro Linux do wersji zawierającej poprawkę, która zastępuje kfree() wywołaniem kfree_rcu() w inet_sock_destruct() i tcp_v4_reqsk_destructor(). Do czasu aktualizacji rozważ ograniczenie ekspozycji usług TCP na niezaufane sieci.
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: ipv4: free inet_opt and ireq_opt after an RCU grace period tcp_v4_syn_recv_sock() transfers ownership of ireq->ireq_opt to the child socket (newinet->inet_opt) without copying it. Another cpu can concurrently process a retransmitted SYN for the same request socket, and send a SYNACK from tcp_check_req(). tcp_v4_send_synack() and inet_csk_route_req() read ireq->ireq_opt under rcu_read_lock() only, and ip_build_and_send_pkt() and ip_options_build() then read opt->optlen twice. Note that the SYNACK timer itself is not an issue: it holds a reference on its request socket, and inet_csk_reqsk_queue_drop() calls timer_delete_sync() before the child can be freed. Since commit 079096f103fa ("tcp/dccp: install syn_recv requests into ehash table"), request sockets are processed without holding the listener lock, so nothing prevents the child socket from being freed while the SYNACK is still being built. TCP child sockets do not have SOCK_RCU_FREE, and inet_sock_destruct() frees inet_opt with a plain kfree(), leading to a use-after-free in ip_options_build(). A similar issue exists with request socket migration (net.ipv4.tcp_migrate_req=1, or a BPF_SK_REUSEPORT_SELECT_OR_MIGRATE program). reqsk_timer_handler() clones the request socket with inet_reqsk_clone(), so that the old request socket and its clone share the same ireq_opt, then reqsk_migrate_reset() clears the pointer in the old one. Another cpu holding a reference on the old request socket can still be using these options (sending a SYNACK, or creating a child in tcp_v4_syn_recv_sock()) when the clone is freed, and tcp_v4_reqsk_destructor() also uses a plain kfree(). Readers already use RCU, and other paths replacing inet_opt (do_ip_setsockopt(), cipso_v4_sock_setattr()...) already use kfree_rcu(). Use kfree_rcu() in inet_sock_destruct() and tcp_v4_reqsk_destructor() as well. IPv6 is not affected by the first issue, because tcp_v6_syn_recv_sock() duplicates the options. tcp_v6_reqsk_destructor() has the same migration issue with ipv6_opt, which is only set by CALIPSO. This will be addressed in a separate patch.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

