PT-2026-90431 · Linux · Linux
CVE-2026-89715
·
Published
2026-09-11
·
Updated
2026-09-11
None
No severity ratings or metrics are available. When they are, we'll update the corresponding info on the page.
In the Linux kernel, the following vulnerability has been resolved:
NFS/localio: fix ref leak on nfs uuid add file failure
When nfs uuid add file() races with nfs uuid put() tearing down
uuid->net, it returns -ENXIO without publishing nfl->nfs uuid via
rcu assign pointer(). nfs open local fh() then enters its error
branch and only releases the slot's file ref and its paired net
ref plus its own entry-time net ref, while the close path is a
no-op:
nfs close local fh()
nfs uuid = rcu dereference(nfl->nfs uuid);
if (!nfs uuid) { rcu read unlock(); return; } /* always */
nfsd open local fh() returns localio holding a caller-owned +1
nfsd file reference (from nfsd file get() after
nfsd file acquire local()) and an entry-time nfsd net reference
(from its first nfsd net try get()) embedded as nf->nf net. Both
are leaked on the failure path, pinning one nfsd file (and the
underlying struct file, dentry, inode) and one nfsd net ref per
occurrence, which blocks nfsd net and netns teardown.
Fix by releasing the caller-owned file ref and its net ref through
the existing helper, using a stack-local RCU pointer so the helper
can xchg it out, then returning -ENXIO so callers do not
dereference a localio whose slot has been cleared:
struct nfsd file rcu *tmp = RCU INITIALIZER(localio);
nfs to nfsd file put local(pnf);
nfs to nfsd file put local(&tmp);
localio = ERR PTR(-ENXIO);
The trailing nfs to nfsd net put(net) continues to release the
outer net ref, so all three nfsd net try get() increments are
balanced on the error branch.
Found an issue in the description? Have something to add? Feel free to write us 👾
Related Identifiers
Affected Products
Linux