CVE-2025-38586
NoneCVSS
—
EPSS
0.2%
Published
Aug 19, 2025
CISA due date
—
Cloudanix analysis
A bug in the operating system on certain ARM-based computers can make the whole system crash when particular low-level programs run.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Memory Corruption
- Remediation
- Patch
- Effort
- Low
- Patch risk
- Low
What it actually does
In the ARM64 BPF JIT, exception_boundary programs skip the find_used_callee_regs() call that sets ctx->fp_used, leaving the frame pointer uninitialized in the prologue even when the program uses FP; execution then dereferences an invalid stack pointer and triggers a kernel page fault.
Why it matters to the business
ARM64 Linux systems can suffer abrupt kernel crashes and reboots when specific BPF programs are loaded, causing unplanned downtime, service interruption, and potential loss of in-flight work.
How an attack unfolds
An attacker with the ability to load or attach BPF programs supplies a program that both declares itself an exception boundary and references the frame pointer; the JIT emits a prologue that never saves or sets up FP, so the first FP-using instruction faults and crashes the kernel.
How to fix it
Upgrade the Linux kernel to commit 0dbef493cae7d451f740558665893c000adb2321 or later; for Chainguard packages update openjdk-11-openj9 and related variants to 0.53.0-r0 or newer.
How to confirm the fix worked
Confirm the running kernel contains commit 0dbef493cae7d451f740558665893c000adb2321; verify package versions match the listed fixed releases; test by loading an exception_boundary BPF program that uses FP and ensure no page fault occurs.
Typical attack path
- Obtain privileges sufficient to load or attach BPF programs on an ARM64 system
- Craft or obtain a BPF program marked as exception_boundary that also uses the frame pointer
- Load the program via bpf() or a loader that sets aux->exception_boundary
- Trigger execution of the program to reach the faulty prologue and induce the page fault
How to detect it
Search kernel logs and dmesg for page-fault oopses originating in the BPF JIT prologue or arm64 exception-boundary paths; correlate timestamps with recent bpf() syscalls or BPF program loads.
What your security team should do
- Apply the kernel or package updates on all ARM64 systems as soon as possible
- Restrict untrusted users and containers from loading BPF programs (CAP_BPF, unprivileged_bpf_disabled)
- Monitor kernel crash logs for BPF-related page faults on ARM64
The record
In the Linux kernel, the following vulnerability has been resolved: bpf, arm64: Fix fp initialization for exception boundary In the ARM64 BPF JIT when prog->aux->exception_boundary is set for a BPF program, find_used_callee_regs() is not called because for a program acting as exception boundary, all callee saved registers are saved. find_used_callee_regs() sets `ctx->fp_used = true;` when it sees FP being used in any of the instructions. For programs acting as exception boundary, ctx->fp_used remains false even if frame pointer is used by the program and therefore, FP is not set-up for such programs in the prologue. This can cause the kernel to crash due to a pagefault. Fix it by setting ctx->fp_used = true for exception boundary programs as fp is always saved in such programs.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Debian:13 | linux | 0 | No fix |
| Debian:14 | linux | 0 | No fix |
| Debian:14 | linux | 0 | 6.16.3-1 |
| Linux | Kernel | 6.12.0 | 6.12.42 |
| openSUSE:Leap 16.0 | dtb-aarch64 | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-64kb | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-default | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-default-base | 0 | 6.12.0-160000.6.1.160000.2.4 |
| openSUSE:Leap 16.0 | kernel-docs | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-kvmsmall | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-obs-build | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-obs-qa | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-rt | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-source | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-syms | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-zfcpdump | 0 | 6.12.0-160000.6.1 |
Related vulnerabilities
- CVE-2025-39885 In the Linux kernel, the following vulnerability has been resolved: ocfs2: fix recursive… Also affects linux
- CVE-2025-39883 In the Linux kernel, the following vulnerability has been resolved: mm/memory-failure… Also affects linux
- CVE-2025-39884 In the Linux kernel, the following vulnerability has been resolved: btrfs: fix subvolume… Also affects linux
- CVE-2025-39886 In the Linux kernel, the following vulnerability has been resolved: bpf: Tell memcg to… Also affects linux
- CVE-2025-39876 In the Linux kernel, the following vulnerability has been resolved: net: fec: Fix… Also affects linux
- CVE-2025-39880 In the Linux kernel, the following vulnerability has been resolved: libceph: fix invalid… Also affects linux
- CVE-2025-39881 In the Linux kernel, the following vulnerability has been resolved: kernfs: Fix UAF in… Also affects linux
- CVE-2025-39882 In the Linux kernel, the following vulnerability has been resolved: drm/mediatek: fix… Also affects linux