]> xenbits.xensource.com Git - people/jgross/xen.git/commitdiff
x86/ioapic: Fix fixmap error path logic in ioapic_init_mappings()
authorAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 5 Aug 2020 11:05:27 +0000 (12:05 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 5 Aug 2020 16:35:11 +0000 (17:35 +0100)
In the case that bad_ioapic_register() fails, the current position of idx++
means that clear_fixmap(idx) will be called with the wrong index, and not
clean up the mapping just created.

Increment idx as part of the loop, rather than midway through the loop body.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
xen/arch/x86/io_apic.c

index 878ee5192d2431e0f5f4711f3aeb7ecc8ed4ccc1..e66fa99ec71c0375f3eca57a9014b92e1edf4c5a 100644 (file)
@@ -2543,7 +2543,7 @@ static void __init ioapic_init_mappings(void)
 
     nr_irqs_gsi = 0;
 
-    for ( i = 0; i < nr_ioapics; i++ )
+    for ( i = 0; i < nr_ioapics; i++, idx++ )
     {
         union IO_APIC_reg_01 reg_01;
         paddr_t ioapic_phys = mp_ioapics[i].mpc_apicaddr;
@@ -2560,7 +2560,6 @@ static void __init ioapic_init_mappings(void)
         set_fixmap_nocache(idx, ioapic_phys);
         apic_printk(APIC_VERBOSE, "mapped IOAPIC to %08Lx (%08lx)\n",
                     __fix_to_virt(idx), ioapic_phys);
-        idx++;
 
         if ( bad_ioapic_register(i) )
         {