Commit 1e801f3a authored by Werner Pawlitschko's avatar Werner Pawlitschko Committed by Greg Kroah-Hartman

x86/ioapic: Prevent NULL pointer dereference in setup_ioapic_dest()

commit ababae44 upstream.

Commit 4857c91f changed the way how irq affinity is setup in
setup_ioapic_dest() from using the core helper function to
unconditionally calling the irq_set_affinity() callback of the
underlying irq chip.

That results in a NULL pointer dereference for the rare case where the
underlying irq chip is lapic_chip which has no irq_set_affinity()
callback. lapic_chip is occasionally used for the timer interrupt (irq
0).

The fix is simple: Check the availability of the callback instead of
calling it unconditionally.

Fixes: 4857c91f "x86/ioapic: Force affinity setting in setup_ioapic_dest()"
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent f0747610
...@@ -2547,7 +2547,9 @@ void __init setup_ioapic_dest(void) ...@@ -2547,7 +2547,9 @@ void __init setup_ioapic_dest(void)
mask = apic->target_cpus(); mask = apic->target_cpus();
chip = irq_data_get_irq_chip(idata); chip = irq_data_get_irq_chip(idata);
chip->irq_set_affinity(idata, mask, false); /* Might be lapic_chip for irq 0 */
if (chip->irq_set_affinity)
chip->irq_set_affinity(idata, mask, false);
} }
} }
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment