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-63978

net/handshake: Drain pending requests at net namespace exit
Back to all
CVE

CVE-2026-63978

net/handshake: Drain pending requests at net namespace exit

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

net/handshake: Drain pending requests at net namespace exit

The arguments to listspliceinit() in handshakenetexit() are

reversed. The call moves the local empty "requests" list onto

hn->hn_requests, leaving the local list empty, so the subsequent

drain loop runs zero iterations. Pending handshake requests that

had not yet been accepted are not torn down when the net namespace

is destroyed; each one keeps a reference on a socket file and on

the handshake_req allocation.

Pass the source and destination in the documented order

(listspliceinit(list, head) moves list onto head) so the pending

list is transferred to the local scratch list and drained through

handshake_complete().

Fixing the splice direction exposes a list-corruption race. After

the splice each req->hr_list still has non-empty link pointers,

threading the stack-local scratch list rather than hn_requests.

A concurrent handshakereqcancel() -- for example, from sunrpc's

TLS timeout on a kernel socket whose netns reference was not

taken -- finds the request through the rhashtable, calls

removepending(), and sees !listempty(&req->hr_list).

_removependinglocked() then listdel_init()s an entry off the

scratch list while the drain iterates, corrupting it. The same

call arriving after the drain loop has run list_del() on an

entry hits LIST_POISON instead.

Have removepending() check HANDSHAKEFNETDRAINING under

hn_lock and report not-found when drain is in progress. The

drain has already taken ownership; handshake_complete()'s existing

testandset on HANDSHAKEFREQ_COMPLETED still arbitrates

between drain and cancel for who calls the consumer's hp_done. Use

listdelinit() rather than listdel() in the drain so req->hrlist

does not carry LIST_POISON after drain releases the entry.

The DRAINING guard in remove_pending() makes cancel return false,

but cancel still falls through to testandset_bit on

HANDSHAKEFREQCOMPLETED and drops the request's hrfile reference.

Without another pin, if that is the last reference, sk_destruct frees

the request while it is still linked on the drain loop's local list.

Pin each request's hrfile under hnlock before releasing the list,

and drop that drain pin after the loop finishes with the request.

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/2bf24a7e190aae0ea47c78099938ae056c622e44, https://git.kernel.org/stable/c/8c35539db0ab0bfa1ea44efab00b053261a69469, https://git.kernel.org/stable/c/9ec20c9a5a04f2c3f1cf65d21f886d7aaa6189cd, https://git.kernel.org/stable/c/ea5fe6a73ca57e5150b8a38b341aef2636eb72f0, https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/63xxx/CVE-2026-63978.json, https://nvd.nist.gov/vuln/detail/CVE-2026-63978, 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.00618%
EPSS Percentile
0.4708%
Introduced Version
3b3009ea8abb713b022d94fba95ec270cf6e7eae,6.4.0,6.13.0,6.19.0,0
Fix Available
ea5fe6a73ca57e5150b8a38b341aef2636eb72f0,6.12.93,6.18.44,7.0.12,6.12.94-1,7.0.0-28.28~24.04.1,7.0.0-1016.16~24.04.1,7.0.0-28.28.1~24.04.3,0:6.12.0-206.104.3.3.el9uek,0:6.12.0-206.104.3.3.el10uek,1:6.12.94-123.174.amzn2023,1:1.0-0.amzn2023

Fix Critical Vulnerabilities Instantly

Secure your app without upgrading.
Fix Without Upgrading