CVE-2026-52910
NoneCVSS
—
EPSS
0.1%
Published
Jun 19, 2026
CISA due date
—
Cloudanix analysis
A flaw in the Linux kernel can let code already running on a server crash or destabilize the server by racing certain UDP networking and filter operations.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Use After Free
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Medium
What it actually does
This is a Linux kernel use-after-free in the socket reuseport/BPF path. A classic BPF program attached to a UDP SO_REUSEPORT group can be freed immediately while another CPU is still using it under an RCU read-side critical section in reuseport_select_sock(). The race occurs when one thread replaces or detaches the reuseport cBPF program via setsockopt() while another thread sends or receives UDP traffic for the same reuseport group. The observed failure is a KASAN vmalloc out-of-bounds read in kernel networking code; depending on kernel configuration and memory layout, the practical impact is likely local denial of service through kernel crash, with possible kernel memory corruption risk.
Why it matters to the business
Systems running affected Linux kernels may be vulnerable to local disruption by users, workloads, or containers that can create UDP sockets and attach or replace reuseport classic BPF programs. Successful exploitation can crash the host kernel or destabilize networking, causing service outages for applications on the same server. The vulnerability is not currently listed in CISA KEV, is not known to be used in ransomware campaigns, has low EPSS probability, and has no public exploit maturity indicated, but it affects a core operating-system component and should still be prioritized for kernel maintenance windows.
How an attack unfolds
An attacker first needs the ability to execute code on the Linux system, such as through a local shell, compromised application process, or permissive container workload. They create a UDP SO_REUSEPORT socket group and attach a classic BPF reuseport selector program. In one execution thread, they repeatedly replace or detach that cBPF program using setsockopt(); in another thread, they send UDP packets to exercise the reuseport selection fast path. Because the old cBPF program may be freed before all RCU readers finish, the networking receive path can dereference freed program memory in reuseport_select_sock(). The result is kernel memory-safety failure, commonly visible as a KASAN report, kernel oops, panic, or host networking instability. No remote-only exploitation path is indicated by the supplied information; exploitation is primarily local or from code already running on the host.
How to fix it
Apply the Linux kernel update from the relevant distribution or kernel vendor that includes the fix for deferring reuseport cBPF program freeing until after an RCU grace period. No exact fixed package versions were provided, so use vendor advisories, package changelogs, or kernel stable backport notes to identify the corrected build. After installing the kernel, reboot the host so the patched kernel is active. Where immediate patching is not possible, reduce exposure by preventing untrusted local code execution, tightening container privileges, using seccomp/AppArmor/SELinux policies to restrict risky socket setsockopt() usage where feasible, and limiting workloads that can create UDP SO_REUSEPORT groups with attached BPF filters. Disabling unprivileged eBPF may be beneficial for general BPF hardening but should not be treated as a complete mitigation for this classic socket-BPF reuseport issue.
How to confirm the fix worked
Confirm the running kernel, not only the installed package, is updated by checking uname -r and comparing it with the vendor-fixed kernel version or advisory. Review the kernel package changelog or source tree for the fix associated with deferring reuseport cBPF program freeing after an RCU grace period, commonly described as 'bpf: Free reuseport cBPF prog after RCU grace period.' Reboot verification is required because kernel updates do not protect the system until the new kernel is running. On test systems, a controlled reproducer that races SO_REUSEPORT cBPF replacement with UDP traffic should no longer produce KASAN, oops, or panic output. Also verify that crash logs no longer show reuseport_select_sock() use-after-free or vmalloc out-of-bounds reports.
Typical attack path
- Gain local code execution on a Linux host or inside a workload with sufficient socket access.
- Create multiple UDP sockets using SO_REUSEPORT.
- Attach a classic BPF reuseport program to the socket group.
- Race two operations: repeatedly replace or detach the reuseport cBPF program while concurrently sending UDP packets through the group.
- Trigger reuseport_select_sock() to access the freed cBPF program before the RCU grace period completes.
- Cause kernel memory corruption symptoms such as KASAN splats, kernel oops, panic, or networking instability.
How to detect it
Look for evidence in kernel and system logs rather than network perimeter indicators. Review journalctl -k, dmesg, /var/log/kern.log, /var/log/messages, crash dumps, and pstore/ramoops for KASAN reports, kernel oopses, panics, or stack traces referencing UDP reuseport selection and BPF program freeing. Pay particular attention to crashes where reuseport_select_sock(), udp4_lib_lookup2(), __udp4_lib_rcv(), sk_reuseport_prog_free(), bpf_release_orig_filter(), or bpf_prog_free() appear together. If auditd, eBPF telemetry, syscall tracing, or EDR telemetry is available, hunt for local processes repeatedly calling setsockopt() with SO_REUSEPORT and SO_ATTACH_REUSEPORT_CBPF/SO_DETACH_REUSEPORT_BPF while generating high-rate UDP sendto() traffic. Correlate suspicious activity with container IDs, service accounts, recently deployed workloads, or binaries that are not expected to manipulate reuseport BPF programs. There are no known threat actors, ransomware campaigns, or stable remote network signatures provided for this issue.
- BUG: KASAN: vmalloc-out-of-bounds in reuseport_select_sock
- reuseport_select_sock+
- net/core/sock_reuseport.c
- sk_reuseport_prog_free
- bpf_release_orig_filter
- bpf_prog_free
- udp4_lib_lookup2
- __udp4_lib_rcv
- SO_ATTACH_REUSEPORT_CBPF
- SO_DETACH_REUSEPORT_BPF
- SO_REUSEPORT
- KASAN: vmalloc-out-of-bounds
- kernel oops in reuseport_select_sock
- panic in reuseport_select_sock
What your security team should do
- Prioritize patching Linux kernels on multi-tenant, container-hosting, CI/CD, edge, and high-availability systems where untrusted or semi-trusted code can run locally.
- Identify hosts running affected kernel lines and schedule reboots after applying vendor-fixed kernel packages.
- Monitor kernel logs for KASAN, oops, panic, or stack traces involving reuseport_select_sock(), sk_reuseport_prog_free(), bpf_release_orig_filter(), or bpf_prog_free().
- Review container and sandbox policies to reduce access to advanced socket options and unnecessary BPF-related functionality for untrusted workloads.
- Treat unexpected kernel crashes involving UDP reuseport or BPF paths as potentially security-relevant, preserve crash dumps, and investigate recent local process activity.
- Do not rely on EPSS or non-KEV status alone to defer remediation on shared Linux hosts, because local kernel denial-of-service issues can have broad operational impact.
The record
In the Linux kernel, the following vulnerability has been resolved: bpf: Free reuseport cBPF prog after RCU grace period. Eulgyu Kim reported the splat below with a repro. [0] The repro sets up a UDP reuseport group with a cBPF prog and replaces it with a new one while another thread is sending a UDP packet to the group. The reuseport prog is freed by sk_reuseport_prog_free(). bpf_prog_put() is called for "e"BPF prog to destruct through multiple stages while cBPF prog is freed immediately by bpf_release_orig_filter() and bpf_prog_free(). If a reuseport prog is detached from the setsockopt() path (reuseport_attach_prog() or reuseport_detach_prog()), sk_reuseport_prog_free() is called without waiting for RCU readers to complete, resulting in various bugs. Let's defer freeing the reuseport cBPF prog after one RCU grace period. Note "e"BPF prog is safe as is unless the fast path starts to touch fields destroyed in bpf_prog_put_deferred() and __bpf_prog_put_noref(). [0]: BUG: KASAN: vmalloc-out-of-bounds in reuseport_select_sock+0xedc/0x1220 net/core/sock_reuseport.c:596 Read of size 4 at addr ffffc9000051e004 by task slowme/10208 CPU: 6 UID: 1000 PID: 10208 Comm: slowme Not tainted 7.0.0-geb7ac95ff75e #32 PREEMPT(full) Hardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014 Call Trace: <IRQ> dump_stack_lvl+0xe8/0x150 lib/dump_stack.c:120 print_address_description mm/kasan/report.c:378 [inline] print_report+0xca/0x240 mm/kasan/report.c:482 kasan_report+0x118/0x150 mm/kasan/report.c:595 reuseport_select_sock+0xedc/0x1220 net/core/sock_reuseport.c:596 udp4_lib_lookup2+0x3bc/0x950 net/ipv4/udp.c:495 __udp4_lib_lookup+0x768/0xe20 net/ipv4/udp.c:723 __udp4_lib_lookup_skb+0x297/0x390 net/ipv4/udp.c:752 __udp4_lib_rcv+0x1312/0x2620 net/ipv4/udp.c:2752 ip_protocol_deliver_rcu+0x282/0x440 net/ipv4/ip_input.c:207 ip_local_deliver_finish+0x3bb/0x6f0 net/ipv4/ip_input.c:241 NF_HOOK+0x30c/0x3a0 include/linux/netfilter.h:318 NF_HOOK+0x30c/0x3a0 include/linux/netfilter.h:318 __netif_receive_skb_one_core net/core/dev.c:6181 [inline] __netif_receive_skb net/core/dev.c:6294 [inline] process_backlog+0xaa4/0x1960 net/core/dev.c:6645 __napi_poll+0xae/0x340 net/core/dev.c:7709 napi_poll net/core/dev.c:7772 [inline] net_rx_action+0x5d7/0xf50 net/core/dev.c:7929 handle_softirqs+0x22b/0x870 kernel/softirq.c:622 do_softirq+0x76/0xd0 kernel/softirq.c:523 </IRQ> <TASK> __local_bh_enable_ip+0xf8/0x130 kernel/softirq.c:450 local_bh_enable include/linux/bottom_half.h:33 [inline] rcu_read_unlock_bh include/linux/rcupdate.h:924 [inline] __dev_queue_xmit+0x1dd7/0x3710 net/core/dev.c:4890 neigh_output include/net/neighbour.h:556 [inline] ip_finish_output2+0xca9/0x1070 net/ipv4/ip_output.c:237 NF_HOOK_COND include/linux/netfilter.h:307 [inline] ip_output+0x29f/0x450 net/ipv4/ip_output.c:438 ip_send_skb+0x45/0xc0 net/ipv4/ip_output.c:1508 udp_send_skb+0xb04/0x1510 net/ipv4/udp.c:1195 udp_sendmsg+0x1a71/0x2350 net/ipv4/udp.c:1485 sock_sendmsg_nosec net/socket.c:727 [inline] __sock_sendmsg net/socket.c:742 [inline] __sys_sendto+0x554/0x680 net/socket.c:2206 __do_sys_sendto net/socket.c:2213 [inline] __se_sys_sendto net/socket.c:2209 [inline] __x64_sys_sendto+0xde/0x100 net/socket.c:2209 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline] do_syscall_64+0x160/0xf80 arch/x86/entry/syscall_64.c:94 entry_SYSCALL_64_after_hwframe+0x77/0x7f RIP: 0033:0x415a2d Code: b3 66 2e 0f 1f 84 00 00 00 00 00 66 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007f6bc31e41e8 EFLAGS: 00000212 ORIG_RAX: 000000000000002c RAX: ffffffffffffffda RBX: 00007f6bc31e4cdc RCX: 0000000000415a2d RDX: 0000000000000001 RSI: 00007f6bc31e421f RDI: 0000000000000003 RBP: 00007f6bc31e4240 R08: 00007f6bc31e4220 R09: 0000000000000010 R10: 0000000000000000 R11: ---truncated---
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|