aboutsummaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-08-13 13:05:10 -0700
committerThomas Gleixner <tglx@linutronix.de>2009-08-13 23:09:27 +0200
commit2d860ad76f4ee4d2eba0fe3797c8d7cdce432cc0 (patch)
tree928e3a162ce9bf9294afd138f5609cf3b70a747b /init
parentMerge branch 'perfcounters-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip (diff)
downloadlinux-dev-2d860ad76f4ee4d2eba0fe3797c8d7cdce432cc0.tar.xz
linux-dev-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 'init')
0 files changed, 0 insertions, 0 deletions