CVE-2026-89659
largeUse-after-free in Linux kernel NFSD client teardown during delegation revoke
The Linux kernel's NFS server (NFSD) contains a use-after-free in which an expired delegation being processed by the nfs4_laundromat is temporarily on neither the cl_delegations nor cl_revoked list, allowing the owning nfs4_client to be torn down and freed while revoke_delegation() is still about to dereference its cl_lock. The bug is triggered when a client's recalled delegation times out and the laundromat revokes it in the same window in which the client's remaining state drops to zero, since the laundromat holds no cl_rpc_users reference that would block free_client(). A remote attacker interacting with the NFS server (e.g., a malicious or carefully timed NFS client) could race this window to corrupt freed kernel memory, potentially achieving kernel-level code execution or crashing the host, consistent with the 9.8 critical CVSS. Affected systems are Linux hosts running the in-kernel nfsd as an NFSv4 server, particularly where delegations are issued; specific fixed version ranges were not specified in the source data, only that the fix pins the client with cl_rpc_users across the revoke. No public proof-of-concept exists and the flaw is not in the CISA KEV catalog, so exploitation status is currently unknown/none known.
What to do: Apply your distribution's updated kernel packages once they include this NFSD fix and reboot (or reload nfsd) so the new code takes effect. Until patched, restrict NFS access at the firewall to trusted client subnets only and avoid exposing port 2049 to the internet. As a temporary mitigation on unpatched hosts, disabling NFSv4 delegations (e.g., via nfsd module/export options) reduces the vulnerable code path; check server logs for nfsd crashes or laundromat anomalies as indicators.
| Linux kernel (NFSD / nfs4 delegation handling) | — |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
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 nfs4_client and does not keep it alive. The client survives its stateids only because __destroy_client() drains cl_delegations and cl_revoked before free_client() runs. nfs4_laundromat() breaks that invariant: it unhashes an expired delegation from cl_delegations, drops deleg_lock, then revoke_delegation() relinks it onto cl_revoked under cl_lock. In that window the delegation is on neither list, so client_has_state() can report no remaining state. Every teardown path first requires cl_rpc_users to be zero, but the laundromat holds no such reference. A client whose recalled delegation has just timed out can therefore reach free_client() while revoke_delegation() is still about to dereference cl_lock, a use-after-free. Pin the client with cl_rpc_users across the revoke so teardown blocks until it completes, then reap the delegation from cl_revoked. A client already expiring reaps its own, so skip it and leave the delegation on del_recall_lru.
- Vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
In the news0 stories
No ingested article mentions this CVE yet.