{"id":21592,"date":"2026-09-12T04:31:23","date_gmt":"2026-09-11T20:31:23","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89670"},"modified":"2026-09-12T04:31:23","modified_gmt":"2026-09-11T20:31:23","slug":"cve-2026-89670","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89670","title":{"rendered":"CVE-2026-89670 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnfsd: hold rcu across"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>nfsd: hold rcu across localio cmpxchg retry<\/p>\n<p>nfsd_file objects are freed via call_rcu (filecache.c:296), and<br \/>\nnfsd_file_slab is created without SLAB_TYPESAFE_BY_RCU<br \/>\n(KMEM_CACHE(nfsd_file, 0) at filecache.c:789), so the slab page<br \/>\nbacking a freed nfsd_file becomes freely reclaimable once the RCU<br \/>\ngrace period elapses.<\/p>\n<p>The again: retry block in nfsd_open_local_fh() loads a pointer with<br \/>\ncmpxchg and then calls nfsd_file_get(new) (which is<br \/>\nrefcount_inc_not_zero) without holding rcu_read_lock. The sole caller<br \/>\nnfs_open_local_fh() drops rcu_read_lock before invoking this helper,<br \/>\nso no outer reader-side critical section covers the load.<\/p>\n<p>    CPU 0 (nfsd_open_local_fh)        CPU 1 (nfsd_file_put_local)<br \/>\n    &#8212;&#8211;                             &#8212;&#8211;<br \/>\n    new = cmpxchg(pnf, NULL, &#8230;)<br \/>\n                                      nf = xchg(pnf, NULL)<br \/>\n                                      nfsd_file_put(nf)<br \/>\n                                        last ref -&gt; call_rcu()<br \/>\n                                      \/* grace period elapses;<br \/>\n                                         slab page recycled *\/<br \/>\n    nfsd_file_get(new)<br \/>\n      refcount_inc_not_zero(&amp;new-&gt;nf_ref)<br \/>\n      \/* operates on recycled memory *\/<\/p>\n<p>A non-zero word at the nf_ref offset of the recycled object makes the<br \/>\nrefcount bump appear to succeed, and the caller then dereferences<br \/>\nnew-&gt;nf_net and new-&gt;nf_file out of freed memory.<\/p>\n<p>Fix by taking rcu_read_lock() immediately before the cmpxchg and<br \/>\nreleasing it on all three exits of the if (new) block: the goto-again<br \/>\nretry, the lost-race cleanup path, and the install-succeeded path.<br \/>\nnfsd_file_put() and nfsd_net_put() stay outside the RCU section so<br \/>\nthey remain free to block.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>nfsd: hold rcu across localio cmpxchg retry<\/p>\n<p>nfsd_file objects are freed via call_rcu (filecache.c:296), and<br \/>\nnfsd_file_slab is crea<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21592","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21592","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=21592"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21592"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21592"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}