Skip to content
OpenAdvisories
Unscored CVE-2023-53024 EUVD-2023-59696GHSA-mqh3-5x68-9v64

bpf: Fix pointer-leak due to insufficient speculative store bypass mitigation

Published Mar 27, 2025 · Updated Nov 5, 2026 · Assigned by Linux

Vendor: Linux Product: Linux Package: linux Package: linux Package: linux-allwinner-5.19 Package: linux-aws Package: linux-aws-5.0 Package: linux-aws-5.11 Package: linux-aws-5.13 Package: linux-aws-5.15 Package: linux-aws-5.19 Package: linux-aws-5.3 Package: linux-aws-5.4 Package: linux-aws-5.8 Package: linux-aws-6.2 Package: linux-aws-6.5 Package: linux-aws-fips Package: linux-azure Package: linux-azure-5.11 Package: linux-azure-5.13 Package: linux-azure-5.15 Package: linux-azure-5.19 Package: linux-azure-5.3 Package: linux-azure-5.4 Package: linux-azure-5.8 Package: linux-azure-6.2 Package: linux-azure-6.5 Package: linux-azure-edge Package: linux-azure-fde Package: linux-azure-fde-5.19 Package: linux-azure-fde-6.2 Package: linux-azure-fips Package: linux-bluefield Package: linux-fips Package: linux-gcp Package: linux-gcp-5.11 Package: linux-gcp-5.13 Package: linux-gcp-5.15 Package: linux-gcp-5.19 Package: linux-gcp-5.3 Package: linux-gcp-5.4 Package: linux-gcp-5.8 Package: linux-gcp-6.2 Package: linux-gcp-6.5 Package: linux-gcp-fips Package: linux-gke Package: linux-gke-4.15 Package: linux-gke-5.15 Package: linux-gke-5.4 Package: linux-gkeop Package: linux-gkeop-5.15 Package: linux-gkeop-5.4 Package: linux-hwe Package: linux-hwe-5.11 Package: linux-hwe-5.13 Package: linux-hwe-5.15 Package: linux-hwe-5.19 Package: linux-hwe-5.4 Package: linux-hwe-5.8 Package: linux-hwe-6.2 Package: linux-hwe-6.5 Package: linux-hwe-edge Package: linux-ibm Package: linux-ibm-5.4 Package: linux-intel-5.13 Package: linux-intel-iot-realtime Package: linux-intel-iotg Package: linux-intel-iotg-5.15 Package: linux-iot Package: linux-kvm Package: linux-lowlatency Package: linux-lowlatency-hwe-5.15 Package: linux-lowlatency-hwe-5.19 Package: linux-lowlatency-hwe-6.2 Package: linux-lowlatency-hwe-6.5 Package: linux-nvidia Package: linux-nvidia-6.2 Package: linux-nvidia-6.5 Package: linux-nvidia-tegra-5.15 Package: linux-oem Package: linux-oem-5.10 Package: linux-oem-5.13 Package: linux-oem-5.14 Package: linux-oem-5.17 Package: linux-oem-5.6 Package: linux-oem-6.0 Package: linux-oem-6.1 Package: linux-oem-6.5 Package: linux-oracle Package: linux-oracle-5.0 Package: linux-oracle-5.11 Package: linux-oracle-5.13 Package: linux-oracle-5.15 Package: linux-oracle-5.3 Package: linux-oracle-5.4 Package: linux-oracle-5.8 Package: linux-oracle-6.5 Package: linux-raspi Package: linux-raspi-5.4 Package: linux-raspi-realtime Package: linux-raspi2 Package: linux-realtime Package: linux-riscv Package: linux-riscv-5.11 Package: linux-riscv-5.15 Package: linux-riscv-5.19 Package: linux-riscv-5.8 Package: linux-riscv-6.5 Package: linux-starfive-5.19 Package: linux-starfive-6.2 Package: linux-starfive-6.5 Package: linux-vmware Package: linux-xilinx-zynqmp Platform: Linux Ecosystem: Debian Ecosystem: Ubuntu

Description

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

bpf: Fix pointer-leak due to insufficient speculative store bypass mitigation

To mitigate Spectre v4, 2039f26f3aca ("bpf: Fix leakage due to
insufficient speculative store bypass mitigation") inserts lfence
instructions after 1) initializing a stack slot and 2) spilling a
pointer to the stack.

However, this does not cover cases where a stack slot is first
initialized with a pointer (subject to sanitization) but then
overwritten with a scalar (not subject to sanitization because
the slot was already initialized). In this case, the second write
may be subject to speculative store bypass (SSB) creating a
speculative pointer-as-scalar type confusion. This allows the
program to subsequently leak the numerical pointer value using,
for example, a branch-based cache side channel.

To fix this, also sanitize scalars if they write a stack slot
that previously contained a pointer. Assuming that pointer-spills
are only generated by LLVM on register-pressure, the performance
impact on most real-world BPF programs should be small.

The following unprivileged BPF bytecode drafts a minimal exploit
and the mitigation:

[...]
// r6 = 0 or 1 (skalar, unknown user input)
// r7 = accessible ptr for side channel
// r10 = frame pointer (fp), to be leaked
//
r9 = r10 # fp alias to encourage ssb
*(u64 *)(r9 - 8) = r10 // fp[-8] = ptr, to be leaked
// lfence added here because of pointer spill to stack.
//
// Ommitted: Dummy bpf_ringbuf_output() here to train alias predictor
// for no r9-r10 dependency.
//
*(u64 *)(r10 - 8) = r6 // fp[-8] = scalar, overwrites ptr
// 2039f26f3aca: no lfence added because stack slot was not STACK_INVALID,
// store may be subject to SSB
//
// fix: also add an lfence when the slot contained a ptr
//
r8 = *(u64 *)(r9 - 8)
// r8 = architecturally a scalar, speculatively a ptr
//
// leak ptr using branch-based cache side channel:
r8 &= 1 // choose bit to leak
if r8 == 0 goto SLOW // no mispredict
// architecturally dead code if input r6 is 0,
// only executes speculatively iff ptr bit is 1
r8 = *(u64 *)(r7 + 0) # encode bit in cache (0: slow, 1: fast)
SLOW:
[...]

After running this, the program can time the access to *(r7 + 0) to
determine whether the chosen pointer bit was 0 or 1. Repeat this 64
times to recover the whole address on amd64.

In summary, sanitization can only be skipped if one scalar is
overwritten with another scalar. Scalar-confusion due to speculative
store bypass can not lead to invalid accesses because the pointer
bounds deducted during verification are enforced using branchless
logic. See 979d63d50c0c ("bpf: prevent out of bounds speculation on
pointer arithmetic") for details.

Do not make the mitigation depend on !env->allow_{uninit_stack,ptr_leaks}
because speculative leaks are likely unexpected if these were enabled.
For example, leaking the address to a protected log file may be acceptable
while disabling the mitigation might unintentionally leak the address
into the cached-state of a map that is accessible to unprivileged
processes.

Affected products

VendorProductAffectedFixed
Linux Linux 4.19.207 – < 4.19.272, 5.4.146 – < 5.4.231, 5.10.56 – < 5.10.166, 5.13.8 – < 5.14, 5.14 4.19.272

Fixed in Linux distributions

Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.

ReleasePackageFixed inAdvisory
Debian 14 linux 6.1.11-1 —
Debian 13 linux 6.1.11-1 —
Debian 12 linux 6.1.11-1 —
ReleasePackageFixed inAdvisory
Ubuntu Nvidia-BlueField 22.04 LTS linux-bluefield 5.15.0-1015.17 —
Ubuntu 24.04 LTS linux-realtime +1 No fix yet —
Ubuntu 22.04 LTS linux +1 5.15.0-70.77 —
Ubuntu 22.04 LTS linux-aws 5.15.0-1034.38 —
Ubuntu 22.04 LTS linux-azure 5.15.0-1036.43 —
Ubuntu 22.04 LTS linux-azure-fde 5.15.0-1036.43.1 —
Ubuntu 22.04 LTS linux-gcp 5.15.0-1032.40 —
Ubuntu 22.04 LTS linux-gke +1 5.15.0-1031.36 —
Ubuntu 22.04 LTS linux-gkeop 5.15.0-1018.23 —
Ubuntu 22.04 LTS linux-ibm 5.15.0-1028.31 —
Ubuntu 22.04 LTS linux-intel-iotg 5.15.0-1028.33 —
Ubuntu 22.04 LTS linux-nvidia 5.15.0-1023.23 —
Ubuntu 22.04 LTS linux-oracle 5.15.0-1033.39 —
Ubuntu 22.04 LTS linux-raspi 5.15.0-1027.29 —
Ubuntu 22.04 LTS linux-riscv +31 No fix yet —
Ubuntu 20.04 LTS linux 5.4.0-147.164 —
Ubuntu 20.04 LTS linux-aws 5.4.0-1100.108 —
Ubuntu 20.04 LTS linux-aws-5.15 5.15.0-1034.38~20.04.1 —
Ubuntu 20.04 LTS linux-azure 5.4.0-1106.112 —
Ubuntu 20.04 LTS linux-azure-5.15 5.15.0-1036.43~20.04.1 —
Ubuntu 20.04 LTS linux-bluefield 5.4.0-1062.68 —
Ubuntu 20.04 LTS linux-gcp 5.4.0-1103.112 —
Ubuntu 20.04 LTS linux-gcp-5.15 5.15.0-1032.40~20.04.1 —
Ubuntu 20.04 LTS linux-gke +28 No fix yet —
Ubuntu 20.04 LTS linux-hwe-5.15 +1 5.15.0-70.77~20.04.1 —
Ubuntu 20.04 LTS linux-ibm 5.4.0-1047.52 —
Ubuntu 20.04 LTS linux-intel-iotg-5.15 5.15.0-1030.35~20.04.1 —
Ubuntu 20.04 LTS linux-iot 5.4.0-1017.18 —
Ubuntu 20.04 LTS linux-kvm 5.4.0-1089.95 —
Ubuntu 20.04 LTS linux-nvidia-tegra-5.15 5.15.0-1014.14~20.04.1 —
Ubuntu 20.04 LTS linux-oracle 5.4.0-1099.108 —
Ubuntu 20.04 LTS linux-oracle-5.15 5.15.0-1033.39~20.04.1 —
Ubuntu 20.04 LTS linux-raspi 5.4.0-1083.94 —
Ubuntu 20.04 LTS linux-riscv-5.15 5.15.0-1031.35~20.04.1 —
Ubuntu 20.04 LTS linux-xilinx-zynqmp 5.4.0-1024.28 —
Ubuntu 18.04 LTS linux-aws-5.4 5.4.0-1100.108~18.04.1 —
Ubuntu 18.04 LTS linux-azure-5.4 5.4.0-1106.112~18.04.1 —
Ubuntu 18.04 LTS linux-gcp +14 No fix yet —
Ubuntu 18.04 LTS linux-gcp-5.4 5.4.0-1103.112~18.04.1 —
Ubuntu 18.04 LTS linux-hwe-5.4 5.4.0-147.164~18.04.1 —
Ubuntu 18.04 LTS linux-ibm-5.4 5.4.0-1047.52~18.04.1 —
Ubuntu 18.04 LTS linux-oracle-5.4 5.4.0-1099.108~18.04.1 —
Ubuntu 18.04 LTS linux-raspi-5.4 5.4.0-1083.94~18.04.1 —
Show 3 more (older releases, extended support, other products)
ReleasePackageFixed inAdvisory
Ubuntu 16.04 LTS linux-hwe-edge No fix yet —
Ubuntu Pro Realtime 22.04 LTS linux-intel-iot-realtime 5.15.0-1024.29 —
Ubuntu Pro Realtime 22.04 LTS linux-realtime 5.15.0-1036.39 —
Ubuntu Pro FIPS-updates 20.04 LTS linux-aws-fips 5.4.0-1100.108+fips1 —
Ubuntu Pro FIPS-updates 20.04 LTS linux-azure-fips 5.4.0-1106.112+fips1 —
Ubuntu Pro FIPS-updates 20.04 LTS linux-fips 5.4.0-1075.84 —
Ubuntu Pro FIPS-updates 20.04 LTS linux-gcp-fips 5.4.0-1103.112+fips1 —
ReleasePackageFixed inAdvisory
RHEL 9 bpftool 7.2.0-362.8.1.el9_3 RHSA-2023:6583
RHEL 9 rv +64 5.14.0-362.8.1.el9_3 RHSA-2023:6583
ReleasePackageFixed inAdvisory
SLES 15 SP5 kernel-64kb +6 5.14.21-150500.55.100.1 SUSE-SU-2025:1241-1
SLES 15 SP5 kernel-default-base 5.14.21-150500.55.100.1.150500.6.47.1 SUSE-SU-2025:1241-1
SLES 15 SP4 kernel-64kb +6 5.14.21-150400.24.161.1 SUSE-SU-2025:1195-1
SLES 15 SP4 kernel-default-base 5.14.21-150400.24.161.1.150400.24.80.1 SUSE-SU-2025:1195-1
SLES 15 SP3 kernel-64kb +7 5.3.18-150300.59.201.1 SUSE-SU-2025:1263-1
SLES 15 SP3 kernel-default-base 5.3.18-150300.59.201.1.150300.18.120.1 SUSE-SU-2025:1263-1
SLES 12 SP5 kernel-syms +2 4.12.14-122.255.1 SUSE-SU-2025:1293-1
Show 18 more (older releases, extended support, other products)
ReleasePackageFixed inAdvisory
SLES for SAP 15 SP5 kernel-default-base 5.14.21-150500.55.100.1.150500.6.47.1 SUSE-SU-2025:1241-1
SLES for SAP 15 SP5 kernel-docs +4 5.14.21-150500.55.100.1 SUSE-SU-2025:1241-1
SLES for SAP 15 SP4 kernel-default-base 5.14.21-150400.24.161.1.150400.24.80.1 SUSE-SU-2025:1195-1
SLES for SAP 15 SP4 kernel-docs +4 5.14.21-150400.24.161.1 SUSE-SU-2025:1195-1
SLES for SAP 15 SP3 kernel-default-base 5.3.18-150300.59.201.1.150300.18.120.1 SUSE-SU-2025:1263-1
SLES for SAP 15 SP3 kernel-docs +5 5.3.18-150300.59.201.1 SUSE-SU-2025:1263-1
SLE Micro 5.5 kernel-default-base 5.14.21-150500.55.100.1.150500.6.47.1 SUSE-SU-2025:1241-1
SLE Micro 5.5 kernel-rt +1 5.14.21-150500.13.91.1 SUSE-SU-2025:1176-1
SLE Micro 5.5 kernel-source +1 5.14.21-150500.55.100.1 SUSE-SU-2025:1241-1
SLE Micro 5.4 kernel-default 5.14.21-150400.24.161.1 SUSE-SU-2025:1195-1
SLE Micro 5.4 kernel-default-base 5.14.21-150400.24.161.1.150400.24.80.1 SUSE-SU-2025:1195-1
SLE Micro 5.4 kernel-rt +1 5.14.21-150400.15.115.1 SUSE-SU-2025:1183-1
SLE Micro 5.3 kernel-default 5.14.21-150400.24.161.1 SUSE-SU-2025:1195-1
SLE Micro 5.3 kernel-default-base 5.14.21-150400.24.161.1.150400.24.80.1 SUSE-SU-2025:1195-1
SLE Micro 5.3 kernel-rt +1 5.14.21-150400.15.115.1 SUSE-SU-2025:1183-1
SLE Micro 5.2 kernel-default 5.3.18-150300.59.201.1 SUSE-SU-2025:1263-1
SLE Micro 5.2 kernel-default-base 5.3.18-150300.59.201.1.150300.18.120.1 SUSE-SU-2025:1263-1
SLE Micro 5.2 kernel-rt +1 5.3.18-150300.205.1 SUSE-SU-2025:1194-1
SLE Micro 5.1 kernel-default 5.3.18-150300.59.201.1 SUSE-SU-2025:1263-1
SLE Micro 5.1 kernel-default-base 5.3.18-150300.59.201.1.150300.18.120.1 SUSE-SU-2025:1263-1
SLE Micro 5.1 kernel-rt +1 5.3.18-150300.205.1 SUSE-SU-2025:1194-1
SLE Live Patching 15 SP5 kernel-default 5.14.21-150500.55.100.1 SUSE-SU-2025:1241-1
SLE Live Patching 15 SP5 kernel-livepatch-SLE15-SP5_Update_25 1-150500.11.3.1 SUSE-SU-2025:1241-1
SLE Live Patching 15 SP4 kernel-default 5.14.21-150400.24.161.1 SUSE-SU-2025:1195-1
SLE Live Patching 15 SP4 kernel-livepatch-SLE15-SP4_Update_39 1-150400.9.3.1 SUSE-SU-2025:1195-1
SLE Live Patching 15 SP3 kernel-default 5.3.18-150300.59.201.1 SUSE-SU-2025:1263-1
SLE Live Patching 15 SP3 kernel-livepatch-SLE15-SP3_Update_56 1-150300.7.3.1 SUSE-SU-2025:1263-1
SLE Live Patching 12 SP5 kernel-default 4.12.14-122.255.1 SUSE-SU-2025:1293-1
SLE Live Patching 12 SP5 kgraft-patch-SLE12-SP5_Update_67 1-8.5.1 SUSE-SU-2025:1293-1
SLE HPC 15 SP5 kernel-64kb +5 5.14.21-150500.55.100.1 SUSE-SU-2025:1241-1
SLE HPC 15 SP5 kernel-default-base 5.14.21-150500.55.100.1.150500.6.47.1 SUSE-SU-2025:1241-1
SLE HPC 15 SP4 kernel-64kb +5 5.14.21-150400.24.161.1 SUSE-SU-2025:1195-1
SLE HPC 15 SP4 kernel-default-base 5.14.21-150400.24.161.1.150400.24.80.1 SUSE-SU-2025:1195-1
SLE HPC 15 SP3 kernel-64kb +6 5.3.18-150300.59.201.1 SUSE-SU-2025:1263-1
SLE HPC 15 SP3 kernel-default-base 5.3.18-150300.59.201.1.150300.18.120.1 SUSE-SU-2025:1263-1
SUSE Manager Server 4.3 kernel-default-base 5.14.21-150400.24.161.1.150400.24.80.1 SUSE-SU-2025:1195-1
SUSE Manager Server 4.3 kernel-syms +3 5.14.21-150400.24.161.1 SUSE-SU-2025:1195-1
SUSE Manager Proxy 4.3 kernel-default-base 5.14.21-150400.24.161.1.150400.24.80.1 SUSE-SU-2025:1195-1
SUSE Manager Proxy 4.3 kernel-syms +2 5.14.21-150400.24.161.1 SUSE-SU-2025:1195-1
SUSE Enterprise Storage 7.1 kernel-64kb +6 5.3.18-150300.59.201.1 SUSE-SU-2025:1263-1
SUSE Enterprise Storage 7.1 kernel-default-base 5.3.18-150300.59.201.1.150300.18.120.1 SUSE-SU-2025:1263-1

Advisories 9

References