HIGH Introduced in 6.7
nfsd RpcStatus OOB
CVE-2026-89705
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H
KernelScan AI6.7MEDIUM
01Description
In the Linux kernel, the following vulnerability has been resolved: nfsd: restore rq_status_counter to even on all nfsd_dispatch() exit paths nfsd_dispatch() sets rq_status_counter to an odd value once a request has been decoded, and back to an even value once it has been fully processed, forming a seq-lock like protocol with the lockless reader in nfsd_nl_rpc_status_get_dumpit(). Only the fully successful path restored the counter to even. The cache-hit (RC_REPLY), drop (RC_DROPIT / RQ_DROPME) and encode-error paths all return after the odd-valued store without ever bringing the counter back to even. Once one of those paths is taken, rq_status_counter is left odd: the next request's decode ORs in 1 (still odd) and only a subsequent successful encode restores even. While stuck odd, the dumpit reader treats the rqstp fields as stable and its retry check compares against the same unchanging odd value, so it never detects concurrent mutation. This exposes actively mutating fields (e.g. args->ops / args->opcnt during compound decode and release) to the lockless reader, which can read past the end of the 8-element inline ops array. Add a helper that advances the counter to the next even value and call it on every return path that follows the odd-valued store. The decode-error path is left untouched as it is reached before the counter is set odd.
02KernelScan AI Analysis
Risk summary
A local attacker on a system running the NFS server daemon can trigger a protocol failure in the RPC status dump path, causing the lockless reader to read past the end of an internal operations array. This can lead to information disclosure or a kernel panic, potentially resulting in denial of service.
Vulnerability analysis
The NFS server coordinates request processing with a lockless debugging interface that exports RPC status to userspace using a sequence counter. When a request ends in certain non-successful outcomes — such as a cache hit, a dropped reply, or an encoding error — the counter is left in a state that tells the reader the data is stable. Because the counter is not advanced on these paths, the reader cannot detect concurrent changes to request fields and may read beyond the bounds of a small fixed-size operations array while those fields are still changing. The fix ensures the counter is always stepped to an even value on every path where it had been marked odd, so the reader retries when the data is in flux. A local user who can submit NFS requests and access the RPC status debugging interface can reach the race, though exploiting it requires precise timing between a failed request outcome and a concurrent status dump.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 7.2 | 6.7 | 7.2.4 | b08c30f08d57 |
| mainline | 6.7 | 7.3-rc1 | f6045886fe3f |