CVE-2026-89912: KVM: arm64: vgic-its: Don't dereference a NULL collection on ITT save
In the Linux kernel, the following vulnerability has been resolved:
KVM: arm64: vgic-its: Don't dereference a NULL collection on ITT save
MAPC with V=0 drops ite->collection but leaves the ITE on the device's ITT list, and vgicitssaveite() dereferences it unconditionally. A guest that issues MAPD, MAPTI and then MAPC(V=0) therefore oopses the host when the VMM issues KVMDEVARMITSSAVETABLES to migrate it. That sequence is UNPREDICTABLE per the architecture, but KVM already handles the resulting state in the translate, MOVI and DISCARD paths.
Save a zeroed entry, which vgicitsrestoreite() reads back as invalid. Skipping the ITE instead would leave the ITT slot holding whatever is in guest memory, and restore rejects an entry naming a collection the restored collection table does not have.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Compensating control
If you have a guest/workload that can issue MAPD, MAPTI, and then MAPC with V=0, treat it as risky until KVM arm64 vgic-its is fixed, since that sequence can trigger a host oops.
Event History
Frequently Asked Questions
Which environments are exposed to this issue?
The issue affects arm64 KVM environments using the virtual GIC Interrupt Translation Service (vgic-its) when the VMM saves ITS tables for migration via KVM_DEV_ARM_ITS_SAVE_TABLES. It is triggered by state associated with a guest device's interrupt translation table.
What guest activity is required to trigger the host failure?
A guest must issue MAPD, MAPTI, and then MAPC with V=0. This drops the ITE collection while leaving the ITE on the device ITT list; a subsequent ITS-table save dereferences the missing collection and can oops the host.
How can an administrator recognize that this issue has occurred?
The observable result is a host oops when the VMM attempts to save ITS tables for migration after the affected guest command sequence. The triggering command sequence is architecturally UNPREDICTABLE, although KVM handles the resulting state in several other paths.