CVE-2026-89691
High · 7.1CVSS
7.1
EPSS
0.1%
Published
Sep 11, 2026
CISA due date
—
Cloudanix analysis
A bug in the Linux kernel's NFS server code can let a local user read pieces of hidden kernel memory that should never be visible.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Low
- Impact
- Data Exposure
- Component
- OS kernel
- Class
- Information Disclosure
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Failure to reset opcnt after freeing the dynamic ops buffer in nfsd4_release_compoundargs allows the RPC status dump handler to read beyond the 8-element inline iops array into adjacent slab memory when rq_status_counter is odd, resulting in kernel memory disclosure to userspace via netlink.
Why it matters to the business
Local users can obtain sensitive kernel memory contents, increasing the risk of credential theft, privilege escalation, or further kernel attacks on NFS servers; the low EPSS and lack of KEV listing indicate limited in-the-wild exploitation so far, but the 43-day-old disclosure still requires prompt kernel updates on affected systems.
How an attack unfolds
An attacker with local access triggers an NFSv4 compound RPC that causes nfsd_dispatch to take an error path leaving rq_status_counter odd; after the compound args are released with a stale opcnt value, the status dump handler reads min(opcnt,16) entries from the now-freed buffer, leaking up to 8 additional slab objects through the netlink interface.
How to fix it
Upgrade to a Linux kernel containing the fix that unconditionally zeros opcnt in nfsd4_release_compoundargs; apply the stable backports or distribution updates released after 2026-09-11.
How to confirm the fix worked
Confirm the source change that sets args->opcnt = 0 inside nfsd4_release_compoundargs before the buffer free; run kernel selftests for NFSv4 compound argument handling and verify no out-of-bounds reads occur under error-path conditions.
Typical attack path
- Obtain local shell on an NFS server running the vulnerable kernel
- Issue a crafted NFSv4.1+ compound request that forces an error path in nfsd_dispatch
- Trigger the status dump handler while opcnt remains non-zero after buffer release
- Read disclosed slab memory from the netlink response to gather kernel pointers or data
How to detect it
Inspect kernel audit logs and netlink traffic for unexpected reads from the nfsd status interface after compound RPC errors; look for processes invoking nfsd-related netlink calls with elevated opcnt values.
What your security team should do
- Prioritize kernel updates on all systems exposing NFSv4 services
- Monitor vendor advisories for the exact backported commit
- Restrict local access to NFS servers until patched
- Review netlink and RPC audit logs for unusual status-dump activity
The record
In the Linux kernel, the following vulnerability has been resolved: nfsd: clear opcnt on compound arg release to prevent OOB read nfsd4_release_compoundargs() resets args->ops to the inline iops[8] array when the dynamically-allocated ops buffer is freed, but leaves args->opcnt at its original value (which can be up to 200 for NFSv4.1+ compounds). If rq_status_counter is stuck at an odd value (which can happen when nfsd_dispatch() hits an error path after setting it odd), the RPC status dumpit handler reads min(opcnt, 16) entries from args->ops[]. Since iops only has 8 elements and is the last field in struct nfsd4_compoundargs, reading indices 8-15 accesses adjacent slab memory and leaks it to userspace via netlink. Zero opcnt unconditionally in nfsd4_release_compoundargs() so stale compound metadata is never exposed through the status interface. [ cel: Remove the kvfree_rcu_mightsleep() sleep from the exposure window ]
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|