{"id":21589,"date":"2026-09-12T04:31:23","date_gmt":"2026-09-11T20:31:23","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89667"},"modified":"2026-09-12T04:31:23","modified_gmt":"2026-09-11T20:31:23","slug":"cve-2026-89667","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89667","title":{"rendered":"CVE-2026-89667 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnfsd: close shrinker\/"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>nfsd: close shrinker\/GC\/fsnotify vs per-net shutdown race in filecache<\/p>\n<p>The shrinker, GC worker, and fsnotify\/lease callbacks can unhash an<br \/>\nnfsd_file from the rhashtable and then call<br \/>\nnfsd_file_dispose_list_delayed() to move it to the per-net dispose list.<br \/>\nIf nfsd_file_cache_shutdown_net() runs concurrently, its rhashtable walk<br \/>\nmisses the already-unhashed file, and its drain of the per-net dispose<br \/>\nlist can run before the file has been queued.  The file then sits on<br \/>\nthe per-net list with no thread to drain it, leaking both the file and<br \/>\nits associated state.<\/p>\n<p>The GC worker and shrinker already hold nfsd_gc_lock while walking the<br \/>\nLRU, but in the original code they release it before calling<br \/>\nnfsd_file_dispose_list_delayed().  The fsnotify\/lease path<br \/>\n(nfsd_file_close_inode) has no synchronization at all.<\/p>\n<p>Fix this by:<\/p>\n<p>  1. Widening nfsd_gc_lock in both nfsd_file_gc() and nfsd_file_lru_scan()<br \/>\n     to cover the nfsd_file_dispose_list_delayed() call.<\/p>\n<p>  2. Wrapping nfsd_file_close_inode() in nfsd_gc_lock so that all three<br \/>\n     callers of nfsd_file_dispose_list_delayed() hold the lock.<\/p>\n<p>  3. Adding a spin_lock\/unlock(nfsd_gc_lock) barrier in<br \/>\n     nfsd_file_cache_shutdown_net() after the purge, so that any<br \/>\n     in-progress disposal has fully completed before the per-net list<br \/>\n     is drained.<\/p>\n<p>All operations inside the lock are non-sleeping (rhashtable lookups,<br \/>\natomic bit\/refcount ops, list moves, svc_wake_up), so the spinlock is<br \/>\nappropriate.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>nfsd: close shrinker\/GC\/fsnotify vs per-net shutdown race in filecache<\/p>\n<p>The shrinker, GC worker, and fsnotify\/lease callbacks can u<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21589","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21589","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=21589"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21589"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21589"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}