x86: secure ioapic_guest_write() against FREE_TO_ASSIGN irq values
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 19 Nov 2008 16:11:39 +0000 (16:11 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 19 Nov 2008 16:11:39 +0000 (16:11 +0000)
Signed-off-by: Jan Beulich <jbeulich@novell.com>
xen/arch/x86/io_apic.c

index aa21f18104c52c023cc8357499c4a5046186a351..ff208e80af25f6843f20fc68e97ee44946a421d1 100644 (file)
@@ -2196,7 +2196,7 @@ int ioapic_guest_write(unsigned long physbase, unsigned int reg, u32 val)
     if ( new_rte.vector >= FIRST_DYNAMIC_VECTOR )
         new_irq = vector_irq[new_rte.vector];
 
-    if ( (old_irq != new_irq) && (old_irq != -1) && IO_APIC_IRQ(old_irq) )
+    if ( (old_irq != new_irq) && (old_irq >= 0) && IO_APIC_IRQ(old_irq) )
     {
         if ( irq_desc[IO_APIC_VECTOR(old_irq)].action )
         {
@@ -2208,7 +2208,7 @@ int ioapic_guest_write(unsigned long physbase, unsigned int reg, u32 val)
         remove_pin_at_irq(old_irq, apic, pin);
     }
 
-    if ( (new_irq != -1) && IO_APIC_IRQ(new_irq) )
+    if ( (new_irq >= 0) && IO_APIC_IRQ(new_irq) )
     {
         if ( irq_desc[IO_APIC_VECTOR(new_irq)].action )
         {