Skip to main content

Linux Kernel CVE-2026-31526

| EUVDEUVD-2026-24917 MEDIUM
Improper Locking (CWE-667)
2026-04-22 416baaa9-dc9f-4396-8d5f-8c081fb06d67
5.5
CVSS 3.1 · NVD
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Load malicious BPF program
  2. Delivery
    Trigger verifier validation of subprogram with lock
  3. Exploit
    Skip lock check on exception exit
  4. Execution
    bpf_throw unwinds stack
  5. Persist
    Locks remain held in kernel context
  6. Impact
    System deadlock or instability

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Proper locking
Exploitation Conditions

Exploitation requires: (1) unprivileged BPF enabled (kernel.unprivileged_bpf_disabled=0) or CAP_BPF capability; (2) ability to load eBPF bytecode via bpf() syscall (not restricted by SELinux/AppArmor); (3) BPF program must contain a static subprogram (not a main program) that acquires active_rcu_locks, active_preempt_locks, or active_irq_id before calling bpf_throw(). The vulnerability does NOT affect spin_lock cases because those are validated before bpf_throw executes. Non-exploitable scenarios: kernel builds with CONFIG_BPF=n or CONFIG_BPF_JIT=n disable BPF entirely; systems with kernel.unprivileged_bpf_disabled=1 prevent unauthorized BPF loading; SELinux/AppArmor policies restricting bpf() syscall; systems running unaffected kernel versions (pre-6.7 or post-6.18.21/6.19.11/7.0). This is fundamentally a verifier bypass, not a memory corruption or authentication escape.

Impact

The risk assessment reveals a disconnect between CVSS and real-world exploitability. CVSS 5.5 with local attack vector (AV:L/AC:L/PR:L) and availability impact (A:H) indicates a privilege escalation or DoS path requiring local access and standard user privileges. However, EPSS 0.02% (percentile 4%) suggests minimal practical exploitation likelihood. The vulnerability is not listed in CISA KEV, and no public exploit code is referenced. The technical requirements are highly specialized: an attacker must (1) run local BPF programs with CAP_BPF privileges, (2) deliberately craft a subprogram with unmatched RCU/preemption lock acquisition, and (3) trigger bpf_throw() from that subprogram. While the impact (system instability, potential denial of service through sustained lock holding) is real, exploitation requires deliberate malicious BPF bytecode and elevated capabilities. This is a logic bug in a security validator rather than a memory corruption or remote code execution vulnerability. Linux distributions and embedded systems with unprivileged BPF disabled face minimal exposure.

Exploit ScenarioDerived

A local attacker with standard user privileges on a system with unprivileged BPF enabled (kernel.unprivileged_bpf_disabled=0) crafts a malicious eBPF program that acquires an RCU read lock or preemption lock within a static subprogram, then invokes bpf_throw() before releasing the lock. When loaded into the kernel via bpf() syscall, the BPF verifier fails to detect the lock mismatch because check_lock validation is skipped for exception exits in subprograms. The program is accepted and at runtime, bpf_throw() unwinds the stack via ORC without releasing the held lock, leaving the kernel in a deadlock or hang condition that forces denial of service.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.0% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Apr 28, 2026

The Linux kernel BPF verifier fails to validate lock release on exception exits from static subprograms when bpf_throw() is invoked, potentially allowing denial of service or system instability through uncontrolled RCU and preemption lock retention. Affected versions span from 6.7 through 7.0-rc4; CVSS 5.5 (local privilege escalation path) but EPSS 0.02% suggests low real-world exploitation probability. Patch available in stable releases 6.18.21, 6.19.11, and 7.0.

RemediationAI

Upgrade to patched kernel versions: Linux 6.18.21 or later, 6.19.11 or later, or 7.0 stable and later. The fix is available in stable kernel repositories at https://git.kernel.org/stable/c/5a399f3117642494e35545f6ca397d3e177c1f9b (6.7 branch), https://git.kernel.org/stable/c/6c2128505f61b504c79a20b89596feba61388112 (6.8-6.11 branches), and https://git.kernel.org/stable/c/c0281da1f2aa5c2fca3a05f79b86bea96591c358 (6.12+ branches). For systems unable to upgrade immediately, disable unprivileged BPF by setting kernel.unprivileged_bpf_disabled=1 via sysctl, which prevents local users without CAP_BPF from loading arbitrary BPF programs. This eliminates the attack surface entirely but may impact legitimate BPF tooling (bcc, libbpf-based tools) unless run with elevated privileges. Alternatively, restrict BPF program loading to root via SELinux or AppArmor policies, though this is less granular than the kernel setting.

Affected VersionsENISA

Linux patch: 6.19.11
Linux f18b03fabaa9b7c80e80b72a621f481f0d706ae0 <c0281da1f2aa5c2fca3a05f79b86bea96591c358
Linux patch: 6.18.21
Linux patch: 0
Linux patch: 7.0
Linux f18b03fabaa9b7c80e80b72a621f481f0d706ae0 <6c2128505f61b504c79a20b89596feba61388112
Linux 6.7
Linux f18b03fabaa9b7c80e80b72a621f481f0d706ae0 <5a399f3117642494e35545f6ca397d3e177c1f9b

Affected Packages

euvd linux no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The vulnerability resides in the BPF verifier's exception handling logic, specifically the process_bpf_exit_full() function which invokes check_resource_leak(). The verifier failed to properly validate lock state when bpf_throw() (the BPF exception mechanism) unwinds the stack via ORC (Out-of-line Call Stack Register) unwinding in static subprograms. The root cause (CWE-667: Improper Locking) stems from conditional lock checking that passes check_lock = !curframe, which evaluates to false when exceptions are thrown from nested subprogram frames. This allows active_rcu_locks, active_preempt_locks, and active_irq_id to bypass validation. At runtime, bpf_throw() performs stack unwinding without invoking the normal frame cleanup routines that would release user-acquired locks, creating a state where locks remain held in kernel context after the throw exception exits the BPF program.

Know when the next one hits your stack

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

NVD PRIMARY 5.5 MEDIUM
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
SUSE MEDIUM
Red Hat 5.5 MEDIUM

Primary rating from NVD.

CVSS VectorNVD

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

Lifecycle Timeline

4
CVSS changed
Apr 28, 2026 - 18:07 NVD
5.5 (MEDIUM)
Patch released
Apr 28, 2026 - 18:04 nvd
Patch available
Patch available
Apr 22, 2026 - 16:33 EUVD
CVE Published
Apr 22, 2026 - 14:16 nvd
MEDIUM 5.5

DescriptionNVD

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

bpf: Fix exception exit lock checking for subprogs

process_bpf_exit_full() passes check_lock = !curframe to check_resource_leak(), which is false in cases when bpf_throw() is called from a static subprog. This makes check_resource_leak() to skip validation of active_rcu_locks, active_preempt_locks, and active_irq_id on exception exits from subprogs.

At runtime bpf_throw() unwinds the stack via ORC without releasing any user-acquired locks, which may cause various issues as the result.

Fix by setting check_lock = true for exception exits regardless of curframe, since exceptions bypass all intermediate frame cleanup. Update the error message prefix to "bpf_throw" for exception exits to distinguish them from normal BPF_EXIT.

Fix reject_subprog_with_rcu_read_lock test which was previously passing for the wrong reason. Test program returned directly from the subprog call without closing the RCU section, so the error was triggered by the unclosed RCU lock on normal exit, not by bpf_throw. Update __msg annotations for affected tests to match the new "bpf_throw" error prefix.

The spin_lock case is not affected because they are already checked [1] at the call site in do_check_insn() before bpf_throw can run.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/kernel/bpf/verifier.c?h=v7.0-rc4#n21098

Threat Intelligence Overview

EPSS Score
0.0%
Top 96% exploitable
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
None
System Exposure· derived
Small
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

28
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +28
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

Vendor StatusVendor

SUSE

Severity: Medium
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Fixed
SUSE Linux Enterprise Desktop 15 SP7 Fixed
SUSE Linux Enterprise High Availability Extension 15 SP7 Fixed
SUSE Linux Enterprise High Availability Extension 15 SP7 Fixed
SUSE Linux Enterprise High Performance Computing 15 SP7 Fixed

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy