x86/ioapic: Fix NULL pointer dereference on CPU hotplug after disabling irqs
authorTomoki Sekiyama <tomoki.sekiyama.qu@hitachi.com>
Mon, 28 May 2012 09:09:18 +0000 (18:09 +0900)
committerIngo Molnar <mingo@kernel.org>
Wed, 6 Jun 2012 10:03:25 +0000 (12:03 +0200)
commitf6175f5bfb4c9f2ed32758c95f765b529b1a7f15
tree7c33b47cea87463f4d51f80064b699bafeb2a178
parent55c844a4dd16a4d1fdc0cf2a283ec631a02ec448
x86/ioapic: Fix NULL pointer dereference on CPU hotplug after disabling irqs

In current Linux, percpu variable `vector_irq' is not cleared on
offlined cpus while disabling devices' irqs. If the cpu that has
the disabled irqs in vector_irq is hotplugged,
__setup_vector_irq() hits invalid irq vector and may crash.

This bug can be reproduced as following;

  # echo 0 > /sys/devices/system/cpu/cpu7/online
  # modprobe -r some_driver_using_interrupts      # vector_irq@cpu7 uncleared
  # echo 1 > /sys/devices/system/cpu/cpu7/online  # kernel may crash

This patch fixes this bug by clearing vector_irq in
__clear_irq_vector() even if the cpu is offlined.

Signed-off-by: Tomoki Sekiyama <tomoki.sekiyama.qu@hitachi.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Cc: yrl.pp-manager.tt@hitachi.com
Cc: ltc-kernel@ml.yrl.intra.hitachi.co.jp
Cc: Suresh Siddha <suresh.b.siddha@intel.com>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Alexander Gordeev <agordeev@redhat.com>
Link: http://lkml.kernel.org/r/4FC340BE.7080101@hitachi.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/kernel/apic/io_apic.c