{"id":21612,"date":"2026-09-12T04:31:25","date_gmt":"2026-09-11T20:31:25","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89690"},"modified":"2026-09-12T04:31:25","modified_gmt":"2026-09-11T20:31:25","slug":"cve-2026-89690","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89690","title":{"rendered":"CVE-2026-89690 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnfsd: defer vfree of"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>nfsd: defer vfree of compound ops to fix rpc_status UAF<\/p>\n<p>The rpc_status netlink dumpit walks every in-flight svc_rqst under<br \/>\nrcu_read_lock and, for NFSv4 requests, reads opnums out of<br \/>\nargs-&gt;ops[]. But args-&gt;ops is a separate vmalloc buffer freed<br \/>\nsynchronously by vfree() in nfsd4_release_compoundargs() at the end<br \/>\nof every compound. The dumpit&#8217;s rcu_read_lock pins the svc_rqst<br \/>\nstruct itself (freed via kfree_rcu), but nothing defers the vfree<br \/>\nof the ops buffer across the RCU grace period. A concurrent compound<br \/>\ncompletion can therefore free the buffer while the dumpit is reading<br \/>\nit \u2014 a use-after-free on vmalloc memory.<\/p>\n<p>The trailing seqcount recheck (smp_load_acquire of rq_status_counter)<br \/>\ncannot undo a load that already retired against freed memory.<\/p>\n<p>Fix by replacing vfree(args-&gt;ops) with kvfree_rcu_mightsleep(), which<br \/>\ndefers the free until after an RCU grace period. This makes the<br \/>\nexisting rcu_read_lock in the dumpit sufficient to protect the read.<br \/>\nThe tradeoff is that completed compound ops buffers (up to<br \/>\n200 * sizeof(struct nfsd4_op)) persist in memory slightly longer,<br \/>\nacross one grace period, before being reclaimed.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>nfsd: defer vfree of compound ops to fix rpc_status UAF<\/p>\n<p>The rpc_status netlink dumpit walks every in-flight svc_rqst under<br \/>\nrcu_rea<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21612","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21612","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=21612"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21612"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21612"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}