]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - virt/kvm/arm/vgic/vgic-its.c
KVM: arm/arm64: vgic-its: Check CBASER/BASER validity before enabling the ITS
[linux.git] / virt / kvm / arm / vgic / vgic-its.c
index 6a715a6ec64e4666bc514a7711a1214703eb5972..e69ef7d27fde9fcb5922f64cbca853f1081ab41e 100644 (file)
@@ -1466,6 +1466,16 @@ static void vgic_mmio_write_its_ctlr(struct kvm *kvm, struct vgic_its *its,
 {
        mutex_lock(&its->cmd_lock);
 
+       /*
+        * It is UNPREDICTABLE to enable the ITS if any of the CBASER or
+        * device/collection BASER are invalid
+        */
+       if (!its->enabled && (val & GITS_CTLR_ENABLE) &&
+               (!(its->baser_device_table & GITS_BASER_VALID) ||
+                !(its->baser_coll_table & GITS_BASER_VALID) ||
+                !(its->cbaser & GITS_CBASER_VALID)))
+               goto out;
+
        its->enabled = !!(val & GITS_CTLR_ENABLE);
 
        /*
@@ -1474,6 +1484,7 @@ static void vgic_mmio_write_its_ctlr(struct kvm *kvm, struct vgic_its *its,
         */
        vgic_its_process_commands(kvm, its);
 
+out:
        mutex_unlock(&its->cmd_lock);
 }