{"id":21617,"date":"2026-09-12T04:31:25","date_gmt":"2026-09-11T20:31:25","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89695"},"modified":"2026-09-12T04:31:25","modified_gmt":"2026-09-11T20:31:25","slug":"cve-2026-89695","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89695","title":{"rendered":"CVE-2026-89695 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnfsd: cap decoded POS"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>nfsd: cap decoded POSIX ACL count to bound sort cost<\/p>\n<p>nfsd4_decode_posixacl() reads a u32 entry count off the wire and passes<br \/>\nit straight to posix_acl_alloc() and sort_pacl_range(). The latter is<br \/>\nan O(n^2) bubble sort, so a client-chosen count drives unbounded CPU in<br \/>\nthe server&#8217;s compound processing path.<\/p>\n<p>    nfsd4_decode_posixacl()<br \/>\n      xdr_stream_decode_u32(&amp;count)       \/* uncapped u32 *\/<br \/>\n      posix_acl_alloc(count, GFP_KERNEL)<br \/>\n      sort_pacl_range(*acl, 0, count &#8211; 1) \/* O(n^2) bubble sort *\/<\/p>\n<p>The encoder side in the same file already rejects ACLs whose a_count<br \/>\nexceeds NFS_ACL_MAX_ENTRIES, but the decoder introduced in commit<br \/>\n5fc51dfc2eb1 (&#8220;NFSD: Add support for XDR decoding POSIX draft ACLs&#8221;)<br \/>\nomitted the symmetric check.<\/p>\n<p>Fix by rejecting a wire count greater than NFS_ACL_MAX_ENTRIES with<br \/>\nnfserr_inval, before any allocation, so the sort is bounded by<br \/>\nNFS_ACL_MAX_ENTRIES^2 comparisons.<\/p>\n<p>While we&#8217;re in here, also fix the nfserr_resource return if<br \/>\nposix_acl_alloc() fails. That&#8217;s not a legal error code for v4.1+. Change<br \/>\nit to return nfserr_jukebox as that&#8217;s more appropriate for memory<br \/>\nallocation failures.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>nfsd: cap decoded POSIX ACL count to bound sort cost<\/p>\n<p>nfsd4_decode_posixacl() reads a u32 entry count off the wire and passes<br \/>\nit st<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21617","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21617","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=21617"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21617"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21617"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}