CVE-2026-93212: nfsd: guard nfsd_serv deref in nfsd_file_net_dispose
In the Linux kernel, the following vulnerability has been resolved:
nfsd: guard nfsdserv deref in nfsdfilenetdispose
nfsdfilenetdispose() is the consumer side of l->freeme: the nfsd service thread loop calls it to drain entries that the filecache garbage collector and shrinker append via nfsdfiledisposelistdelayed(). During per-net teardown, nn->nfsdserv is cleared before the filecache laundrette is shut down, so the service thread can still run a dispose pass that finds more than eight entries on l->freeme and dereferences a NULL svcserv:
nfsd service thread loop nfsdfilenetdispose(nn) if (!listempty(&l->freeme)) { ... svcwakeup(nn->nfsdserv); / nn->nfsdserv == NULL / }
The sibling helper nfsdfiledisposelistdelayed() already documents this ordering and caches nn->nfsdserv into a local before testing it for NULL. nfsdfilenetdispose() was introduced with the same raw svcwakeup(nn->nfsdserv) call and never picked up the guard.
Fix by loading nn->nfsdserv into a local svcserv pointer and only calling svcwakeup() when it is non-NULL, matching the pattern in nfsdfiledisposelistdelayed().
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
debian/linuxto a version that resolves this vulnerability.Fixed in 6.1.176-1Fixed in 6.1.190-1Fixed in 6.12.115-2Fixed in 7.2.12-1Fixed in 7.2.15-1 - Upgrade
Upgrade
debian/linux-6.12to a version that resolves this vulnerability.Fixed in 6.12.113-1~deb12u1 - Upgrade
Upgrade
ubuntu/linux-hwe-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42~24.04.1 - Upgrade
Upgrade
ubuntu/linux-riscv-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1~24.04.1 - Upgrade
Upgrade
ubuntu/linuxto a version that resolves this vulnerability.Fixed in 7.0.0-42.42 - Upgrade
Upgrade
ubuntu/linux-awsto a version that resolves this vulnerability.Fixed in 7.0.0-1016.17 - Upgrade
Upgrade
ubuntu/linux-gcpto a version that resolves this vulnerability.Fixed in 7.0.0-1016.18 - Upgrade
Upgrade
ubuntu/linux-ibmto a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oem-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oracleto a version that resolves this vulnerability.Fixed in 7.0.0-1015.16 - Upgrade
Upgrade
ubuntu/linux-riscvto a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1 - Compensating control
In nfsd_file_net_dispose(), load nn->nfsd_serv into a local svc_serv pointer and call svc_wake_up() only when that pointer is non-NULL, matching nfsd_file_dispose_list_delayed().
Event History
Frequently Asked Questions
When can this issue be triggered?
It can occur during per-network-namespace teardown, after nn->nfsd_serv has been cleared but before the filecache laundrette has stopped. A service-thread dispose pass must then encounter more than eight entries on the freeme list.
What is the impact of the vulnerable code path?
The NFS server service thread can dereference a NULL svc_serv pointer when it calls svc_wake_up(nn->nfsd_serv). This happens in nfsd_file_net_dispose() while processing delayed filecache disposal entries.
What is the fix?
Update to a kernel version containing the referenced fixes. The correction stores nn->nfsd_serv in a local pointer and calls svc_wake_up() only when that pointer is non-NULL.