ARM: 5715/1: Make kprobes unregistration SMP safe
authorFrederic Riss <frederic.riss@gmail.com>
Mon, 21 Sep 2009 07:43:30 +0000 (08:43 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 21 Sep 2009 15:39:12 +0000 (16:39 +0100)
commit2003b7af259611312ea132da1f5006ae0b8e47d7
tree57287ad7863f5d67b40ce7202f3159dfac17aea9
parentdf297bf6c7933e7b021cdc1bf3f9e319ea3a7e9c
ARM: 5715/1: Make kprobes unregistration SMP safe

ARM kprobes use an illegal instruction to trigger kprobes. In the
current implementation, there's a race between the unregistration of a
kprobe and the illegal instruction exception handler if they run at the
same time on different cores.

When reading the value of the undefined instruction, the exception
handler might get the original legal instruction as just patched
concurrently by arch_disarm_kprobe(). When this happen the kprobe
handler won't run, and thus the exception handler will oops because it
believe it just hit an undefined instruction in kernel space.

The following patch synchronizes the code patching in the kprobes
unregistration using stop_machine and thus avoids the above race.

Signed-off-by: Frederic RISS <frederic.riss@gmail.com>
Acked-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/kernel/kprobes.c