HIGH Introduced in 7.2
nfsd StateidExport DoubleFree
CVE-2026-90236
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
01Description
In the Linux kernel, the following vulnerability has been resolved: NFSD: Release the export reference when reaping open stateids nfs4_put_stid() releases the svc_export tracked in nfs4_stid.sc_export, but free_ol_stateid_reaplist() frees open and lock stateids by calling ->sc_free() directly, bypassing that path. An open stateid takes an sc_export reference in nfs4_open() and a lock stateid takes its own in init_lock_stateid(); both reach free_ol_stateid_reaplist() through their normal teardown, the open stateid via release_open_stateid() and the lock stateid via nfsd4_release_lockowner(), each through put_ol_stateid_locked(). The reference is therefore never dropped, pinning the export and blocking unmount for the lifetime of the stateid. Release sc_export in free_ol_stateid_reaplist() the way nfs4_put_stid() does. ->sc_free() runs once per stateid, and a stateid reaches free_ol_stateid_reaplist() or nfs4_put_stid() but never both, so the reference is dropped exactly once. Revoked stateids reach this path with sc_export already cleared by drop_stid_export(), so they are skipped rather than double-freed. nfs4_put_stid() itself read sc_export before acquiring cl_lock. drop_stid_export() clears that field and releases the reference under cl_lock, so a concurrent revocation could drop the export in the window between the read and the final put, releasing the same reference twice. Read sc_export while cl_lock is held so the two paths serialize and the reference is released exactly once.
02KernelScan AI Analysis
Risk summary
An NFS server running on an affected kernel can be attacked by any client that can reach it over the network. The most severe consequence is a double-free on a kernel heap object caused by a race between stateid teardown and revocation, which can corrupt kernel memory. A simpler trigger path also leaks export references, permanently pinning exported filesystems and preventing unmount.
Vulnerability analysis
The NFS server records an export reference inside each NFSv4 stateid, but the stateid reaping path frees stateids directly without releasing that reference, leaking it and pinning the exported filesystem so it can never be unmounted. Separately, the normal stateid cleanup path reads the export pointer before acquiring the lock that protects it, creating a race with concurrent stateid revocation that can release the same export reference twice — a double-free on a kernel heap object. The fix releases the export reference in the reaping path and moves the export pointer read inside the lock so the two teardown paths serialize and the reference is dropped exactly once. Any NFS client that can perform open and lock operations against the server can trigger this; the double-free requires winning a race between normal teardown and revocation.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 7.2 | 7.2 | 7.2.6 | 7458727fd7cb |
| mainline | 7.2 | 7.3-rc1 | 6480bd703684 |