Get a Demo

Let's Patch It!

Book a short call with one our specialists, we'll walk you through how Endor Patches work, and ask you a few questions about your environment (like your primary programming languages and repository management). We'll also send you an email right after you fill out the form, feel free to reply with any questions you have in advance!

CVE

CVE-2026-64459

tcp: restore RCU grace period in tcp_ao_destroy_sock
Back to all
CVE

CVE-2026-64459

tcp: restore RCU grace period in tcp_ao_destroy_sock

In the Linux kernel, the following vulnerability has been resolved:

tcp: restore RCU grace period in tcpaodestroy_sock

Commit 51e547e8c89c ("tcp: Free TCP-AO/TCP-MD5 info/keys without RCU")

removed the callrcu() callback from tcpaodestroysock(), arguing that

"the destruction of info/keys is delayed until the socket destructor"

and therefore "no one can discover it anymore".

That argument does not hold for the call site in tcp_connect()

(net/ipv4/tcp_output.c:4327-4332). At that point the socket is in

TCPSYNSENT, has already been inserted into the inet ehash by

inethashconnect() in tcpv4connect(), and is therefore very much

discoverable: any softirq running tcpv4rcv() on another CPU can take

the socket out of the ehash, walk into tcpinboundhash(), and load

tp->aoinfo via implicit RCU before bhlocksocknested() is taken on

the destroying CPU.

The reader path then enters _tcpaodolookup() (net/ipv4/tcp_ao.c:208)

which re-loads tp->aoinfo via rcudereference_check(); the re-load can

still observe the (about-to-be-freed) pointer because there is no

synchronizercu() between rcuassignpointer(tp->aoinfo, NULL) and

tcpaoinfofree() in tcpaodestroysock(). The captured pointer is

then walked at line 223:

hlistforeachentryrcu(key, &ao->head, node, ...)

The writer's synchronous kfree() is free to complete between the line

218 re-fetch and the line 223 hlist iteration. The slab is reused

(or simply LIST_POISON1-stamped if not yet reused) and the iteration

walks attacker-controlled or poison memory in softirq context.

Reproducer (no debug shim, stock x86_64 v7.1-rc2 SMP+KASAN, QEMU+KVM):

an unprivileged uid=1000 process inside CLONENEWUSER|CLONENEWNET

installs TCPMD5SIG + TCPAOADDKEY on a TCP socket, sprays forged

TCP-AO segments toward its eventual 4-tuple via raw sockets, then

calls connect(). The md5-wins reconciliation in tcp_connect() fires

tcpaodestroy_sock(); the softirq backlog reader on the loopback

NAPI path crashes on the freed ao->head.first walk:

  Oops: general protection fault, probably for non-canonical

    address 0xfbd59c000000002f

  KASAN: maybe wild-memory-access in range

    [0xdead000000000178-0xdead00000000017f]

  CPU: 0 UID: 1000 PID: 100 Comm: repro_userns

  RIP: 0010:_tcpaodolookup+0x107/0x1c0

  Call Trace: <IRQ>

    _tcpaodolookup+0x107/0x1c0

    tcpaoinbound_lookup.constprop.0+0x12a/0x200

    tcpinboundao_hash+0x5ea/0x1520

    tcpinboundhash+0x7ce/0x1240

    tcpv4rcv+0x1e7a/0x3e10

    ...

Restore the RCU grace period: re-add struct rcuhead to tcpao_info

and replace the synchronous tcpaoinfofree() with a callrcu()

callback. Readers that captured tp->aoinfo before rcuassign_pointer

NULLed it now see the object remain valid until rcureadunlock().

With the patch applied the reproducer runs cleanly for 2000 iterations

on the same kernel build.

Package Versions Affected

Package Version
patch Availability
No items found.

Automatically patch vulnerabilities without upgrading

Fix Without Upgrading
Detect compatible fix
Apply safe remediation
Fix with a single pull request

CVSS Version

Severity
Base Score
CVSS Version
Score Vector
C
H
U
9.8
-
3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
C
H
U
0
-
3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
C
H
U
-

Related Resources

No items found.

References

https://git.kernel.org/stable/c/4caf12c778fed3dc3824cf36263be5e2c491fbd0, https://git.kernel.org/stable/c/657646c08c94ef7b9dbe468fe7828032216f9841, https://git.kernel.org/stable/c/8bc4d43bccbd60efe85d0a44d5bf41762f2f0c30, https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/64xxx/CVE-2026-64459.json, https://nvd.nist.gov/vuln/detail/CVE-2026-64459, https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Severity

9.8

CVSS Score
0
10

Basic Information

Base CVSS
9.8
EPSS Probability
0.00475%
EPSS Percentile
0.40011%
Introduced Version
51e547e8c89c661f6fbede4a28b1d33b13625683,6.18.0,6.19.0,0
Fix Available
8bc4d43bccbd60efe85d0a44d5bf41762f2f0c30,6.18.39,7.1.4,7.0.0-1012.12~24.04.1,7.0.0-1011.11~24.04.1,7.0.0-31.31~24.04.1,7.0.0-1018.18~24.04.1,7.0.0-31.31.1~24.04.1,1:6.18.39-79.141.amzn2023,1:1.0-0.amzn2023

Fix Critical Vulnerabilities Instantly

Secure your app without upgrading.
Fix Without Upgrading