{"id":25660,"date":"2026-09-18T04:31:42","date_gmt":"2026-09-17T20:31:42","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90251"},"modified":"2026-09-18T04:31:42","modified_gmt":"2026-09-17T20:31:42","slug":"cve-2026-90251","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90251","title":{"rendered":"CVE-2026-90251 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nBluetooth: MSFT: vali"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>Bluetooth: MSFT: validate evt_prefix_len against the response length<\/p>\n<p>read_supported_features() only checks that the response covers the fixed<br \/>\npart of struct msft_rp_read_supported_features, which is 11 bytes:<\/p>\n<p>\tif (skb-&gt;len evt_prefix_len is an<br \/>\nunvalidated u8 taken straight out of that response, so<\/p>\n<p>\tmsft-&gt;evt_prefix = kmemdup(rp-&gt;evt_prefix, rp-&gt;evt_prefix_len,<br \/>\n\t\t\t\t   GFP_KERNEL);<\/p>\n<p>copies up to 255 bytes from a reply that may have carried none of them.<br \/>\nWhat is copied is data the controller never sent, and it is then used to<br \/>\nmatch incoming vendor events in msft_vendor_evt().<\/p>\n<p>This is not an out-of-bounds access. An skb data allocation always has<br \/>\nat least SKB_DATA_ALIGN(sizeof(struct skb_shared_info)) bytes past the<br \/>\npayload, which is more than the 255 byte maximum, so the read stays<br \/>\ninside the allocation and KASAN does not report it. It is still a read<br \/>\nof bytes the host was never given, with the length fully controlled by<br \/>\nthe controller.<\/p>\n<p>Reject a response that is too short for the prefix it declares.<\/p>\n<p>Verified with an emulated controller over \/dev\/vhci on a KASAN kernel,<br \/>\nwith vhci made to advertise an MSFT opcode the way btintel, btqca, btmtk<br \/>\nand btrtl do unconditionally. A reply of exactly 11 bytes declaring<br \/>\nevt_prefix_len = 255 reaches kmemdup and copies 255 bytes<br \/>\n(&#8220;skb-&gt;len=11 evt_prefix_len=255&#8221;, with the copied buffer dumped); since<br \/>\nthe reply ends at the fixed part, all 255 come from past the end of the<br \/>\nresponse. No KASAN report is produced, as expected from the allocation<br \/>\nslack described above. With this patch the response is rejected with<br \/>\n&#8220;MSFT event prefix length mismatch&#8221; and msft-&gt;evt_prefix is left unset.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>Bluetooth: MSFT: validate evt_prefix_len against the response length<\/p>\n<p>read_supported_features() only checks that the response cover<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-25660","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/25660","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=25660"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25660"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25660"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}