Skip to content

Commit

Permalink
KVM: properly check max PIC pin in irq route setup
Browse files Browse the repository at this point in the history
Otherwise memory beyond irq_states[16] might be accessed.

Noticed by Juan Quintela.

Cc: [email protected]
Signed-off-by: Marcelo Tosatti <[email protected]>
Acked-by: Juan Quintela <[email protected]>
Signed-off-by: Avi Kivity <[email protected]>
  • Loading branch information
matosatti committed Jan 25, 2010
1 parent f1d1c30 commit d72118c
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion virt/kvm/irq_comm.c
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,7 @@ static int setup_routing_entry(struct kvm_irq_routing_table *rt,
{
int r = -EINVAL;
int delta;
unsigned max_pin;
struct kvm_kernel_irq_routing_entry *ei;
struct hlist_node *n;

Expand All @@ -322,20 +323,23 @@ static int setup_routing_entry(struct kvm_irq_routing_table *rt,
switch (ue->u.irqchip.irqchip) {
case KVM_IRQCHIP_PIC_MASTER:
e->set = kvm_set_pic_irq;
max_pin = 16;
break;
case KVM_IRQCHIP_PIC_SLAVE:
e->set = kvm_set_pic_irq;
max_pin = 16;
delta = 8;
break;
case KVM_IRQCHIP_IOAPIC:
max_pin = KVM_IOAPIC_NUM_PINS;
e->set = kvm_set_ioapic_irq;
break;
default:
goto out;
}
e->irqchip.irqchip = ue->u.irqchip.irqchip;
e->irqchip.pin = ue->u.irqchip.pin + delta;
if (e->irqchip.pin >= KVM_IOAPIC_NUM_PINS)
if (e->irqchip.pin >= max_pin)
goto out;
rt->chip[ue->u.irqchip.irqchip][e->irqchip.pin] = ue->gsi;
break;
Expand Down

0 comments on commit d72118c

Please sign in to comment.