diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2014-10-15 06:17:34 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2014-10-27 08:27:27 -0400 |
commit | f7f242ff004499e0904d3664713dfba01f24c408 (patch) | |
tree | 3702692fcc3e0c44ecc2a8f4dd8a8434268b09c6 /kernel | |
parent | 3ac8e38015d4fd1c12e4e048a01a9f059a2053a2 (diff) |
kprobes: introduce weak arch_check_ftrace_location() helper function
Introduce weak arch_check_ftrace_location() helper function which
architectures can override in order to implement handling of kprobes
on function tracer call sites on their own, without depending on
common code or implementing the KPROBES_ON_FTRACE feature.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Acked-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/kprobes.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/kernel/kprobes.c b/kernel/kprobes.c index 3995f546d0f3..317eb8ad28dd 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c | |||
@@ -1410,16 +1410,10 @@ static inline int check_kprobe_rereg(struct kprobe *p) | |||
1410 | return ret; | 1410 | return ret; |
1411 | } | 1411 | } |
1412 | 1412 | ||
1413 | static int check_kprobe_address_safe(struct kprobe *p, | 1413 | int __weak arch_check_ftrace_location(struct kprobe *p) |
1414 | struct module **probed_mod) | ||
1415 | { | 1414 | { |
1416 | int ret = 0; | ||
1417 | unsigned long ftrace_addr; | 1415 | unsigned long ftrace_addr; |
1418 | 1416 | ||
1419 | /* | ||
1420 | * If the address is located on a ftrace nop, set the | ||
1421 | * breakpoint to the following instruction. | ||
1422 | */ | ||
1423 | ftrace_addr = ftrace_location((unsigned long)p->addr); | 1417 | ftrace_addr = ftrace_location((unsigned long)p->addr); |
1424 | if (ftrace_addr) { | 1418 | if (ftrace_addr) { |
1425 | #ifdef CONFIG_KPROBES_ON_FTRACE | 1419 | #ifdef CONFIG_KPROBES_ON_FTRACE |
@@ -1431,7 +1425,17 @@ static int check_kprobe_address_safe(struct kprobe *p, | |||
1431 | return -EINVAL; | 1425 | return -EINVAL; |
1432 | #endif | 1426 | #endif |
1433 | } | 1427 | } |
1428 | return 0; | ||
1429 | } | ||
1434 | 1430 | ||
1431 | static int check_kprobe_address_safe(struct kprobe *p, | ||
1432 | struct module **probed_mod) | ||
1433 | { | ||
1434 | int ret; | ||
1435 | |||
1436 | ret = arch_check_ftrace_location(p); | ||
1437 | if (ret) | ||
1438 | return ret; | ||
1435 | jump_label_lock(); | 1439 | jump_label_lock(); |
1436 | preempt_disable(); | 1440 | preempt_disable(); |
1437 | 1441 | ||