{"id":21637,"date":"2026-09-12T04:31:27","date_gmt":"2026-09-11T20:31:27","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89715"},"modified":"2026-09-12T04:31:27","modified_gmt":"2026-09-11T20:31:27","slug":"cve-2026-89715","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89715","title":{"rendered":"CVE-2026-89715 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nNFS\/localio: fix ref"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>NFS\/localio: fix ref leak on nfs_uuid_add_file failure<\/p>\n<p>When nfs_uuid_add_file() races with nfs_uuid_put() tearing down<br \/>\nuuid-&gt;net, it returns -ENXIO without publishing nfl-&gt;nfs_uuid via<br \/>\nrcu_assign_pointer().  nfs_open_local_fh() then enters its error<br \/>\nbranch and only releases the slot&#8217;s file ref and its paired net<br \/>\nref plus its own entry-time net ref, while the close path is a<br \/>\nno-op:<\/p>\n<p>    nfs_close_local_fh()<br \/>\n      nfs_uuid = rcu_dereference(nfl-&gt;nfs_uuid);<br \/>\n      if (!nfs_uuid) { rcu_read_unlock(); return; }  \/* always *\/<\/p>\n<p>nfsd_open_local_fh() returns localio holding a caller-owned +1<br \/>\nnfsd_file reference (from nfsd_file_get() after<br \/>\nnfsd_file_acquire_local()) and an entry-time nfsd_net reference<br \/>\n(from its first nfsd_net_try_get()) embedded as nf-&gt;nf_net.  Both<br \/>\nare leaked on the failure path, pinning one nfsd_file (and the<br \/>\nunderlying struct file, dentry, inode) and one nfsd_net_ref per<br \/>\noccurrence, which blocks nfsd_net and netns teardown.<\/p>\n<p>Fix by releasing the caller-owned file ref and its net ref through<br \/>\nthe existing helper, using a stack-local RCU pointer so the helper<br \/>\ncan xchg it out, then returning -ENXIO so callers do not<br \/>\ndereference a localio whose slot has been cleared:<\/p>\n<p>    struct nfsd_file __rcu *tmp = RCU_INITIALIZER(localio);<\/p>\n<p>    nfs_to_nfsd_file_put_local(pnf);<br \/>\n    nfs_to_nfsd_file_put_local(&amp;tmp);<br \/>\n    localio = ERR_PTR(-ENXIO);<\/p>\n<p>The trailing nfs_to_nfsd_net_put(net) continues to release the<br \/>\nouter net ref, so all three nfsd_net_try_get() increments are<br \/>\nbalanced on the error branch.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>NFS\/localio: fix ref leak on nfs_uuid_add_file failure<\/p>\n<p>When nfs_uuid_add_file() races with nfs_uuid_put() tearing down<br \/>\nuuid-&gt;net, <\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21637","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21637","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=21637"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21637"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21637"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}