{"id":21464,"date":"2026-09-12T04:31:13","date_gmt":"2026-09-11T20:31:13","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89542"},"modified":"2026-09-12T04:31:13","modified_gmt":"2026-09-11T20:31:13","slug":"cve-2026-89542","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89542","title":{"rendered":"CVE-2026-89542 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nSUNRPC: harden gss_kr"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>SUNRPC: harden gss_krb5_unwrap_v2 against short tokens<\/p>\n<p>gss_krb5_unwrap_v2() reads the EC and RRC header fields at ptr+4 and<br \/>\nptr+6 before validating that the token is at least GSS_KRB5_TOK_HDR_LEN<br \/>\n(16) bytes long, and its rotate_left() helper passes buf-&gt;len &#8211; base<br \/>\nto xdr_buf_subsegment() without verifying that base len. When<br \/>\na caller hands in a sub-16-byte token, or a token whose declared len<br \/>\nleaves base past the end of the buffer, three distinct failures follow:<\/p>\n<p>    gss_krb5_unwrap_v2(offset, len, buf)<br \/>\n      ptr = buf-&gt;head[0].iov_base + offset<br \/>\n      ec  = *(ptr + 4)              \/* OOB read on short head *\/<br \/>\n      rrc = *(ptr + 6)              \/* OOB read on short head *\/<br \/>\n      rotate_left(offset + 16, buf, rrc)<br \/>\n        xdr_buf_subsegment(buf, &amp;subbuf,<br \/>\n                           base, buf-&gt;len &#8211; base)   \/* u32 wrap when base &gt; len *\/<br \/>\n        _rotate_left(&amp;subbuf, shift)<br \/>\n          shift %= buf-&gt;len         \/* divide-by-zero when base == len *\/<\/p>\n<p>After decryption, the cleanup arithmetic has the same shape:<\/p>\n<p>    movelen = min_t(unsigned int, buf-&gt;head[0].iov_len, len);<br \/>\n    movelen -= offset + GSS_KRB5_TOK_HDR_LEN + headskip;<br \/>\n    BUG_ON(offset + GSS_KRB5_TOK_HDR_LEN + headskip + movelen &gt;<br \/>\n                                            buf-&gt;head[0].iov_len);<\/p>\n<p>The BUG_ON re-adds the value just subtracted, so it reduces to<br \/>\nmin(A, B) &gt; A and is permanently false; it cannot catch the unsigned<br \/>\nunderflow of movelen, which then drives a ~UINT_MAX-byte memmove().<\/p>\n<p>Add four defense-in-depth guards inside the unwrap core so it is safe<br \/>\nregardless of what its callers validate:<\/p>\n<p>  &#8211; reject tokens with len &#8211; offset len len is zero, so the<br \/>\n    shift %= buf-&gt;len modulo cannot fault;<br \/>\n  &#8211; replace the dead BUG_ON with a live check that returns<br \/>\n    GSS_S_DEFECTIVE_TOKEN before the movelen subtraction.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>SUNRPC: harden gss_krb5_unwrap_v2 against short tokens<\/p>\n<p>gss_krb5_unwrap_v2() reads the EC and RRC header fields at ptr+4 and<br \/>\nptr+6 <\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21464","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21464","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=21464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}