CVE-2026-93221: nfsd: convert nfsd_net boolean flags to unsigned long flags word

Published Sep 24, 2026
·
Updated

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

nfsd: convert nfsdnet boolean flags to unsigned long flags word

nfsdnet contains several boolean fields that are accessed from concurrent contexts without serialization. In particular, nfsd4endgrace() guards its drain path with a plain bool:

if (nn->graceended) return; nn->graceended = true;

The read and the write are independent, and nothing in struct nfsdnet serializes them. At least two contexts can reach this code with no lock held:

laundromat path laundrywq kworker nfs4laundromat() nfsd4endgrace()

RECLAIMCOMPLETE path nfsd compound kthread nfsd4reclaimcomplete() increclaimcomplete() nfsd4endgrace()

Both callers can observe graceended == false on different CPUs, both store true, and both proceed into nfsd4recordgracedone(), which invokes the active clienttrackingops->gracedone callback. For tracking ops that drain reclaimstrhashtbl (legacytrackingops via nfsd4recdirpurgeold, and the cld v1+ ops via nfsd4cldgracedone), gracedone calls nfs4releasereclaim(), which walks every bucket of reclaimstrhashtbl with no lock and calls nfs4removereclaimrecord() (listdel + kfree) on each entry. Two concurrent walkers corrupt the list and double-free every nfs4clientreclaim. A concurrent nfsd4findreclaimclient() iterating the same bucket reads through freed memory.

A third call site exists in nfs4statestartnet() on the skipgrace startup path, but it runs under nfsdmutex before any client has connected and before the laundromat's first delayed work fires, so it cannot race with the two callers above.

Replace the scattered boolean fields in nfsdnet with a single unsigned long flags word and an enum nfsdnetflag for the bit positions. The graceended race is fixed by using testandsetbit(), which is atomic on all architectures. The remaining flags (graceendforced, ingrace, somebodyreclaimed, trackreclaimcompletes, nfsdnetup, lockdup) are converted to use testbit/setbit/clearbit for consistency. This avoids sub-word cmpxchg issues on architectures like Hexagon that only support word-sized atomic operations.

Affected Software

1 affected component
Linux Linux kernel

Event History

Sep 24, 2026
CVE Published
via MITRE·03:10 PM
Data Sourced
via MITRE·03:10 PM
Description
Data Sourced
via NVD·04:17 PM
Description

Frequently Asked Questions

1

Which deployments are exposed to this race?

The affected component is the Linux kernel NFS server (nfsd). The race is relevant where concurrent grace-period completion paths can invoke client-tracking grace_done callbacks that drain reclaim_str_hashtbl, including the legacy tracking operations and cld v1+ operations described in the advisory.

2

What condition triggers the vulnerable behavior?

Two concurrent contexts must both observe grace_ended as false and enter nfsd4_end_grace(). The advisory identifies the laundromat workqueue path and the RECLAIM_COMPLETE path as contexts that can do this without a lock.

3

What should be done if the affected NFS server is in use?

Install a Linux kernel version that includes the documented resolution. The fix changes the nfsd_net boolean flags to an unsigned-long flags word so concurrent access can be handled safely.

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