samples/kprobes: Add __kprobes and NOKPROBE_SYMBOL() for handlers.
Add __kprobes and NOKPROBE_SYMBOL() for sample kprobe handlers. Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com> Acked-by: Peter Zijlstra <peterz@infradead.org> Link: https://lkml.kernel.org/r/20200505134059.878578033@linutronix.de
This commit is contained in:
committed by
Thomas Gleixner
parent
16db6264c9
commit
d85eaa9411
@@ -25,7 +25,7 @@ static struct kprobe kp = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* kprobe pre_handler: called just before the probed instruction is executed */
|
/* kprobe pre_handler: called just before the probed instruction is executed */
|
||||||
static int handler_pre(struct kprobe *p, struct pt_regs *regs)
|
static int __kprobes handler_pre(struct kprobe *p, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_X86
|
#ifdef CONFIG_X86
|
||||||
pr_info("<%s> pre_handler: p->addr = 0x%p, ip = %lx, flags = 0x%lx\n",
|
pr_info("<%s> pre_handler: p->addr = 0x%p, ip = %lx, flags = 0x%lx\n",
|
||||||
@@ -54,7 +54,7 @@ static int handler_pre(struct kprobe *p, struct pt_regs *regs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* kprobe post_handler: called after the probed instruction is executed */
|
/* kprobe post_handler: called after the probed instruction is executed */
|
||||||
static void handler_post(struct kprobe *p, struct pt_regs *regs,
|
static void __kprobes handler_post(struct kprobe *p, struct pt_regs *regs,
|
||||||
unsigned long flags)
|
unsigned long flags)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_X86
|
#ifdef CONFIG_X86
|
||||||
@@ -90,6 +90,8 @@ static int handler_fault(struct kprobe *p, struct pt_regs *regs, int trapnr)
|
|||||||
/* Return 0 because we don't handle the fault. */
|
/* Return 0 because we don't handle the fault. */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
/* NOKPROBE_SYMBOL() is also available */
|
||||||
|
NOKPROBE_SYMBOL(handler_fault);
|
||||||
|
|
||||||
static int __init kprobe_init(void)
|
static int __init kprobe_init(void)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ static int entry_handler(struct kretprobe_instance *ri, struct pt_regs *regs)
|
|||||||
data->entry_stamp = ktime_get();
|
data->entry_stamp = ktime_get();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
NOKPROBE_SYMBOL(entry_handler);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return-probe handler: Log the return value and duration. Duration may turn
|
* Return-probe handler: Log the return value and duration. Duration may turn
|
||||||
@@ -67,6 +68,7 @@ static int ret_handler(struct kretprobe_instance *ri, struct pt_regs *regs)
|
|||||||
func_name, retval, (long long)delta);
|
func_name, retval, (long long)delta);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
NOKPROBE_SYMBOL(ret_handler);
|
||||||
|
|
||||||
static struct kretprobe my_kretprobe = {
|
static struct kretprobe my_kretprobe = {
|
||||||
.handler = ret_handler,
|
.handler = ret_handler,
|
||||||
|
|||||||
Reference in New Issue
Block a user