{"id":24696,"date":"2026-09-16T20:32:39","date_gmt":"2026-09-16T12:32:39","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90008"},"modified":"2026-09-16T20:32:39","modified_gmt":"2026-09-16T12:32:39","slug":"cve-2026-90008","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90008","title":{"rendered":"CVE-2026-90008 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nscsi: megaraid_sas: L"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>scsi: megaraid_sas: Limit NVMe request size to the PRP chain frame<\/p>\n<p>megasas_make_prp_nvme() builds a command&#8217;s PRP list in cmd-&gt;sg_frame, a<br \/>\nDMA pool buffer of instance-&gt;max_chain_frame_sz bytes, spending one<br \/>\nentry per NVMe page of the transfer plus one per page of the buffer for<br \/>\nthe chain pointer. The loop runs until the transfer is described and<br \/>\nnever checks the buffer bound.<\/p>\n<p>max_hw_sectors comes straight from the MDTS the firmware reports for the<br \/>\ndrive. On drives with a large MDTS the only thing keeping the list<br \/>\ninside the buffer was the block layer default of 1280 KiB, which needs<br \/>\n320 entries, which fit into a 4 KiB frame as that holds 512. But since<br \/>\ncommit 9b8b84879d4a (&#8220;block: Increase BLK_DEF_MAX_SECTORS_CAP&#8221;) that<br \/>\ndefault is 4 MiB, and such a transfer needs 1025 entries, so the list<br \/>\nruns a full page past the end of the frame:<\/p>\n<p>  sd 1:0:1:0: [sdb] tag#630 page boundary ptr_sgl: 0x00000000ba62d13f<br \/>\n  BUG: unable to handle page fault for address: ff663bcb81e7c000<br \/>\n  #PF: supervisor write access in kernel mode<br \/>\n  #PF: error_code(0x0002) &#8211; not-present page<br \/>\n  RIP: 0010:megasas_build_and_issue_cmd_fusion+0xeaa\/0x1870 [megaraid_sas]<\/p>\n<p>If the page after the frame happens to be mapped, the overrun does not<br \/>\nfault but silently corrupts the neighbouring pool entry, which is<br \/>\nanother in-flight command&#8217;s PRP list.<\/p>\n<p>Cap max_hw_sectors at what the chain frame can describe, less one page<br \/>\nfor transfers that do not start on a page boundary and so need one entry<br \/>\nmore. This is the megaraid_sas counterpart of commit 04631f55afc5<br \/>\n(&#8220;scsi: mpt3sas: Limit NVMe request size to 2 MiB&#8221;), but derives the<br \/>\nlimit from max_chain_frame_sz rather than hardcoding it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>scsi: megaraid_sas: Limit NVMe request size to the PRP chain frame<\/p>\n<p>megasas_make_prp_nvme() builds a command&#8217;s PRP list in cmd-&gt;sg_<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-24696","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/24696","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=24696"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=24696"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=24696"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}