CVE-2026-89659: NFSD: Prevent client use-after-free during delegation revoke

Published Sep 11, 2026
·
Updated

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

NFSD: Prevent client use-after-free during delegation revoke

A delegation stateid holds only a bare pointer to its owning nfs4client and does not keep it alive. The client survives its stateids only because destroyclient() drains cldelegations and clrevoked before freeclient() runs.

nfs4laundromat() breaks that invariant: it unhashes an expired delegation from cldelegations, drops deleglock, then revokedelegation() relinks it onto clrevoked under cllock. In that window the delegation is on neither list, so clienthasstate() can report no remaining state.

Every teardown path first requires clrpcusers to be zero, but the laundromat holds no such reference. A client whose recalled delegation has just timed out can therefore reach freeclient() while revokedelegation() is still about to dereference cllock, a use-after-free.

Pin the client with clrpcusers across the revoke so teardown blocks until it completes, then reap the delegation from clrevoked. A client already expiring reaps its own, so skip it and leave the delegation on delrecalllru.

Affected Software

1 affected component
Linux Kernel

Event History

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

Frequently Asked Questions

1

Which deployments are exposed to this race?

Systems using the Linux kernel NFSD server are relevant. The race involves an NFSv4 client with a recalled delegation that has timed out while that client is also being torn down.

2

What conditions are needed for the use-after-free to occur?

The laundromat must remove an expired delegation from the client's delegation list and, before it relinks the delegation to the revoked list, client teardown must conclude that no state remains and free the client. The revoke path can then dereference the freed client's lock.

3

What does the fix change to prevent the race?

It holds a cl_rpc_users reference on the client throughout delegation revocation, preventing teardown until revocation is complete. It also avoids reaping a delegation through this path when the client is already expiring, leaving that delegation on the recall LRU.

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