CVE-2026-89913 in Linux
Zusammenfassung
von VulDB • 16.09.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
KVM: arm64: vgic-v3: Eine LPI-Referenz in vgic_v3_save_pending_tables anfordern
vgic_v3_save_pending_tables() durchläuft dist->lpi_xa mit xa_for_each() und dereferenziert das im Schleifenkörper zurückgegebene struct vgic_irq, ohne eine Referenz auf die LPI zu halten.
Der xarray-Iterator bietet nur eine temporäre RCU-Abdeckung während der Suche nach dem aktuellen Eintrag. Dies ist für diesen Schleifenkörper nicht ausreichend, da er Felder aus struct vgic_irq liest und Gast-Speicherzugriffe durchführt, bevor die Iteration abgeschlossen ist.
Ein paralleler Pfad kann diese Race Condition auslösen: Der zwischengespeicherte Injektionspfad von irqfd (vgic_its_inject_cached_translation) erhält eine vorübergehende LPI-Referenz über vgic_its_check_cache(), ohne kvm->lock, vcpu->mutex, config_lock oder its_lock zu halten. Wenn die Gast-ITS den Cache und ITE-Referenzen unter its_lock verwirft (DISCARD), kann die vorübergehende Injektionsreferenz zur letzten verbleibenden Referenz werden. Wenn vgic_put_irq() diese entfernt, wird die LPI aus lpi_xa gelöscht und über kfree_rcu() freigegeben. Währenddessen könnte vgic_v3_save_pending_tables() weiterhin einen veralteten Zeiger halten, der vom xarray-Iterator stammt, und diesen nach Ablauf der RCU-Gnadenfrist dereferenzieren.
Beheben Sie dies, indem jede iterierte LPI über vgic_get_irq() erneut abgerufen wird, was eine stabile Referenz anfordert, und diese mit vgic_put_irq() auf allen Pfaden freigegeben wird. Dies entspricht dem Muster, das bereits von anderen lpi_xa-Iteratoren im vgic-ITS-Code verwendet wird.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.