CVE-2026-89705: nfsd: restore rq_status_counter to even on all nfsd_dispatch() exit paths

Published Sep 11, 2026
·
Updated

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

nfsd: restore rqstatuscounter to even on all nfsddispatch() exit paths

nfsddispatch() sets rqstatuscounter 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 nfsdnlrpcstatusgetdumpit().

Only the fully successful path restored the counter to even. The cache-hit (RCREPLY), drop (RCDROPIT / RQDROPME) 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, rqstatuscounter 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.

Affected Software

1 affected component
Linux Linux kernel

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade Linux kernel nfsd to a version that resolves this vulnerability.

    Fixed in resolved
  2. Configuration

    In nfsd_dispatch(), restore rq_status_counter to an even value on every return path that follows the odd-valued store (i.e., after nfsd_dispatch() sets rq_status_counter to odd).

    nfsd rq_status_counter = even
  3. Operational

    After applying the kernel change, validate that rq_status_counter returns to even for all nfsd_dispatch() exit paths (cache-hit, decode-error, drop paths), so the lockless dumpit reader can reliably detect concurrent mutation via its retry check.

Event History

Sep 11, 2026
CVE Published
via MITRE·07:46 PM
Data Sourced
via MITRE·07:46 PM
Description

Frequently Asked Questions

1

What conditions are required for the unsafe read to occur?

An nfsd request must take a cache-hit, drop, or encode-error exit path that leaves rq_status_counter odd. A lockless nfsd_nl_rpc_status_get_dumpit() reader must then inspect request fields while another request is decoding or releasing them.

2

What is the practical impact of the race?

The status dump reader can treat actively changing request data as stable. In particular, it can read past the end of the 8-element inline operations array while args->ops or args->opcnt is being changed.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203