|
@@ -693,7 +693,10 @@ bool kvm_irq_delivery_to_apic_fast(struct kvm *kvm, struct kvm_lapic *src,
|
|
ret = true;
|
|
ret = true;
|
|
|
|
|
|
if (irq->dest_mode == 0) { /* physical mode */
|
|
if (irq->dest_mode == 0) { /* physical mode */
|
|
- dst = &map->phys_map[irq->dest_id & 0xff];
|
|
|
|
|
|
+ if (irq->dest_id >= ARRAY_SIZE(map->phys_map))
|
|
|
|
+ goto out;
|
|
|
|
+
|
|
|
|
+ dst = &map->phys_map[irq->dest_id];
|
|
} else {
|
|
} else {
|
|
u32 mda = irq->dest_id << (32 - map->ldr_bits);
|
|
u32 mda = irq->dest_id << (32 - map->ldr_bits);
|
|
|
|
|