Linux: nfsd: guard nfsd_serv deref in nfsd_file_net_dispose
What fixes it
- 59baf45a06435194005fc5fa9a42d89f77a30432LinuxCVE List
- 766170b4fd2daaf5c4d6735560101474e18edab6LinuxCVE List
- 9f1ddfc8cb9076592401a611eb3a44d36186d014LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
nfsd: guard nfsd_serv deref in nfsd_file_net_dispose
nfsd_file_net_dispose() 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 nfsd_file_dispose_list_delayed(). During per-net teardown, nn->nfsd_serv 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 svc_serv:
nfsd service thread loop nfsd_file_net_dispose(nn) if (!list_empty(&l->freeme)) { ... svc_wake_up(nn->nfsd_serv); /* nn->nfsd_serv == NULL */ }
The sibling helper nfsd_file_dispose_list_delayed() already documents this ordering and caches nn->nfsd_serv into a local before testing it for NULL. nfsd_file_net_dispose() was introduced with the same raw svc_wake_up(nn->nfsd_serv) call and never picked up the guard.
Fix by loading nn->nfsd_serv into a local svc_serv pointer and only calling svc_wake_up() when it is non-NULL, matching the pattern in nfsd_file_dispose_list_delayed().
Text from CVE List
Affected versions 10
- Linuxaffected: ffb402596147ac583f3464ff5c48feb9423e3838 before f4776c1c4b38fbc459420321c8ece87d0f7f95fbCVE List
- Linuxaffected: ffb402596147ac583f3464ff5c48feb9423e3838 before 59baf45a06435194005fc5fa9a42d89f77a30432CVE List
- Linuxaffected: ffb402596147ac583f3464ff5c48feb9423e3838 before 766170b4fd2daaf5c4d6735560101474e18edab6CVE List
- Linuxaffected: ffb402596147ac583f3464ff5c48feb9423e3838 before 9f1ddfc8cb9076592401a611eb3a44d36186d014CVE List
- Linuxaffected: 6.9CVE List
- Linuxunaffected: all versions before 6.9CVE List
- Linuxunaffected: 6.12.109 through 6.12.*CVE List
- Linuxunaffected: 6.18.50 through 6.18.*CVE List
- Linuxunaffected: 7.2.4 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 4
- git.kernel.org/stable/c/f4776c1c4b38fbc459420321c8ece87d0f7f95fbReferencevia CVE List
- git.kernel.org/stable/c/59baf45a06435194005fc5fa9a42d89f77a30432Referencevia CVE List
- git.kernel.org/stable/c/766170b4fd2daaf5c4d6735560101474e18edab6Referencevia CVE List
- git.kernel.org/stable/c/9f1ddfc8cb9076592401a611eb3a44d36186d014Referencevia CVE List