CVE-2026-98432 in Linuxinformazioni

Riassunto

di VulDB • 15/10/2026

Nel kernel Linux è stata risolta la seguente vulnerabilità:

ipv4: liberare inet_opt e ireq_opt dopo un periodo di grazia RCU

tcp_v4_syn_recv_sock() trasferisce la proprietà di ireq->ireq_opt al socket figlio (newinet->inet_opt) senza effettuarne una copia.

Un altro processore può elaborare in concorrenza un SYN ritrasmesso per lo stesso request socket e inviare un SYNACK da tcp_check_req(). tcp_v4_send_synack() e inet_csk_route_req() leggono ireq->ireq_opt solo sotto rcu_read_lock(), mentre ip_build_and_send_pkt() e ip_options_build() leggono opt->optlen due volte.

Si noti che il timer stesso del SYNACK non è un problema: mantiene un riferimento sul suo request socket, e inet_csk_reqsk_queue_drop() chiama timer_delete_sync() prima che il socket figlio possa essere liberato.

Dall'commit 079096f103fa ("tcp/dccp: install syn_recv requests into ehash table"), i request sockets vengono elaborati senza mantenere il lock del listener, quindi nulla impedisce al socket figlio di essere liberato mentre il SYNACK è ancora in fase di costruzione. I TCP child sockets non hanno SOCK_RCU_FREE, e inet_sock_destruct() libera inet_opt con un semplice kfree(), portando a un use-after-free in ip_options_build().

Un problema simile esiste con la migrazione del request socket (net.ipv4.tcp_migrate_req=1 o un programma BPF_SK_REUSEPORT_SELECT_OR_MIGRATE). reqsk_timer_handler() clona il request socket con inet_reqsk_clone(), quindi il vecchio request socket e il suo clone condividono lo stesso ireq_opt, dopodiché reqsk_migrate_reset() cancella il puntatore nel vecchio. Un altro processore che mantiene un riferimento sul vecchio request socket può ancora utilizzare queste opzioni (inviando un SYNACK o creando un child in tcp_v4_syn_recv_sock()) quando il clone viene liberato, e tcp_v4_reqsk_destructor() utilizza anch'esso un semplice kfree().

I lettori utilizzano già RCU, e altri percorsi che sostituiscono inet_opt (do_ip_setsockopt(), cipso_v4_sock_setattr()...) utilizzano già kfree_rcu(). Utilizzare kfree_rcu() anche in inet_sock_destruct() e tcp_v4_reqsk_destructor().

IPv6 non è interessato dal primo problema, poiché tcp_v6_syn_recv_sock() duplica le opzioni. tcp_v6_reqsk_destructor() ha lo stesso problema di migrazione con ipv6_opt, che viene impostato solo da CALIPSO. Questo verrà affrontato in un patch separata.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Responsabile

Linux

Prenotare

25/09/2026

Divulgazione

15/10/2026

Moderazione

accettato

EPSS

0.00000

KEV

no

Attività

alto

Fonti

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!