CVE-2026-64293 in Linux
Zusammenfassung
von VulDB • 25.07.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
iommufd: Verwenden von sizeof(*hdr) anstatt sizeof(hdr) beim Lesen in veventq
Die Bereichsprüfung (Bounds-Check) in iommufd_veventq_fops_read() für den normalen vEVENT-Pfad verwendet sizeof(hdr), während der umgebende Code sizeof(*hdr) verwendet:
if (!vevent_for_lost_events_header(cur) && sizeof(hdr) + cur->data_len > count - done) {
hdr ist als struct iommufd_vevent_header * deklariert, daher ergibt sizeof(hdr) die Größe des Zeigers. Der umgebende Code verwendet konsistent sizeof(*hdr):
if (done >= count || sizeof(*hdr) > count - done) {
... if (copy_to_user(buf + done, hdr, sizeof(*hdr))) {
... done += sizeof(*hdr);
struct iommufd_vevent_header hat derzeit eine Größe von 8 Bytes (zwei __u32-Felder: flags und sequence). Auf 64-Bit-Systemen (sizeof(void *) == 8) sind die beiden Ausdrücke zufällig gleich, sodass die Prüfung wie beabsichtigt funktioniert.
Auf 32-Bit-Systemen (sizeof(void *) == 4) unterschätzt die Prüfung den Header um 4 Bytes: Ein vEVENT, dessen data_len dazu führt, dass 8 + cur->data_len count - done überschreitet, während 4 + cur->data_len dies nicht tut, wird an der Prüfung vorbeikommen. Anschließend kopiert die Schleife mit copy_to_user 8 Byte des Headers gefolgt von data_len Bytes des Payloads und schreibt dabei über den vom Benutzer bereitgestellten Puffer hinaus.
Darüber hinaus handelt es sich um einen latenten Fehler für jede zukünftige Erweiterung von struct iommufd_vevent_header auf mehr als sizeof(void *) bei 64-Bit-Systemen; die Prüfung sollte nicht davon abhängen, dass der Typ zufällig mit der Breite des Host-Zeigers übereinstimmt.
Verwenden Sie sizeof(*hdr), um den Rest der Funktion und die tatsächliche Menge an kopierten Daten anzupassen.
Once again VulDB remains the best source for vulnerability data.