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/[email protected]/ [2]: https://lore.kernel.org/netdev/[email protected]/ [3]: https://lore.kernel.org/netdev/[email protected]/ [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/[email protected]/
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---
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Amazon_linux_2023 | — | Upgrade python3-perf6.18Upgrade bpftool6.18-debuginfoUpgrade kernel6.18-tools-develUpgrade kernel6.18-debuginfoUpgrade kernel6.18-headersUpgrade kernel6.18-develUpgrade python3-perf6.18-debuginfoUpgrade kernel6.18-tools-debuginfoUpgrade kernel-livepatch-6.18.33-63.124Upgrade kernel6.18-debuginfo-common-x86_64Upgrade kernel6.18-modules-extra-commonUpgrade kernel6.18Upgrade kernel6.18-debuginfo-common-aarch64Upgrade kernel6.18-modules-extraUpgrade perf6.18Upgrade bpftool6.18Upgrade perf6.18-debuginfoUpgrade kernel6.18-tools | Jul 8, 2026 | Jun 24, 2026 |
| Debian | — | Upgrade linux-6.1Upgrade linux | Jul 5, 2026 | Jul 5, 2026 |
| Redhat_linux | — | No solution exists | Jul 17, 2026 | Jun 24, 2026 |
| Ubuntu | — | Upgrade linux-image-7.0.0-1011-gcp-64kUpgrade linux-image-6.8.0-1059-nvidia-lowlatency-64kUpgrade linux-image-6.8.0-1030-nvidia-tegra-rtUpgrade linux-image-azure-fipsUpgrade linux-image-gcp-64k-7.0Upgrade linux-image-oem-22.04bUpgrade linux-image-aws-lts-24.04Upgrade linux-image-azure-7.0Upgrade linux-image-6.8.1-1056-realtimeUpgrade linux-image-7.0.0-1015-raspi-realtimeUpgrade linux-image-6.8.0-1064-gcp-fipsUpgrade linux-image-aws-fips-6.8Upgrade linux-image-oem-24.04bUpgrade linux-image-7.0.0-28-genericUpgrade linux-image-7.0.0-1009-azure-fdeUpgrade linux-image-oracle-64k-lts-24.04Upgrade linux-image-realtimeUpgrade linux-image-realtime-64kUpgrade linux-image-raspi-7.0Upgrade linux-image-fips-6.8Upgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-nvidia-bos-64k-7.0Upgrade linux-image-gcp-7.0Upgrade linux-image-generic-64k-6.8Upgrade linux-image-7.0.0-28-realtimeUpgrade linux-image-aws-fipsUpgrade linux-image-7.0.0-1016-nvidiaUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-6.8.0-1030-nvidia-tegraUpgrade linux-image-6.8.0-1033-xilinxUpgrade linux-image-7.0.0-1011-oracleUpgrade linux-image-gcp-64k-6.8Upgrade linux-image-lowlatency-64k-6.8Upgrade linux-image-generic-hwe-22.04Upgrade linux-image-gcp-lts-24.04Upgrade linux-image-ibm-6.8Upgrade linux-image-nvidia-7.0Upgrade linux-image-7.0.0-1008-gcpUpgrade linux-image-generic-6.8Upgrade linux-image-nvidia-lowlatency-64k-6.8Upgrade linux-image-6.8.0-1061-aws-fipsUpgrade linux-image-laptop-23.10Upgrade linux-image-nvidia-bosUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-nvidia-tegra-rt-6.8Upgrade linux-image-6.8.0-136-lowlatencyUpgrade linux-image-7.0.0-1014-azureUpgrade linux-image-azure-fde-lts-24.04Upgrade linux-image-7.0.0-1008-oracleUpgrade linux-image-6.8.0-1062-azure-fdeUpgrade linux-image-oem-24.04cUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-oracle-6.8Upgrade linux-image-realtime-64k-7.0Upgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-generic-hwe-26.04Upgrade linux-image-nvidia-tegra-rtUpgrade linux-image-gke-7.0Upgrade linux-image-oem-22.04dUpgrade linux-image-6.8.0-2050-raspi-realtimeUpgrade linux-image-aws-64k-6.8Upgrade linux-image-7.0.0-28-realtime-64kUpgrade linux-image-6.8.0-1061-awsUpgrade linux-image-6.8.0-1061-aws-64kUpgrade linux-image-7.0.0-1015-raspiUpgrade linux-image-oracleUpgrade linux-image-generic-64k-hwe-22.04Upgrade linux-image-nvidia-64k-6.8Upgrade linux-image-nvidia-lowlatencyUpgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-virtual-7.0Upgrade linux-image-gcp-6.8Upgrade linux-image-generic-7.0Upgrade linux-image-azure-fdeUpgrade linux-image-gke-hwe-26.04Upgrade linux-image-7.0.0-1008-oracle-64kUpgrade linux-image-awsUpgrade linux-image-aws-64k-lts-24.04Upgrade linux-image-kvmUpgrade linux-image-6.8.0-1059-nvidiaUpgrade linux-image-6.8.0-1059-nvidia-lowlatencyUpgrade linux-image-gke-64k-hwe-26.04Upgrade linux-image-6.8.0-1064-gcp-64kUpgrade linux-image-7.0.0-1003-gke-64kUpgrade linux-image-6.8.0-136-generic-64kUpgrade linux-image-lowlatency-6.8Upgrade linux-image-virtualUpgrade linux-image-gke-64kUpgrade linux-image-oem-20.04dUpgrade linux-image-azure-6.8Upgrade linux-image-oracle-64k-7.0Upgrade linux-image-nvidia-64kUpgrade linux-image-nvidia-tegra-6.8Upgrade linux-image-nvidia-64k-hwe-26.04Upgrade linux-image-lowlatency-64kUpgrade linux-image-genericUpgrade linux-image-ibm-classicUpgrade linux-image-gcp-64k-lts-24.04Upgrade linux-image-azure-fde-6.8Upgrade linux-image-7.0.0-1009-awsUpgrade linux-image-xilinx-zynqmpUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-xilinx-6.8Upgrade linux-image-virtual-hwe-26.04Upgrade linux-image-oem-7.0Upgrade linux-image-oem-22.04cUpgrade linux-image-nvidia-tegraUpgrade linux-image-generic-lpaeUpgrade linux-image-gcp-64kUpgrade linux-image-azureUpgrade linux-image-7.0.0-2016-nvidia-bos-64kUpgrade linux-image-7.0.0-1009-aws-64kUpgrade linux-image-realtime-hwe-22.04Upgrade linux-image-realtime-7.0Upgrade linux-image-nvidia-6.8Upgrade linux-image-ibm-7.0Upgrade linux-image-generic-64k-7.0Upgrade linux-image-oracle-64kUpgrade linux-image-oem-24.04dUpgrade linux-image-nvidia-bos-7.0Upgrade linux-image-nvidia-bos-64kUpgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-nvidiaUpgrade linux-image-lowlatencyUpgrade linux-image-aws-64kUpgrade linux-image-7.0.0-1010-ibmUpgrade linux-image-6.8.0-1058-oracle-64kUpgrade linux-image-oracle-lts-24.04Upgrade linux-image-gcpUpgrade linux-image-aws-64k-7.0Upgrade linux-image-6.8.0-1046-gkeopUpgrade linux-image-fipsUpgrade linux-image-6.8.0-1061-raspiUpgrade linux-image-azure-fde-7.0Upgrade linux-image-7.0.0-1008-gcp-64kUpgrade linux-image-raspi-realtime-7.0Upgrade linux-image-generic-64k-hwe-26.04Upgrade linux-image-realtime-6.8.1Upgrade linux-image-6.8.0-1059-nvidia-64kUpgrade linux-image-oem-24.04Upgrade linux-image-oem-22.04Upgrade linux-image-nvidia-lowlatency-6.8Upgrade linux-image-6.8.0-1061-ibmUpgrade linux-image-gke-64k-7.0Upgrade linux-image-gcp-fipsUpgrade linux-image-aws-7.0Upgrade linux-image-aws-6.8Upgrade linux-image-7.0.0-1011-oracle-64kUpgrade linux-image-7.0.0-1011-gcpUpgrade linux-image-7.0.0-1009-oemUpgrade linux-image-oem-26.04aUpgrade linux-image-oem-26.04Upgrade linux-image-oem-24.04aUpgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-intel-iotgUpgrade linux-image-intel-iot-realtimeUpgrade linux-image-azure-fips-6.8Upgrade linux-image-6.8.0-136-genericUpgrade linux-image-gkeUpgrade linux-image-nvidia-64k-7.0Upgrade linux-image-7.0.0-1016-nvidia-64kUpgrade linux-image-7.0.0-1010-azureUpgrade linux-image-7.0.0-1003-gkeUpgrade linux-image-xilinxUpgrade linux-image-virtual-hwe-22.04Upgrade linux-image-oracle-64k-6.8Upgrade linux-image-gkeopUpgrade linux-image-virtual-6.8Upgrade linux-image-ibmUpgrade linux-image-6.8.0-1064-gcpUpgrade linux-image-raspi-realtimeUpgrade linux-image-nvidia-hwe-26.04Upgrade linux-image-oem-20.04Upgrade linux-image-6.8.0-136-fipsUpgrade linux-image-gcp-fips-6.8Upgrade linux-image-7.0.0-2016-nvidia-bosUpgrade linux-image-6.8.0-136-lowlatency-64kUpgrade linux-image-oem-20.04cUpgrade linux-image-generic-64kUpgrade linux-image-7.0.0-28-generic-64kUpgrade linux-image-6.8.0-1063-azure-fipsUpgrade linux-image-6.8.0-1059-gke-64kUpgrade linux-image-realtime-64k-hwe-26.04Upgrade linux-image-oem-22.04aUpgrade linux-image-gkeop-6.8Upgrade linux-image-6.8.0-1058-oracleUpgrade linux-image-realtime-hwe-26.04Upgrade linux-image-raspi-realtime-6.8Upgrade linux-image-raspi-6.8Upgrade linux-image-oem-20.04bUpgrade linux-image-gke-64k-6.8Upgrade linux-image-gke-6.8Upgrade linux-image-azure-lts-24.04Upgrade linux-image-6.8.0-1059-gkeUpgrade linux-image-6.8.0-1063-azureUpgrade linux-image-raspiUpgrade linux-image-oracle-7.0 | Jul 20, 2026 | Jun 24, 2026 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Jul 6, 2026 | Jun 24, 2026 |
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub