CVE-2026-90317
High · 7.8CVSS
7.8
EPSS
0.2%
Published
Sep 17, 2026
CISA due date
—
Cloudanix analysis
A programming error in the Linux kernel could let a local user cause memory corruption that might crash the system or gain elevated access.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Moderate
- Impact
- Full Compromise
- Component
- OS kernel
- Class
- Use After Free
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The flaw allows a use-after-free when a sleepable BPF program releases the final RCU-protected context via bpf_spin_unlock(); the verifier fails to invalidate associated kptrs, permitting a pointer to reference a freed object on another CPU.
Why it matters to the business
Local attackers can trigger kernel memory corruption leading to crashes, privilege escalation, or data exposure on any system running affected kernels with unprivileged BPF access enabled; the issue affects broad Linux distributions and embedded devices but carries low immediate exploitation likelihood.
How an attack unfolds
An attacker loads a capability-limited sleepable BPF program that acquires a spin lock protecting a kptr, releases the lock to end RCU protection, then dereferences the now-stale pointer in __bpf_get_task_stack or similar helpers, causing a use-after-free on a freed task_struct when another CPU reclaims the object.
How to fix it
Upgrade to a kernel containing the fix that records RCU context before unlock and invalidates pointers only on final exit from protected sections; rebuild and redeploy any custom BPF programs after the update.
How to confirm the fix worked
Confirm the running kernel version contains the RCU-context tracking change in the BPF verifier; exercise sleepable programs that acquire and release spin locks while monitoring for use-after-free warnings in dmesg or with KASAN builds.
Typical attack path
- Obtain local unprivileged access on a system permitting sleepable BPF programs.
- Load a crafted BPF program that uses bpf_spin_lock/unlock around a kptr.
- Trigger the final unlock to drop RCU protection while leaving the pointer valid.
- Force concurrent freeing of the underlying object from another CPU.
- Dereference the dangling pointer to achieve use-after-free.
How to detect it
Review kernel logs for use-after-free reports involving __bpf_get_task_stack or BPF spin-lock paths; inspect audit logs for unexpected BPF program loads by non-root users and correlate with any subsequent kernel oops or panic events.
What your security team should do
- Apply the upstream kernel fix immediately on all systems exposing unprivileged BPF.
- Audit and restrict unprivileged BPF usage via sysctl or LSM policies where possible.
- Monitor for future kernel updates and test in staging environments before broad rollout.
- Enable kernel hardening features such as lockdown mode on high-value hosts.
The record
In the Linux kernel, the following vulnerability has been resolved: bpf: Invalidate RCU pointers after final spin unlock In a sleepable BPF program, a spin lock can provide the only RCU protection for a kptr. The final bpf_spin_unlock() ends that protection, but the verifier leaves the pointer valid. Another CPU can then free the object before the pointer is used. A capability-limited runtime PoC triggered a task_struct use-after-free in __bpf_get_task_stack(). Record whether the program is in an RCU-protected context before releasing the lock. Invalidate RCU-protected pointers only when the unlock leaves the final such context. This preserves valid pointers in non-sleepable programs and inside an explicit RCU read-side section.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|