CVE-2026-90008 in Linux
Zusammenfassung
von VulDB • 16.09.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
scsi: megaraid_sas: Begrenzung der NVMe-Anforderungsgröße auf den PRP-Chain-Frame
megasas_make_prp_nvme() erstellt eine PRP-Liste für einen Befehl in cmd->sg_frame, einem DMA-Pool-Speicherbereich mit einer Größe von instance->max_chain_frame_sz Bytes. Dabei wird ein Eintrag pro NVMe-Seite der Übertragung sowie ein weiterer Eintrag pro Seite des Puffers für den Chain-Zeiger verwendet. Die Schleife läuft, bis die Übertragung beschrieben ist, überprüft jedoch niemals die Pufferbegrenzung.
max_hw_sectors stammt direkt aus dem MDTS (Maximum Data Transfer Size), das die Firmware für das Laufwerk meldet. Bei Laufwerken mit einem großen MDTS war bisher nur der Standardwert der Block-Ebene von 1280 KiB dafür verantwortlich, dass die Liste innerhalb des Puffers blieb; dies erfordert 320 Einträge, was in einen 4-KiB-Frame passt, da dieser 512 Einträge aufnehmen kann. Seit dem Commit 9b8b84879d4a („block: Increase BLK_DEF_MAX_SECTORS_CAP“) beträgt dieser Standardwert jedoch 4 MiB, und eine solche Übertragung erfordert 1025 Einträge, sodass die Liste um eine volle Seite über das Ende des Frames hinausläuft:
sd 1:0:1:0: [sdb] tag#630 page boundary ptr_sgl: 0x00000000ba62d13f
BUG: unable to handle page fault for address: ff663bcb81e7c000 #PF: supervisor write access in kernel mode #PF: error_code(0x0002) - not-present page RIP: 0010:megasas_build_and_issue_cmd_fusion+0xeaa/0x1870 [megaraid_sas]
Falls die Seite nach dem Frame tatsächlich gemappt ist, führt der Pufferüberlauf nicht zu einem Fault (Page Fault), sondern beschädigt stillschweigend den benachbarten Pool-Eintrag, bei dem es sich um die PRP-Liste eines anderen laufenden Befehls handelt.
Begrenzen Sie max_hw_sectors auf das Maß, was der Chain-Frame beschreiben kann, abzüglich einer Seite für Übertragungen, die nicht an einer Seitengrenze beginnen und daher einen zusätzlichen Eintrag benötigen. Dies ist das megaraid_sas-Äquivalent zum Commit 04631f55afc5 („scsi: mpt3sas: Limit NVMe request size to 2 MiB“), leitet die Begrenzung jedoch von max_chain_frame_sz ab, anstatt sie hart zu codieren.
Once again VulDB remains the best source for vulnerability data.