x86: io-apic - interrupt remapping fix
Interrupt remapping could lead to NULL dereference in case of
kzalloc failed and memory leak in other way. So fix the
both cases.
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: "Maciej W. Rozycki" <macro@linux-mips.org>
Cc: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
diff --git a/arch/x86/kernel/apic.c b/arch/x86/kernel/apic.c
index 7841169..1f48bd1 100644
--- a/arch/x86/kernel/apic.c
+++ b/arch/x86/kernel/apic.c
@@ -1360,7 +1360,12 @@
local_irq_save(flags);
mask_8259A();
- save_mask_IO_APIC_setup();
+
+ ret = save_mask_IO_APIC_setup();
+ if (ret) {
+ printk(KERN_INFO "Saving IO-APIC state failed: %d\n", ret);
+ goto end;
+ }
ret = enable_intr_remapping(1);
@@ -1370,14 +1375,15 @@
}
if (ret)
- goto end;
+ goto end_restore;
if (!x2apic) {
x2apic = 1;
apic_ops = &x2apic_ops;
enable_x2apic();
}
-end:
+
+end_restore:
if (ret)
/*
* IR enabling failed
@@ -1386,6 +1392,7 @@
else
reinit_intr_remapped_IO_APIC(x2apic_preenabled);
+end:
unmask_8259A();
local_irq_restore(flags);