CVE-2026-98432
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
ipv4: bezpłatne inet_opt i ireq_opt po okresie karencji RCU
tcp_v4_syn_recv_sock() przenosi własność ireq->ireq_opt na
gniazdo podrzędne (newinet->inet_opt) bez jego kopiowania.
Inny procesor może jednocześnie przetwarzać retransmitowany sygnał SYN w tym celu
zażądaj gniazda i wyślij SYNACK z tcp_check_req().
tcp_v4_send_synack() i inet_csk_route_req() czytają ireq->ireq_opt
tylko pod rcu_read_lock() i ip_build_and_send_pkt() i
ip_options_build(), a następnie dwukrotnie przeczytaj opt->optlen.
Należy pamiętać, że sam licznik czasu SYNACK nie stanowi problemu: zawiera on a
odwołanie do gniazda żądania i inet_csk_reqsk_queue_drop()
wywołuje timer_delete_sync() zanim dziecko będzie mogło zostać uwolnione.
Od zatwierdzenia 079096f103fa („tcp/dccp: zainstaluj żądania syn_recv
do tabeli ehash”), gniazda żądań są przetwarzane bez wstrzymywania
blokadę słuchacza, więc nic nie stoi na przeszkodzie, aby było gniazdo dziecięce
uwolniony, gdy SYNACK jest wciąż budowany. Gniazda podrzędne TCP tak
nie ma SOCK_RCU_FREE, a inet_sock_destruct() zwalnia inet_opt
za pomocą zwykłego kfree(), prowadzącego do użycia po zwolnieniu
ip_options_build().
Podobny problem występuje w przypadku migracji gniazda żądania
(net.ipv4.tcp_migrate_req=1 lub BPF_SK_REUSEPORT_SELECT_OR_MIGRATE
programu). reqsk_timer_handler() klonuje gniazdo żądania za pomocą
inet_reqsk_clone(), tak aby stare gniazdo żądania i jego klon
udostępnij ten sam ireq_opt, a następnie reqsk_migrate_reset() czyści
wskaźnik w starym. Kolejny procesor posiadający odniesienie do starego
gniazdo żądania może nadal korzystać z tych opcji (wysyłanie SYNACK,
lub utworzenie dziecka w tcp_v4_syn_recv_sock()), gdy klon jest
freed, a tcp_v4_reqsk_destructor() również używa zwykłej funkcji kfree().
Czytelnicy korzystają już z RCU i innych ścieżek zastępujących inet_opt
(do_ip_setsockopt(), cipso_v4_sock_setattr()...) już używają
kfree_rcu(). Użyj kfree_rcu() w inet_sock_destruct() i
tcp_v4_reqsk_destructor() również.
Pierwszy problem nie dotyczy protokołu IPv6, ponieważ tcp_v6_syn_recv_sock()
duplikuje opcje. tcp_v6_reqsk_destructor() ma to samo
problem z migracją z ipv6_opt, który jest ustawiany tylko przez CALIPSO. To
zostanie omówione w osobnej łatce.
>_ Referencje
- https://git.kernel.org/stable/c/11a03ce3c4a62d84c10ccdfe47f8075006498568
- https://git.kernel.org/stable/c/26d4c36d318cffbbd160884a0e4cec0da4da4936
- https://git.kernel.org/stable/c/742f73df544e03744f2981c467d6542fe8172a2a
- https://git.kernel.org/stable/c/89b5b1eb7d633c33832b7ff2c02e19a144705036
- https://git.kernel.org/stable/c/95a8c8fa9f27dce64c40c41c062de7728bf34ab5
- https://git.kernel.org/stable/c/a47406c769f72c070386985488f1c4d057df86b2
- https://git.kernel.org/stable/c/b3b027ef0cd322bfa839b9aaf5b27551eea54cf6
- https://git.kernel.org/stable/c/e3f33b0a1d89d738e2b913dab519226eaf76e15b
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