Cloudanix VulnDB

CVE-2026-53034

None

CVSS

—

EPSS

0.1%

Published

Jun 24, 2026

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A local user or workload with certain Linux kernel access could crash a vulnerable system by triggering a timing bug in how local sockets and BPF networking features interact.

Exploitation
Local Privilege
Attacker needs
Low Privilege
Complexity
Moderate
Impact
Denial Of Service
Component
OS kernel
Class
Denial of service
Remediation
Patch
Effort
Low
Patch risk
Low

What it actually does

This is a Linux kernel race condition in the AF_UNIX stream socket and BPF sockmap interaction. During unix_stream_connect(), the socket state can briefly be marked established before its peer pointer is assigned. If a concurrent BPF sockmap update processes that socket during this window, the kernel may dereference a NULL unix_peer pointer in unix_stream_bpf_update_proto(), causing a kernel NULL pointer dereference and system crash. The practical impact is denial of service through kernel oops/panic, not known remote code execution or privilege escalation based on the provided details.

Why it matters to the business

A successful exploit can crash affected Linux systems, interrupting applications, containers, network services, and workloads running on the host. Because this requires a narrow timing race and BPF/sockmap capabilities, exploitation is more likely from local users, containers, or workloads with sufficient BPF/network privileges than from the public internet. EPSS is low and the issue is not listed in CISA KEV, but kernel denial-of-service flaws can still be operationally significant on shared compute, container platforms, CI runners, and multi-tenant Linux hosts.

How an attack unfolds

An attacker first needs local code execution on an affected Linux host and the ability to exercise BPF sockmap updates, either through the bpf() syscall or through a BPF program type permitted to update sockmaps. The attacker creates AF_UNIX stream sockets and repeatedly races connect() operations against sockmap updates. In the vulnerable window, connect() has set sk_state to TCP_ESTABLISHED, causing sockmap validation to treat the socket as usable, but unix_peer(sk) is still NULL. The sockmap update path then reaches unix_stream_bpf_update_proto(), attempts to take a reference on the missing peer, and dereferences a NULL pointer. If the race is won, the kernel logs an oops similar to a NULL pointer dereference in unix_stream_bpf_update_proto and may panic or otherwise destabilize the system, producing a denial of service.

How to fix it

Apply the vendor-provided Linux kernel update that includes the fix for the AF_UNIX sockmap NULL peer check/race. Because no specific affected product list or fixed package versions were provided, use the fixed kernel packages from the relevant Linux distribution, appliance vendor, cloud image provider, or kernel branch maintainer. Reboot into the patched kernel after installation; installing the package alone is not sufficient if the host continues running the vulnerable kernel. As interim mitigations, restrict local access to trusted users, disable unprivileged BPF where operationally feasible, limit CAP_BPF/CAP_NET_ADMIN/CAP_SYS_ADMIN exposure in containers and services, apply seccomp/AppArmor/SELinux policies that block unnecessary bpf() syscall use, and avoid granting privileged containers broad kernel interaction permissions.

How to confirm the fix worked

Confirm the running kernel, not only the installed kernel package, is patched by checking uname -a and comparing it with the distribution advisory or fixed kernel build. Verify that systems have been rebooted into the updated kernel. Review kernel package changelogs or vendor advisories for references to the AF_UNIX sockmap, unix_stream_bpf_update_proto, sock_map_update_elem, or BPF sockmap NULL pointer fix. Where mitigation is used, confirm unprivileged BPF is disabled if applicable, for example by checking kernel.unprivileged_bpf_disabled, and audit containers/services for unnecessary CAP_BPF, CAP_NET_ADMIN, CAP_SYS_ADMIN, privileged mode, and broad seccomp exceptions. Exposure is greatest where untrusted local users or containers can invoke BPF sockmap update paths.

Typical attack path

  1. Obtain local execution on an affected Linux system, container host, or workload environment.
  2. Confirm BPF/sockmap functionality is reachable, such as access to the bpf() syscall and required capabilities or permissive unprivileged BPF settings.
  3. Create AF_UNIX stream sockets and BPF sockmaps suitable for sock_map_update_elem or equivalent BPF-driven updates.
  4. Repeatedly race unix stream connect() against sockmap update operations.
  5. Trigger the timing window where the socket state is established but the AF_UNIX peer pointer has not yet been assigned.
  6. Cause a NULL pointer dereference in unix_stream_bpf_update_proto, resulting in kernel oops, panic, or host instability.

How to detect it

Look for evidence of prior exploitation in kernel logs, persistent journal entries, crash dumps, and host monitoring records. Relevant sources include dmesg, journalctl -k, /var/log/kern.log, /var/log/messages, /var/log/syslog, kdump/vmcore records, kernel oops reports, crash monitoring, and EDR telemetry for bpf() syscall activity. Indicators include NULL pointer dereferences with RIP or call traces involving unix_stream_bpf_update_proto, sock_map_link, sock_map_update_common, sock_map_update_elem_sys, __sys_bpf, or __x64_sys_bpf. Correlate crashes with local processes making heavy bpf() syscall usage, creating AF_UNIX sockets, or running privileged/containerized workloads with BPF or network administration capabilities. Absence of these logs does not prove absence of exploitation, because a hard panic or reboot may truncate logs unless persistent journaling or crash dump collection is enabled.

  • BUG: kernel NULL pointer dereference, address: 0000000000000080
  • RIP: 0010:unix_stream_bpf_update_proto
  • unix_stream_bpf_update_proto+0xa0/0x1b0
  • Call Trace:
  • sock_map_link+0x564/0x8b0
  • sock_map_update_common+0x6e/0x340
  • sock_map_update_elem_sys+0x17d/0x240
  • __sys_bpf+0x26db/0x3250
  • __x64_sys_bpf+0x21/0x30
  • do_syscall_64+0x6b/0x3a0
  • entry_SYSCALL_64_after_hwframe
  • kernel NULL pointer dereference
  • unix_stream_bpf_update_proto
  • sock_map_update_elem_sys
  • sock_map_update_common
  • sock_map_link
  • __sys_bpf
  • __x64_sys_bpf

What your security team should do

  • Prioritize patching shared Linux hosts, container platforms, Kubernetes nodes, CI/build runners, developer workstations with untrusted code execution, and multi-user systems.
  • Reboot systems after kernel updates and verify the active kernel version is the fixed version from the vendor advisory.
  • Temporarily disable unprivileged BPF where feasible and monitor for any systems where it remains enabled.
  • Reduce container and service privileges by removing CAP_BPF, CAP_NET_ADMIN, CAP_SYS_ADMIN, privileged mode, and unnecessary bpf() syscall access unless explicitly required.
  • Add monitoring for kernel oops/panic messages referencing unix_stream_bpf_update_proto, sock_map_update_elem, sock_map_update_common, sock_map_link, or __sys_bpf.
  • Investigate unexplained host crashes or kernel panics occurring after local BPF activity, especially on systems running untrusted workloads.
  • Track distribution advisories because fixed versions vary by kernel branch and downstream vendor backporting policy.

The record

In the Linux kernel, the following vulnerability has been resolved: bpf, sockmap: Fix af_unix null-ptr-deref in proto update unix_stream_connect() sets sk_state (`WRITE_ONCE(sk->sk_state, TCP_ESTABLISHED)`) _before_ it assigns a peer (`unix_peer(sk) = newsk`). sk_state == TCP_ESTABLISHED makes sock_map_sk_state_allowed() believe that socket is properly set up, which would include having a defined peer. IOW, there's a window when unix_stream_bpf_update_proto() can be called on socket which still has unix_peer(sk) == NULL. CPU0 bpf CPU1 connect -------- ------------ WRITE_ONCE(sk->sk_state, TCP_ESTABLISHED) sock_map_sk_state_allowed(sk) ... sk_pair = unix_peer(sk) sock_hold(sk_pair) sock_hold(newsk) smp_mb__after_atomic() unix_peer(sk) = newsk BUG: kernel NULL pointer dereference, address: 0000000000000080 RIP: 0010:unix_stream_bpf_update_proto+0xa0/0x1b0 Call Trace: sock_map_link+0x564/0x8b0 sock_map_update_common+0x6e/0x340 sock_map_update_elem_sys+0x17d/0x240 __sys_bpf+0x26db/0x3250 __x64_sys_bpf+0x21/0x30 do_syscall_64+0x6b/0x3a0 entry_SYSCALL_64_after_hwframe+0x76/0x7e Initial idea was to move peer assignment _before_ the sk_state update[1], but that involved an additional memory barrier, and changing the hot path was rejected. Then a NULL check during proto update in unix_stream_bpf_update_proto() was considered[2], but the follow-up discussion[3] focused on the root cause, i.e. sockmap update taking a wrong lock. Or, more specifically, missing unix_state_lock()[4]. In the end it was concluded that teaching sockmap about the af_unix locking would be unnecessarily complex[5]. Complexity aside, since BPF_PROG_TYPE_SCHED_CLS and BPF_PROG_TYPE_SCHED_ACT are allowed to update sockmaps, sock_map_update_elem() taking the unix lock, as it is currently implemented in unix_state_lock(): spin_lock(&unix_sk(s)->lock), would be problematic. unix_state_lock() taken in a process context, followed by a softirq-context TC BPF program attempting to take the same spinlock -- deadlock[6]. This way we circled back to the peer check idea[2]. [1]: https://lore.kernel.org/netdev/ba5c50aa-1df4-40c2-ab33-a72022c5a32e@rbox.co/ [2]: https://lore.kernel.org/netdev/20240610174906.32921-1-kuniyu@amazon.com/ [3]: https://lore.kernel.org/netdev/7603c0e6-cd5b-452b-b710-73b64bd9de26@linux.dev/ [4]: https://lore.kernel.org/netdev/CAAVpQUA+8GL_j63CaKb8hbxoL21izD58yr1NvhOhU=j+35+3og@mail.gmail.com/ [5]: https://lore.kernel.org/bpf/CAAVpQUAHijOMext28Gi10dSLuMzGYh+jK61Ujn+fZ-wvcODR2A@mail.gmail.com/ [6]: https://lore.kernel.org/bpf/dd043c69-4d03-46fe-8325-8f97101435cf@linux.dev/ Summary of scenarios where af_unix/stream connect() may race a sockmap update: 1. connect() vs. bpf(BPF_MAP_UPDATE_ELEM), i.e. sock_map_update_elem_sys() Implemented NULL check is sufficient. Once assigned, socket peer won't be released until socket fd is released. And that's not an issue because sock_map_update_elem_sys() bumps fd refcnf. 2. connect() vs BPF program doing update Update restricted per verifier.c:may_update_sockmap() to BPF_PROG_TYPE_TRACING/BPF_TRACE_ITER BPF_PROG_TYPE_SOCK_OPS (bpf_sock_map_update() only) BPF_PROG_TYPE_SOCKET_FILTER BPF_PROG_TYPE_SCHED_CLS BPF_PROG_TYPE_SCHED_ACT BPF_PROG_TYPE_XDP BPF_PROG_TYPE_SK_REUSEPORT BPF_PROG_TYPE_FLOW_DISSECTOR BPF_PROG_TYPE_SK_LOOKUP Plus one more race to consider: CPU0 bpf CPU1 connect -------- ------------ WRITE_ONCE(sk->sk_state, TCP_ESTABLISHED) sock_map_sk_state_allowed(sk) sock_hold(newsk) smp_mb__after_atomic() ---truncated---

Affected packages

Ecosystem Package Introduced Fixed