IT SBIT Services
Schneeberger
DEEN
CVE tracker

Linux kernel: Use-after-free in IPv4 TCP handshake IP options

CVE-2026-98432Critical 9.8Public exploit

← All vulnerabilities

Summary

A flaw in the IPv4 TCP handshake code of the Linux kernel allows a use-after-free of IP options on a TCP child socket. A retransmitted SYN processed on another CPU can trigger the bug while a SYN-ACK is still being built. The CVSS base score is 9.8 (Critical); the CVE record does not describe an authentication requirement for the trigger path, and the risk is greatest on exposed TCP listeners.

Affected

  • Linux kernel from commit 079096f103fa (introduced in 4.4) until the fixed stable versions listed below
  • Unaffected according to the CVE record: versions before 4.4 and the fixed stable branches
  • Distribution kernels differ; the status of each distribution must be checked on its vendor advisory

Fixed in

  • Upstream stable branches: 5.10.272, 5.15.223, 6.1.190, 6.6.159, 6.12.113, 6.18.56, 7.2.10 and 7.3 or later
  • Distribution kernel versions: check the advisory of your vendor (e.g. Debian, SUSE, Oracle Linux, Amazon Linux, Ubuntu, Red Hat); status reported by secondary sources is inconsistent
  • Upstream fix commit: e3f33b0a1d89d738e2b913dab519226eaf76e15b

Workaround

  • Unknown. No vendor-documented workaround is available.
  • Setting net.ipv4.tcp_migrate_req is named as a trigger path, but no vendor has documented it as a mitigation; do not change it without written confirmation from your distribution.

Exploitation

  • No confirmed exploitation in the wild reported as of the research date (30 October 2026).
  • Not known to be listed in CISA's Known Exploited Vulnerabilities catalog as of that date.

Our recommendation

  • Identify all Linux systems with a kernel from 4.4 onward that accept inbound TCP connections, including appliances and virtual machines.
  • Install the kernel update from your distribution as soon as it is available and reboot the system.
  • Until a fix is installed, restrict exposure of TCP services and monitor your vendor's advisory for updates.
  • Monitor for unusual kernel crashes or repeated SYN traffic on critical services.

Public exploits

Links to third-party sites, not checked by us – exploit code can contain malware. Only use it in isolated test environments.

Research sources

Researched and written up in English and German by an AI (Claude by Anthropic) based on NVD, CISA, EPSS and the sources listed. The vendor information is authoritative. Researched on 30 Oct 2026, 17:48.

Original description (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.

NVD references (11)

Sources

The tracker combines official, freely usable data sources – updated continuously:

This product uses data from the NVD API but is not endorsed or certified by the NVD. EPSS data © FIRST.org.

Affected? We can help.

We check whether your systems are affected, install updates and close the gap – continuously with the System Health Checker if you wish.