{"id":21586,"date":"2026-09-12T04:31:23","date_gmt":"2026-09-11T20:31:23","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89664"},"modified":"2026-09-12T04:31:23","modified_gmt":"2026-09-11T20:31:23","slug":"cve-2026-89664","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89664","title":{"rendered":"CVE-2026-89664 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnfsd: release OPEN-de"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>nfsd: release OPEN-decoded posix ACLs via op_release<\/p>\n<p>nfsd4_decode_createhow4() calls nfsd4_decode_fattr4(), which allocates<br \/>\nrefcounted struct posix_acl objects via posix_acl_alloc() and stores<br \/>\nthem in open-&gt;op_pacl and open-&gt;op_dpacl. These pointers must be<br \/>\nreleased once the OPEN compound finishes.<\/p>\n<p>When nfsd4_decode_open_claim4() returns a non-seqid-mutating error,<br \/>\nthe dispatcher short-circuits before op_func runs:<\/p>\n<p>    nfsd4_proc_compound()<br \/>\n      if (op-&gt;status &amp;&amp; op-&gt;opnum == OP_OPEN)<br \/>\n          op-&gt;status = nfsd4_open_omfg(&#8230;)<br \/>\n              if (!seqid_mutating_err(ntohl(op-&gt;status)))<br \/>\n                  return op-&gt;status;   \/* nfsd4_open() never runs *\/<br \/>\n      &#8230;<br \/>\n      opdesc-&gt;op_release(&amp;op-&gt;u)  \/* must still release op_pacl\/op_dpacl *\/<\/p>\n<p>Before this change OP_OPEN had no .op_release in nfsd4_ops[], and the<br \/>\nrelease pair lived inside nfsd4_open() at its out_err: label. On the<br \/>\nshort-circuit path nfsd4_open() is never invoked, so both posix_acl<br \/>\nrefs leak on every malformed OPEN compound that carries valid POSIX<br \/>\nACL createhow4 attributes.<\/p>\n<p>Add nfsd4_open_release() and wire it as .op_release for OP_OPEN.<br \/>\nposix_acl_release() is NULL-safe, so the single release site covers<br \/>\nboth the normal path and the nfsd4_open_omfg short-circuit. Remove<br \/>\nthe matching posix_acl_release() pair from nfsd4_open()&#8217;s out_err:<br \/>\nlabel to avoid double-releasing.<\/p>\n<p>The compound loop has two encoding branches: nfsd4_encode_operation()<br \/>\nfor normal ops, and nfsd4_encode_replay() for v4.0 replayed ops.<br \/>\nop_release was only called from nfsd4_encode_operation(), so resources<br \/>\nattached to op-&gt;u leak on the replay path.<\/p>\n<p>Move the op_release() call out of nfsd4_encode_operation() and the<br \/>\nreplay branch, placing it after the if-else in nfsd4_proc_compound().<br \/>\nThis gives a single call site in a fairly obviously-correct place,<br \/>\ncovering both the normal encoding and replay paths.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>nfsd: release OPEN-decoded posix ACLs via op_release<\/p>\n<p>nfsd4_decode_createhow4() calls nfsd4_decode_fattr4(), which allocates<br \/>\nrefcou<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21586","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21586","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=21586"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21586"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21586"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}