Back

HIGH

nfsd: fix nfsd_file reference leak in nfsd4_add_rdaccess_to_wrdeleg()

Published Jan 13, 2026

Description

nfsd4_add_rdaccess_to_wrdeleg() unconditionally overwrites fp->fi_fds[O_RDONLY] with a newly acquired nfsd_file. However, if the client already has a SHARE_ACCESS_READ open from a previous OPEN operation, this action overwrites the existing pointer without releasing its reference, orphaning the previous reference.

Additionally, the function originally stored the same nfsd_file pointer in both fp->fi_fds[O_RDONLY] and fp->fi_rdeleg_file with only a single reference. When put_deleg_file() runs, it clears fi_rdeleg_file and calls nfs4_file_put_access() to release the file.

However, nfs4_file_put_access() only releases fi_fds[O_RDONLY] when the fi_access[O_RDONLY] counter drops to zero. If another READ open exists on the file, the counter remains elevated and the nfsd_file reference from the delegation is never released. This potentially causes open conflicts on that file.

Then, on server shutdown, these leaks cause __nfsd_file_cache_purge() to encounter files with an elevated reference count that cannot be cleaned up, ultimately triggering a BUG() in kmem_cache_destroy() because there are still nfsd_file objects allocated in that cache.

Affected products

Remediation

Red Hat statement

This affects NFS servers serving NFSv4 clients using delegations. The leaks accumulate during normal operation with delegation upgrades. Server shutdown fails with a kernel BUG due to unfreed slab objects. Non-NFS systems are unaffected.

Metrics

Weaknesses (1)

References (7)

Change history (0)

No recorded changes yet.

Sources
CVE.org / MITRE
Status PUBLISHED
Assigner Linux
Published Jan 13, 2026
Updated Aug 5, 2026
Reserved Jan 13, 2026
NVD
Status Modified
Modified Jul 30, 2026
Red Hat
Severity Low
Public date Jan 13, 2026