Look up another CVE · open CVE-2026-64523 in the interactive tracker
CVE-2026-64523
net/handshake: Take a long-lived file reference at submit
Published 2026-07-25 (3 months ago) by the Linux kernel CNA. Subsystem net/handshake. Debian urgency: unimportant.
What to do, per Debian release
Debian's own status for CVE-2026-64523 in every release this site tracks, and what each one means in practice. Every status below is the one the Debian Security Team publishes for this CVE. source
| Release | Status | Version | What this means |
|---|---|---|---|
| Debian 12bookworm | not affected | 6.1.190-1 | Nothing to do. bookworm never shipped the vulnerable code. |
| Debian 13trixie | fixed | 6.12.94-1 | Update the kernel and reboot. Fixed in 6.12.94-1. A running kernel keeps the old code until the machine restarts. |
| Debian 14forky | fixed | 7.0.12-1 | Update the kernel and reboot. Fixed in 7.0.12-1. A running kernel keeps the old code until the machine restarts. |
| Debian unstablesid | fixed | 7.0.12-1 | Update the kernel and reboot. Fixed in 7.0.12-1. A running kernel keeps the old code until the machine restarts. |
The vulnerability
What the bug is
handshake_nl_accept_doit() needs the file pointer backing req->hr_sk->sk_socket to survive the window between handshake_req_next() and the subsequent FD_PREPARE() and get_file(). The submit-side sock_hold() does not provide that. sk_refcnt keeps struct sock alive, but struct socket is owned by sock->file: when the consumer fputs the last file reference, sock_release() tears the socket down regardless of any sock_hold. Add an hr_file pointer to struct handshake_req and acquire an explicit reference on sock->file during handshake_req_submit(). handshake_complete() and handshake_req_cancel() release the reference on the completion-bit-winning path. The submit error path must also release the file reference, but after rhashtable insertion a concurrent handshake_req_cancel() can discover the request and race the error path. Gate the error-path cleanup -- sk_destruct restoration, fput, and request destruction -- with test_and_set_bit(HANDSHAKE_F_REQ_COMPLETED), the same serialization handshake_complete() and handshake_req_cancel() already use. When cancel has already claimed ownership, the submit error path returns without touching the request; socket teardown handles final destruction. The accept-side dereferences are not yet retargeted; that change comes in the next patch.
Where it lives
The fix touches these files. If the subsystem is one you do not use, the practical exposure is lower, though the package is still the vulnerable one.
net/handshake/handshake.h
net/handshake/netlink.c
net/handshake/request.c
- What this is
- HANDSHAKE UPCALL FOR TRANSPORT LAYER SECURITYMAINTAINERS section matched on net/handshake/ · kernel-tls-handshake@lists.linux.dev · Maintained
Check it on the machine
grep -w CONFIG_NET_HANDSHAKE /boot/config-$(uname -r)Reads the booted kernel's own configuration, on the machine and nowhere else. =y is built in, =m is a module, and an is not set line means the code is not there.
Show whether Debian builds this, per release
Debian builds this code. Every release with an answer below compiles the affected file into the kernels it ships. The build rule could not be established for 1 release, so nothing is claimed about those.
- bookworm?
- trixie, forky, sidy
- ?
- not established - no Makefile entry for the affected file
- y
- built into the kernel image on every flavour - only a patch removes it
Where a release above reads "not established", no build rule for the affected file was found in that release's kernel tree. That is a gap in this lookup, not a finding that the code is absent.
- Build switch
- CONFIG_NET_HANDSHAKE
From the configuration Debian publishes for every kernel flavour it builds. It covers only the architectures Debian ships a linux-config package for, and nothing about a kernel you built yourself. Debian's own status above stays authoritative about the source package.MAINTAINERS kbuild Makefiles Debian linux-config packages
Signals
- Published
- 2026-07-25 (3 months ago)source
- CVSS
- 9.8 critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Hsource recompute it - Attack vector
- network (AV:N)source
- EPSS
- 0.67%, higher than 51.1% of all CVEssource
- CISA KEV
- not listedthe KEV catalogue
- Debian urgency
- unimportantsource
- Subsystem
- net/handshake
Upstream fixes
The versions the CNA records as introducing and fixing this, and the commit for each. source
| Introduced | Fixed in | Commit |
|---|---|---|
| 6.4 | 6.12.93 | 685b10dd0e32 |
| 6.4 | 6.18.44 | b913801ad9b9 |
| 6.4 | 7.0.12 | 16eaba5aa89c |
| 6.4 | 7.1 | 09dba37eee70 |
Why the CNA scored it this way
Quoted from the kernel CNA's own scoring file, word for word. A highlighted metric carries the most severe value CVSS v3.1 defines for it, which is what pushes the score up. source
- AV:NAttack vector, network
- An unauthenticated remote peer can make network-facing NFS/RPC-over-TLS or TLS-enabled NVMe/TCP consumers submit a handshake, then disconnect or force timeout while tlshd accepts it.
- AC:LAttack complexity, low
- Connection churn lets the attacker repeatedly create handshake requests and drive cancellation while the normal agent accepts; no secret state or uncontrollable memory layout is required.
- PR:NPrivileges required, none
- The RPC_AUTH_TLS probe and NVMe/TCP TLS setup occur before peer authentication. ACCEPT requires init-namespace CAP_NET_ADMIN, but trusted tlshd issues it automatically rather than the attacker.
- UI:NUser interaction, none
- Kernel consumers and the handshake daemon process the request automatically without any victim user action.
- S:UScope, unchanged
- Exploitation compromises resources governed by the same host-kernel security authority and does not inherently cross a VM, IOMMU, or other security boundary.
- C:HConfidentiality impact, high
- The race can dereference reclaimed socket, file, or handshake-request memory; heap reuse of this UAF can provide access to arbitrary kernel data.
- I:HIntegrity impact, high
- The stale file pointer reaches refcount-writing operations such as get_file(), while reclaimed request data includes callback pointers, making arbitrary writes or control-flow hijacking defensible.
- A:HAvailability impact, high
- The NULL dereference or use-after-free can cause a kernel oops or panic, and a remote attacker can trigger the race repeatedly.