
CVE-2026-98432: 9.8 CVE affecting all Ubuntu versions
CVE-2026-98432 is a Linux kernel use-after-free in the IPv4 TCP stack, tracked by Ubuntu (published 15 October 2026, updated 29 October 2026). ireq_opt/inet_opt were freed with plain kfree() while another CPU built a SYNACK under RCU, so ip_options_build() read freed memory; the fix uses kfree_rcu(). Ubuntu rates it High priority, CVSS v3.1 9.8 and v4.0 8.3. The page text does not list per-release package status.
What it is
CVE-2026-98432 is a use-after-free in the Linux kernel IPv4 TCP stack. Ubuntu published its entry on 15 October 2026 and updated it on 29 October 2026, with High priority, CVSS v3.1 9.8 and CVSS v4.0 8.3. The fix changes the free of inet_opt and ireq_opt to kfree_rcu(), so the memory is released only after an RCU grace period.
How it works
The page describes two races. Both end with ip_options_build() reading freed IP options.
- Retransmitted SYN.
tcp_v4_syn_recv_sock()handsireq->ireq_optto the child socket (newinet->inet_opt) without copying it. Another CPU can process a retransmitted SYN for the same request socket and send a SYNACK fromtcp_check_req().tcp_v4_send_synack()andinet_csk_route_req()read the options underrcu_read_lock()only.ip_build_and_send_pkt()andip_options_build()then readopt->optlentwice. Since commit 079096f103fa, request sockets are processed without the listener lock, so nothing stops the child from being freed mid-SYNACK. Child sockets lackSOCK_RCU_FREE, andinet_sock_destruct()freesinet_optwith plainkfree(). - Request socket migration.
reqsk_timer_handler()clones the request socket withinet_reqsk_clone(), and the old socket and the clone share the sameireq_opt.reqsk_migrate_reset()clears the pointer only in the old one. Another CPU holding a reference to the old socket may still be sending a SYNACK or creating a child when the clone is freed.tcp_v4_reqsk_destructor()also uses plainkfree().
The patch switches inet_sock_destruct() and tcp_v4_reqsk_destructor() to kfree_rcu(). Other paths that replace inet_opt, such as do_ip_setsockopt() and cipso_v4_sock_setattr(), already used it.
Preconditions / Affected
- The first race needs a listening IPv4 TCP socket receiving a retransmitted SYN while the child socket is being freed.
- The migration race needs
net.ipv4.tcp_migrate_req=1or aBPF_SK_REUSEPORT_SELECT_OR_MIGRATEprogram. - IPv6 is not affected by the first issue, because
tcp_v6_syn_recv_sock()duplicates the options. - The SYNACK timer itself is not a problem. It holds a reference on its request socket, and
inet_csk_reqsk_queue_drop()callstimer_delete_sync()before the child can be freed. - The CVSS v4.0 vector is
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:H/SC:N/SI:N/SA:N. It scores availability impact High and confidentiality and integrity Low, and marks attack requirements as Present. The v3.1 vector isCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H.
What to do
Install the Ubuntu kernel update that carries the fix. Ubuntu says it recommends not cherry-picking updates. The page text does not list per-release package status or fixed versions, so check the Ubuntu CVE page's status table before relying on the title's "all Ubuntu versions" claim. The page offers no workaround. Checking whether net.ipv4.tcp_migrate_req is enabled or a reuseport migration BPF program is loaded shows whether the second race is reachable, but it does not remove the first.
Caveats
- The IPv6 counterpart is not fixed here.
tcp_v6_reqsk_destructor()has the same migration issue withipv6_opt, which is only set by CALIPSO. The page says a separate patch will address it. - The page gives no exploitation reports and no proof of concept.
CVEs named here
- CVE-2026-98432
Technologies named here
- Linux kernel
- Ubuntu
- CVSS
- BPF_SK_REUSEPORT_SELECT_OR_MIGRATE
- CVSS v3.1
- CVSS v4.0
Techniques named here
- Use-after-free
- Race condition on retransmitted SYN
- Request socket migration (net.ipv4.tcp_migrate_req=1)
Related in Cloud & Infra


Orca Security: GenAI Risks in Cloud Environments
.png)
Google API keys keep working after you delete them
