CVE-2026-46015
High · 7.8CVSS
7.8
EPSS
0.1%
Published
May 27, 2026
CISA due date
—
Cloudanix analysis
A flaw in Linux network connection handling could let someone who can run code on a machine crash it, disrupt services, or potentially gain more control, so affected systems should be updated.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Low
- Impact
- Full Compromise
- Component
- OS kernel
- Class
- Use After Free
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
This is a Linux kernel networking flaw in the TCP listener migration path for SO_REUSEPORT sockets. When an established child socket is migrated from a closing listener to another listener in the same reuseport group, the kernel can fail to wake blocking accept(), poll(), or epoll_wait() waiters, causing listener threads to sleep despite queued connections. The fix also addresses a race where the migrated request can be accepted or torn down on another CPU while the migration path still dereferences the target listener, creating a potential use-after-free condition. Because the issue is in kernel-space socket handling, successful exploitation could affect confidentiality, integrity, and availability of the host, but the CVSS vector indicates an attacker needs local, low-privileged access.
Why it matters to the business
An attacker with local access to a Linux system may be able to trigger kernel instability or potentially gain elevated control by exploiting a race in TCP socket handling. Operationally, affected systems could experience service hangs, missed incoming connections, kernel crashes, or broader compromise if the memory-safety aspect is weaponized. This is not currently listed in CISA KEV, has no known ransomware association, and has a low EPSS score, so broad exploitation is not indicated, but internet-facing or multi-tenant Linux systems that allow untrusted local code should still prioritize kernel updates.
How an attack unfolds
An attacker first obtains the ability to run code as a low-privileged local user on a vulnerable Linux host. They create TCP listeners using SO_REUSEPORT and arrange for established child sockets to be migrated while one listener is being closed. By racing listener shutdown, accept handling, and reuseport migration across CPUs, the attacker attempts to hit the window where the kernel queues a migrated request to a target listener but later dereferences that listener after its reference may already have been dropped. At minimum, this can produce service-level denial of service behavior where blocking accept or epoll-based workers fail to wake for queued connections. If the use-after-free race is reliably controlled, an attacker may attempt kernel memory corruption techniques to crash the system or escalate privileges.
How to fix it
Upgrade the Linux kernel to a vendor-supported release that includes the upstream fix for the TCP listener migration path, specifically the change that calls sk_data_ready() after successful listener migration and protects post-migration target listener dereferences with RCU locking. No exact fixed package versions were provided in the input, so use the security advisory from the relevant Linux distribution or kernel vendor to identify the corrected kernel build. Where immediate patching is not possible, reduce exposure by restricting local shell/container access, limiting the ability of untrusted workloads to create arbitrary network listeners, isolating multi-tenant workloads, and using hardened kernel configurations. Reboot into the patched kernel after installation; installing a kernel package alone is insufficient if the running kernel is not replaced.
How to confirm the fix worked
Confirm that the running kernel, not just the installed package, is a vendor-fixed build using commands such as uname -r and the distribution package manager’s kernel advisory metadata. Review the vendor changelog or backport notes for references to TCP SO_REUSEPORT listener migration, inet_csk_listen_stop(), sk_data_ready(), or the relevant CVE. Validate operationally by ensuring services using SO_REUSEPORT accept new connections normally after listener restarts and do not leave epoll or blocking accept workers asleep with queued connections. For high-assurance validation, use a staging system with the patched kernel and regression tests that exercise listener shutdown and connection migration under load.
Typical attack path
- Gain low-privileged local code execution on a vulnerable Linux host.
- Create TCP sockets using SO_REUSEPORT so multiple listeners share the same port.
- Establish or cause TCP connections that create child sockets eligible for listener migration.
- Trigger shutdown of one listener while another listener in the reuseport group remains active.
- Race accept(), listener shutdown, and migration activity across threads or CPUs.
- Attempt to cause missed wakeups, service hangs, kernel warnings, crashes, or use-after-free behavior.
- If exploitation is reliable, use kernel memory corruption primitives to attempt privilege escalation or system compromise.
How to detect it
Look for evidence of local kernel exploitation attempts or instability rather than remote network-only indicators. Useful log sources include kernel logs, system journal, crash dumps, hypervisor reset events, EDR telemetry for local proof-of-concept execution, and service logs for applications using SO_REUSEPORT. Search for kernel warnings, KASAN reports, RCU warnings, general protection faults, NULL pointer dereferences, or panics referencing TCP listener migration functions such as inet_csk_listen_stop(), reuseport_migrate_sock(), inet_csk_reqsk_queue_add(), reqsk_put(), or sk_data_ready(). Also investigate unexplained service hangs where blocking accept(), poll(), or epoll_wait() workers stop accepting new connections while the process remains running. Because no public exploit indicators were provided and this is a kernel race condition, absence of these artifacts does not prove absence of exploitation.
- BUG: KASAN: use-after-free
- use-after-free in inet_csk_listen_stop
- inet_csk_listen_stop
- reuseport_migrate_sock
- inet_csk_reqsk_queue_add
- reqsk_put
- sk_data_ready
- general protection fault
- kernel panic
- RCU detected stall
- WARNING: suspicious RCU usage
- epoll_wait
- accept()
What your security team should do
- Inventory Linux systems, especially multi-tenant servers, container hosts, CI runners, developer workstations, and systems where untrusted users can run local code.
- Prioritize patching systems that allow local user access, run untrusted containers, or host network services using SO_REUSEPORT.
- Upgrade to a vendor-fixed kernel and reboot to ensure the patched kernel is active.
- Monitor for kernel crash, KASAN, refcount, RCU, and general protection fault messages involving TCP listener migration functions.
- Treat unexpected kernel panics or networking hangs on affected kernels as potentially security-relevant until investigated.
- If patching is delayed, reduce local attack surface by limiting untrusted shell access, tightening container isolation, and restricting workload privileges such as CAP_NET_ADMIN where practical.
- Track distribution advisories because fixed versions may be delivered as backports without changing to an obvious upstream kernel version.
The record
In the Linux kernel, the following vulnerability has been resolved: tcp: call sk_data_ready() after listener migration When inet_csk_listen_stop() migrates an established child socket from a closing listener to another socket in the same SO_REUSEPORT group, the target listener gets a new accept-queue entry via inet_csk_reqsk_queue_add(), but that path never notifies the target listener's waiters. A nonblocking accept() still works because it checks the queue directly, but poll()/epoll_wait() waiters and blocking accept() callers can also remain asleep indefinitely. Call READ_ONCE(nsk->sk_data_ready)(nsk) after a successful migration in inet_csk_listen_stop(). However, after inet_csk_reqsk_queue_add() succeeds, the ref acquired in reuseport_migrate_sock() is effectively transferred to nreq->rsk_listener. Another CPU can then dequeue nreq via accept() or listener shutdown, hit reqsk_put(), and drop that listener ref. Since listeners are SOCK_RCU_FREE, wrap the post-queue_add() dereferences of nsk in rcu_read_lock()/rcu_read_unlock(), which also covers the existing sock_net(nsk) access in that path. The reqsk_timer_handler() path does not need the same changes for two reasons: half-open requests become readable only after the final ACK, where tcp_child_process() already wakes the listener; and once nreq is visible via inet_ehash_insert(), the success path no longer touches nsk directly.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| openSUSE:Tumbleweed | kernel-source | 0 | 7.0.11-1.1 |
Related vulnerabilities
- CVE-2026-53354 In the Linux kernel, the following vulnerability has been resolved: arm64: errata… Also affects kernel-source
- CVE-2026-53325 In the Linux kernel, the following vulnerability has been resolved: agp/amd64: Fix broken… Also affects kernel-source
- CVE-2026-52946 In the Linux kernel, the following vulnerability has been resolved: fs/fcntl: fix… Also affects kernel-source
- CVE-2026-52907 In the Linux kernel, the following vulnerability has been resolved: media: rockchip… Also affects kernel-source
- CVE-2026-52906 In the Linux kernel, the following vulnerability has been resolved: 9p: fix access mode… Also affects kernel-source
- CVE-2026-52905 In the Linux kernel, the following vulnerability has been resolved: mm/damon/core… Also affects kernel-source
- CVE-2026-52904 In the Linux kernel, the following vulnerability has been resolved: drm/nouveau: fix… Also affects kernel-source
- CVE-2026-46332 In the Linux kernel, the following vulnerability has been resolved: greybus… Also affects kernel-source