CVE-2026-90234: NFS: Return a delegation the client fails to record

Published Sep 17, 2026
·
Updated

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

NFS: Return a delegation the client fails to record

When an NFS server grants a delegation in an OPEN reply, nfsinodesetdelegation() records it on the client. However, three of its error flows return without sending DELEGRETURN.

A delegation can be relinquished only by DELEGRETURN (RFC 8881 Section 20.2.4), so dropping one silently leaves the server believing the client still holds it. If the server happens to recall that delegation, the client answers CBRECALL with NFS4ERRBADHANDLE because it has no record of the stateid. The server revokes the delegation and moves it onto its clrevoked list, because the client never sends the FREESTATEID that would drain it. Every subsequent SEQUENCE reply then carries SEQ4STATUSRECALLABLESTATEREVOKED, and the client's state manager loops issuing TESTSTATEID across its delegations without ever clearing the condition.

The window is easy to reach now that a server offers a write delegation on any write OPEN: a delegation recalled for one opener races a re-open that the server answers with a fresh write delegation.

Instead of dropping it, hand the delegation back during these error flows.

Event History

Sep 17, 2026
CVE Published
via MITRE·04:07 PM
Data Sourced
via MITRE·04:07 PM
Description

Frequently Asked Questions

1

What conditions are needed to trigger the issue?

The issue requires an NFS server to grant a delegation in an OPEN reply while the client fails to record that delegation through one of the affected error paths. A reachable race involves a recalled delegation for one opener and a re-open that receives a fresh write delegation.

2

What operational symptoms indicate a client may be affected?

After the server recalls the unrecorded delegation, the client can respond to CB_RECALL with NFS4ERR_BADHANDLE. The server may then retain revoked state and include SEQ4_STATUS_RECALLABLE_STATE_REVOKED in subsequent SEQUENCE replies, while the client state manager repeatedly issues TEST_STATEID without clearing the condition.

3

Why does the condition persist once it occurs?

The client silently drops a delegation without sending DELEGRETURN, leaving the server to believe the client still holds it. Following revocation, the client also does not send FREE_STATEID to drain the server's revoked-state list.

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