From: Andrew Cooper Date: Wed, 5 Aug 2020 11:05:27 +0000 (+0100) Subject: x86/ioapic: Fix fixmap error path logic in ioapic_init_mappings() X-Git-Tag: 4.15.0-rc1~934 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=b4175c6693e089ffcd77cd1ea388e76e67d36d57;p=people%2Fjgross%2Fxen.git x86/ioapic: Fix fixmap error path logic in ioapic_init_mappings() 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 Reviewed-by: Jan Beulich --- diff --git a/xen/arch/x86/io_apic.c b/xen/arch/x86/io_apic.c index 878ee5192d..e66fa99ec7 100644 --- a/xen/arch/x86/io_apic.c +++ b/xen/arch/x86/io_apic.c @@ -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) ) {