Re: [PATCH] powerpc/kprobes: Fix call trace due to incorrect preempt count
From: Naveen N. Rao <hidden>
Date: 2018-01-19 11:37:45
Michael Ellerman wrote:
Ananth N Mavinakayanahalli [off-list ref] writes: =20quoted
On Wed, Jan 17, 2018 at 05:52:24PM +0530, Naveen N. Rao wrote:quoted
Michael Ellerman reported the following call trace when running ftracetest: =20 BUG: using __this_cpu_write() in preemptible [00000000] code: ftracetes=
t/6178
quoted
quoted
caller is opt_pre_handler+0xc4/0x110 CPU: 1 PID: 6178 Comm: ftracetest Not tainted 4.15.0-rc7-gcc6x-gb2cd1df=
#1
quoted
quoted
Call Trace: [c0000000f9ec39c0] [c000000000ac4304] dump_stack+0xb4/0x100 (unreliable=
)
quoted
quoted
[c0000000f9ec3a00] [c00000000061159c] check_preemption_disabled+0x15c/0=
x170
quoted
quoted
[c0000000f9ec3a90] [c000000000217e84] opt_pre_handler+0xc4/0x110 [c0000000f9ec3af0] [c00000000004cf68] optimized_callback+0x148/0x170 [c0000000f9ec3b40] [c00000000004d954] optinsn_slot+0xec/0x10000 [c0000000f9ec3e30] [c00000000004bae0] kretprobe_trampoline+0x0/0x10 =20 This is showing up since OPTPROBES is now enabled with CONFIG_PREEMPT. =20 trampoline_probe_handler() considers itself to be a special kprobe handler for kretprobes. In doing so, it expects to be called from kprobe_handler() on a trap, and re-enables preemption before returning =
a
quoted
quoted
non-zero return value so as to suppress any subsequent processing of th=
e
quoted
quoted
trap by the kprobe_handler(). =20 However, with optprobes, we don't deal with special handlers (we ignore the return code) and just try to re-enable preemption causing the above trace. =20 To address this, modify trampoline_probe_handler() to not be special. The only additional processing done in kprobe_handler() is to emulate the instruction (in this case, a 'nop'). We adjust the value of regs->nip for the purpose and delegate the job of re-enabling preemption and resetting current kprobe to the probe handlers (kprobe_handler() or optimized_callback()). =20 Reported-by: Michael Ellerman <mpe@ellerman.id.au> Signed-off-by: Naveen N. Rao <redacted>Acked-by: Ananth N Mavinakayanahalli <redacted>=20 Fixes: 51c9c0843993 ("powerpc/kprobes: Implement Optprobes")
Fixes: 8a2d71a3f2737e ("powerpc/kprobes: Disable preemption before=20
invoking probe handler for optprobes")
I think this is more appropriate. I should have caught this issue with=20
kretprobes, but I am fairly certain that I ran ftracetest at that point,
but didn't see any call traces.
Regards,
Naveen
=