mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-21 19:53:59 +08:00
powerpc/kprobes: Some minor fixes
* Mark __flush_icache_range as a function that can't be probed since its used by the kprobe code. * Fix an issue with single stepping and async exceptions. We need to ensure that we dont get an async exception (external, decrementer, etc) while we are attempting to single step the probe point. Added a check to ensure we only handle a single step if its really intended for the instruction in question. Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
This commit is contained in:
parent
d14b3dd619
commit
b76e59d1fb
@ -95,6 +95,11 @@ void __kprobes arch_remove_kprobe(struct kprobe *p)
|
||||
|
||||
static void __kprobes prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
|
||||
{
|
||||
/* We turn off async exceptions to ensure that the single step will
|
||||
* be for the instruction we have the kprobe on, if we dont its
|
||||
* possible we'd get the single step reported for an exception handler
|
||||
* like Decrementer or External Interrupt */
|
||||
regs->msr &= ~MSR_EE;
|
||||
regs->msr |= MSR_SE;
|
||||
|
||||
/*
|
||||
@ -376,6 +381,10 @@ static int __kprobes post_kprobe_handler(struct pt_regs *regs)
|
||||
if (!cur)
|
||||
return 0;
|
||||
|
||||
/* make sure we got here for instruction we have a kprobe on */
|
||||
if (((unsigned long)cur->ainsn.insn + 4) != regs->nip)
|
||||
return 0;
|
||||
|
||||
if ((kcb->kprobe_status != KPROBE_REENTER) && cur->post_handler) {
|
||||
kcb->kprobe_status = KPROBE_HIT_SSDONE;
|
||||
cur->post_handler(cur, regs, 0);
|
||||
|
@ -489,7 +489,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_UNIFIED_ID_CACHE)
|
||||
*
|
||||
* flush_icache_range(unsigned long start, unsigned long stop)
|
||||
*/
|
||||
_GLOBAL(__flush_icache_range)
|
||||
_KPROBE(__flush_icache_range)
|
||||
BEGIN_FTR_SECTION
|
||||
blr /* for 601, do nothing */
|
||||
END_FTR_SECTION_IFSET(CPU_FTR_COHERENT_ICACHE)
|
||||
|
Loading…
Reference in New Issue
Block a user