Skip to content
OpenAdvisories
Unscored CVE-2023-52452 EUVD-2023-57077GHSA-445q-cj49-wrrx

bpf: Fix accesses to uninit stack slots

Published Feb 22, 2024 · Updated Oct 30, 2026 · Assigned by Linux

Vendor: Linux Product: Linux Package: kernel 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.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.8 Package: linux-azure-6.2 Package: linux-azure-6.5 Package: linux-azure-edge Package: linux-azure-fde Package: linux-azure-fde-5.15 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.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.8 Package: linux-hwe-6.2 Package: linux-hwe-6.5 Package: linux-hwe-edge Package: linux-ibm Package: linux-ibm-5.15 Package: linux-intel-5.13 Package: linux-intel-iot-realtime Package: linux-intel-iotg Package: linux-intel-iotg-5.15 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 Package: linux-nvidia-tegra-5.15 Package: linux-nvidia-tegra-igx 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.8 Package: linux-oracle-6.5 Package: linux-raspi 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: Azure Linux Ecosystem: Debian Ecosystem: Ubuntu

Description

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

bpf: Fix accesses to uninit stack slots

Privileged programs are supposed to be able to read uninitialized stack
memory (ever since 6715df8d5) but, before this patch, these accesses
were permitted inconsistently. In particular, accesses were permitted
above state->allocated_stack, but not below it. In other words, if the
stack was already "large enough", the access was permitted, but
otherwise the access was rejected instead of being allowed to "grow the
stack". This undesired rejection was happening in two places:
- in check_stack_slot_within_bounds()
- in check_stack_range_initialized()
This patch arranges for these accesses to be permitted. A bunch of tests
that were relying on the old rejection had to change; all of them were
changed to add also run unprivileged, in which case the old behavior
persists. One tests couldn't be updated - global_func16 - because it
can't run unprivileged for other reasons.

This patch also fixes the tracking of the stack size for variable-offset
reads. This second fix is bundled in the same commit as the first one
because they're inter-related. Before this patch, writes to the stack
using registers containing a variable offset (as opposed to registers
with fixed, known values) were not properly contributing to the
function's needed stack size. As a result, it was possible for a program
to verify, but then to attempt to read out-of-bounds data at runtime
because a too small stack had been allocated for it.

Each function tracks the size of the stack it needs in
bpf_subprog_info.stack_depth, which is maintained by
update_stack_depth(). For regular memory accesses, check_mem_access()
was calling update_state_depth() but it was passing in only the fixed
part of the offset register, ignoring the variable offset. This was
incorrect; the minimum possible value of that register should be used
instead.

This tracking is now fixed by centralizing the tracking of stack size in
grow_stack_state(), and by lifting the calls to grow_stack_state() to
check_stack_access_within_bounds() as suggested by Andrii. The code is
now simpler and more convincingly tracks the correct maximum stack size.
check_stack_range_initialized() can now rely on enough stack having been
allocated for the access; this helps with the fix for the first issue.

A few tests were changed to also check the stack depth computation. The
one that fails without this patch is verifier_var_off:stack_write_priv_vs_unpriv.

Affected products

VendorProductAffectedFixed
Linux Linux 5.10.33 – < 5.11, 5.11.17 – < 5.12, 5.12 5.11

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.6.15-1 —
Debian 13 linux 6.6.15-1 —
Debian 12 linux No fix yet —
ReleasePackageFixed inAdvisory
Ubuntu Nvidia-BlueField 22.04 LTS linux-bluefield No fix yet —
Ubuntu 22.04 LTS linux +40 No fix yet —
Ubuntu 22.04 LTS linux-azure-6.5 6.5.0-1022.23~22.04.1 USN-6819-1
Ubuntu 22.04 LTS linux-gcp-6.5 6.5.0-1022.24~22.04.1 USN-6818-1
Ubuntu 22.04 LTS linux-hwe-6.5 6.5.0-41.41~22.04.2 USN-6818-4
Ubuntu 22.04 LTS linux-lowlatency-hwe-6.5 6.5.0-41.41.1~22.04.1 USN-6818-1
Ubuntu 22.04 LTS linux-nvidia-6.5 6.5.0-1021.22 USN-6818-3
Ubuntu 22.04 LTS linux-oem-6.5 6.5.0-1024.25 USN-6819-3
Ubuntu 22.04 LTS linux-oracle-6.5 6.5.0-1024.24~22.04.1 USN-6819-4
Ubuntu 22.04 LTS linux-riscv-6.5 6.5.0-40.40.1~22.04.1 —
Ubuntu 22.04 LTS linux-starfive-6.5 6.5.0-1015.16~22.04.1 USN-6819-1
Ubuntu 20.04 LTS linux-gke +27 No fix yet —
Ubuntu 18.04 LTS linux-gcp +13 No fix yet —
Ubuntu 16.04 LTS linux-hwe-edge No fix yet —
Show 5 more (older releases, extended support, other products)
ReleasePackageFixed inAdvisory
Ubuntu Pro Realtime 24.04 LTS linux-raspi-realtime 6.8.0-2001.1 —
Ubuntu Pro Realtime 22.04 LTS linux-realtime +1 No fix yet —
Ubuntu Pro FIPS-updates 22.04 LTS linux-fips +3 No fix yet —
Ubuntu Pro FIPS-preview 22.04 LTS linux-fips +3 No fix yet —
Ubuntu Pro 20.04 LTS linux-aws-5.15 +10 No fix yet —
ReleasePackageFixed inAdvisory
SLES 15 SP5 kernel-64kb +6 5.14.21-150500.55.52.1 SUSE-SU-2024:0858-1
SLES 15 SP5 kernel-azure +2 5.14.21-150500.33.37.1 SUSE-SU-2024:0855-1
SLES 15 SP5 kernel-default-base 5.14.21-150500.55.52.1.150500.6.23.1 SUSE-SU-2024:0858-1
SLES 15 SP4 kernel-64kb +3 5.14.21-150400.24.111.2 SUSE-SU-2024:0900-1
SLES 15 SP4 kernel-default-base 5.14.21-150400.24.111.2.150400.24.52.1 SUSE-SU-2024:0900-1
SLES 15 SP4 kernel-syms +2 5.14.21-150400.24.111.1 SUSE-SU-2024:0900-1
Show 10 more (older releases, extended support, other products)
ReleasePackageFixed inAdvisory
SLES for SAP 15 SP4 kernel-default-base 5.14.21-150400.24.111.2.150400.24.52.1 SUSE-SU-2024:0900-1
SLES for SAP 15 SP4 kernel-docs +1 5.14.21-150400.24.111.2 SUSE-SU-2024:0900-1
SLES for SAP 15 SP4 kernel-syms +2 5.14.21-150400.24.111.1 SUSE-SU-2024:0900-1
SLE Micro 5.5 kernel-default 5.14.21-150500.55.52.1 SUSE-SU-2024:0858-1
SLE Micro 5.5 kernel-default-base 5.14.21-150500.55.52.1.150500.6.23.1 SUSE-SU-2024:0858-1
SLE Micro 5.5 kernel-rt +1 5.14.21-150500.13.38.1 SUSE-SU-2024:0910-1
SLE Micro 5.4 kernel-default 5.14.21-150400.24.111.2 SUSE-SU-2024:0900-1
SLE Micro 5.4 kernel-default-base 5.14.21-150400.24.111.2.150400.24.52.1 SUSE-SU-2024:0900-1
SLE Micro 5.4 kernel-rt +1 5.14.21-150400.15.71.1 SUSE-SU-2024:0977-1
SLE Micro 5.3 kernel-default 5.14.21-150400.24.111.2 SUSE-SU-2024:0900-1
SLE Micro 5.3 kernel-default-base 5.14.21-150400.24.111.2.150400.24.52.1 SUSE-SU-2024:0900-1
SLE Micro 5.3 kernel-rt +1 5.14.21-150400.15.71.1 SUSE-SU-2024:0977-1
SLE Live Patching 15 SP5 kernel-default 5.14.21-150500.55.52.1 SUSE-SU-2024:0858-1
SLE Live Patching 15 SP5 kernel-livepatch-SLE15-SP5_Update_11 +1 1-150500.11.3.1 SUSE-SU-2024:0910-1, SUSE-SU-2024:0858-1
SLE Live Patching 15 SP4 kernel-default 5.14.21-150400.24.111.2 SUSE-SU-2024:0900-1
SLE Live Patching 15 SP4 kernel-livepatch-SLE15-SP4-RT_Update_19 1-150400.1.3.1 SUSE-SU-2024:0977-1
SLE Live Patching 15 SP4 kernel-livepatch-SLE15-SP4_Update_24 1-150400.9.3.1 SUSE-SU-2024:0900-1
SLE HPC 15 SP4 kernel-64kb +2 5.14.21-150400.24.111.2 SUSE-SU-2024:0900-1
SLE HPC 15 SP4 kernel-default-base 5.14.21-150400.24.111.2.150400.24.52.1 SUSE-SU-2024:0900-1
SLE HPC 15 SP4 kernel-syms +2 5.14.21-150400.24.111.1 SUSE-SU-2024:0900-1
SUSE Real Time Module 15 SP5 kernel-rt +3 5.14.21-150500.13.38.1 SUSE-SU-2024:0910-1
SUSE Manager Server 4.3 kernel-default +1 5.14.21-150400.24.111.2 SUSE-SU-2024:0900-2, SUSE-SU-2024:0900-1
SUSE Manager Server 4.3 kernel-default-base 5.14.21-150400.24.111.2.150400.24.52.1 SUSE-SU-2024:0900-2, SUSE-SU-2024:0900-1
SUSE Manager Server 4.3 kernel-syms +1 5.14.21-150400.24.111.1 SUSE-SU-2024:0900-2, SUSE-SU-2024:0900-1
SUSE Manager Proxy 4.3 kernel-default 5.14.21-150400.24.111.2 SUSE-SU-2024:0900-2, SUSE-SU-2024:0900-1
SUSE Manager Proxy 4.3 kernel-default-base 5.14.21-150400.24.111.2.150400.24.52.1 SUSE-SU-2024:0900-2, SUSE-SU-2024:0900-1
SUSE Manager Proxy 4.3 kernel-syms +1 5.14.21-150400.24.111.1 SUSE-SU-2024:0900-2, SUSE-SU-2024:0900-1
ReleasePackageFixed inAdvisory
openSUSE Leap 15.5 dtb-aarch64 +10 5.14.21-150500.55.52.1 SUSE-SU-2024:0858-1
openSUSE Leap 15.5 kernel-azure +2 5.14.21-150500.33.37.1 SUSE-SU-2024:0855-1
openSUSE Leap 15.5 kernel-default-base 5.14.21-150500.55.52.1.150500.6.23.1 SUSE-SU-2024:0858-1
openSUSE Leap 15.5 kernel-rt +3 5.14.21-150500.13.38.1 SUSE-SU-2024:0910-1
Show 2 more (older releases, extended support, other products)
ReleasePackageFixed inAdvisory
openSUSE Leap Micro 5.4 kernel-default 5.14.21-150400.24.111.2 SUSE-SU-2024:0900-1
openSUSE Leap Micro 5.4 kernel-default-base 5.14.21-150400.24.111.2.150400.24.52.1 SUSE-SU-2024:0900-1
openSUSE Leap Micro 5.4 kernel-rt 5.14.21-150400.15.71.1 SUSE-SU-2024:0977-1
openSUSE Leap Micro 5.3 kernel-default 5.14.21-150400.24.111.2 SUSE-SU-2024:0900-1
openSUSE Leap Micro 5.3 kernel-default-base 5.14.21-150400.24.111.2.150400.24.52.1 SUSE-SU-2024:0900-1
openSUSE Leap Micro 5.3 kernel-rt 5.14.21-150400.15.71.1 SUSE-SU-2024:0977-1

Azure Linux

ReleasePackageFixed inAdvisory
Azure Linux 2 (CBL-Mariner) kernel No fix yet —

Advisories 13

References