CVE-2026-89548
High · 7.8CVSS
7.8
EPSS
0.1%
Published
Sep 11, 2026
CISA due date
—
Cloudanix analysis
A bug in Linux kernel networking code can let someone who already has access to the computer crash it or take full control.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Low
- Impact
- Full Compromise
- Component
- OS kernel
- Class
- Use After Free
- Remediation
- Patch
- Effort
- Medium
- Patch risk
- Low
What it actually does
Use-after-free in SUNRPC cache teardown: sunrpc_destroy_cache_detail skips cancel_delayed_work_sync when cache_list is non-empty (as occurs during netns destruction), allowing cache_clean to dereference a freed cache_detail via queue_lock and cache_put function pointer.
Why it matters to the business
Local attackers on Linux systems can trigger kernel memory corruption, leading to crashes, denial of service, or potential privilege escalation; widespread impact due to presence in core networking stack across distributions.
How an attack unfolds
An attacker with local access triggers per-network-namespace teardown (e.g., via container shutdown or network namespace deletion), races the delayed cache_clean work against the freed cache_detail, and leverages the dangling pointers for arbitrary read/write or code execution within the kernel.
How to fix it
Apply the upstream fix that removes the list_empty guard around cancel_delayed_work_sync so the cleaner is always drained before cache_detail destruction; rebuild and deploy updated kernel packages containing this change.
How to confirm the fix worked
Confirm the patch is present by inspecting the sunrpc_destroy_cache_detail function for unconditional cancel_delayed_work_sync; test by exercising repeated netns creation/teardown under load and verify absence of slab UAF warnings in dmesg or kmemleak.
Typical attack path
- Obtain local code execution on a Linux host
- Create or destroy network namespaces to initiate per-netns SUNRPC cache teardown
- Race the cache_clean delayed work against sunrpc_destroy_cache_detail freeing the object
- Use resulting dangling pointers in cache_dequeue or cache_put for memory corruption
- Escalate to kernel code execution or cause denial of service
How to detect it
Review kernel logs (dmesg, journalctl) for slab use-after-free warnings referencing cache_detail, queue_lock, or cache_put during network namespace teardown; correlate with container or netns lifecycle events in audit logs.
- cache_detail
- cache_clean
- sunrpc_destroy_cache_detail
- cache_dequeue
What your security team should do
- Prioritize kernel updates on all Linux systems exposed to untrusted local workloads or containers
- Monitor for kernel oops or slab corruption logs during namespace lifecycle events
- Restrict unprivileged namespace creation via kernel.unprivileged_userns_clone or similar controls until patched
The record
In the Linux kernel, the following vulnerability has been resolved: SUNRPC: always drain cache_cleaner before destroying a cache_detail sunrpc_destroy_cache_detail() only cancels the global cache_cleaner delayed_work when cache_list is empty. During per-netns teardown cache_list is never empty because init_net's caches remain registered, so the cancel never fires. After unlink, the caller proceeds to cache_destroy_net() which kfrees the cache_detail while cache_clean() may still hold a dangling pointer to it. The result is a use-after-free: cache_dequeue() takes cd->queue_lock on freed memory, and cache_put() dereferences cd->cache_put as a function pointer from freed slab. Drop the list_empty guard so that cancel_delayed_work_sync() always runs, ensuring any in-flight cache_clean() completes before the cache_detail is freed. Re-arm the cleaner afterwards if other caches are still registered.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|