genirq: Plug race in report_bad_irq()
authorThomas Gleixner <tglx@linutronix.de>
Mon, 7 Feb 2011 08:05:05 +0000 (09:05 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Sat, 19 Feb 2011 11:58:08 +0000 (12:58 +0100)
commit1082687e8d6292a61759eb83358e7db39fed1bf4
tree2a6ba19073820f116050b1730f3e08f97187ddb2
parent2b879eaf095878430c38cbd95e5c0fc4ce65ad8e
genirq: Plug race in report_bad_irq()

We cannot walk the action chain unlocked. Even if IRQ_INPROGRESS is
set an action can be removed and we follow a null pointer. It's safe
to take the lock there, because the code which removes the action will
call synchronize_irq() which waits unlocked for IRQ_INPROGRESS going
away.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
kernel/irq/spurious.c