CVE-2026-89715

CVE-2026-89715

published September 12, 2026

CVSS
—
EPSS
0%
Percentile
10.2
In the wild
Unconfirmed
What it is

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.

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00206 · 10.2th percentile
Published
2026-09-12T00:19Z
References (3)
EPSS history
Timeline
  • 13 SEP 03:23Z
    EPSS moved — → 0%
    epss
  • 11 SEP 19:46Z
    NFS/localio: fix ref leak on nfs_uuid_add_file failure
    cvelistv5