diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-08-13 22:05:10 +0200 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2009-08-13 23:09:27 +0200 |
commit | 2d860ad76f4ee4d2eba0fe3797c8d7cdce432cc0 (patch) | |
tree | 928e3a162ce9bf9294afd138f5609cf3b70a747b /Makefile | |
parent | Merge branch 'perfcounters-fixes-for-linus' of git://git.kernel.org/pub/scm/l... (diff) | |
download | linux-2d860ad76f4ee4d2eba0fe3797c8d7cdce432cc0.tar.xz linux-2d860ad76f4ee4d2eba0fe3797c8d7cdce432cc0.zip |
genirq: prevent wakeup of freed irq thread
free_irq() can remove an irqaction while the corresponding interrupt
is in progress, but free_irq() sets action->thread to NULL
unconditionally, which might lead to a NULL pointer dereference in
handle_IRQ_event() when the hard interrupt context tries to wake up
the handler thread.
Prevent this by moving the thread stop after synchronize_irq(). No
need to set action->thread to NULL either as action is going to be
freed anyway.
This fixes a boot crash reported against preempt-rt which uses the
mainline irq threads code to implement full irq threading.
[ tglx: removed local irqthread variable ]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to '')
0 files changed, 0 insertions, 0 deletions