diff options
author | Masami Hiramatsu <mhiramat@kernel.org> | 2019-02-12 11:13:40 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2019-02-13 02:16:40 -0500 |
commit | eeeb080bae906a57b6513d37efe3c38f2cb87a1c (patch) | |
tree | 481d11a8b3e5095d8490046bd95a3522ab1dcbe1 /kernel/trace/trace_preemptirq.c | |
parent | 6143c6fb1e8f9bde9c434038f7548a19d36b55e7 (diff) |
kprobes: Prohibit probing on hardirq tracers
Since kprobes breakpoint handling involves hardirq tracer,
probing these functions cause breakpoint recursion problem.
Prohibit probing on those functions.
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Acked-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andrea Righi <righi.andrea@gmail.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/154998802073.31052.17255044712514564153.stgit@devbox
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/trace/trace_preemptirq.c')
-rw-r--r-- | kernel/trace/trace_preemptirq.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/kernel/trace/trace_preemptirq.c b/kernel/trace/trace_preemptirq.c index 71f553cceb3c..4d8e99fdbbbe 100644 --- a/kernel/trace/trace_preemptirq.c +++ b/kernel/trace/trace_preemptirq.c | |||
@@ -9,6 +9,7 @@ | |||
9 | #include <linux/uaccess.h> | 9 | #include <linux/uaccess.h> |
10 | #include <linux/module.h> | 10 | #include <linux/module.h> |
11 | #include <linux/ftrace.h> | 11 | #include <linux/ftrace.h> |
12 | #include <linux/kprobes.h> | ||
12 | #include "trace.h" | 13 | #include "trace.h" |
13 | 14 | ||
14 | #define CREATE_TRACE_POINTS | 15 | #define CREATE_TRACE_POINTS |
@@ -30,6 +31,7 @@ void trace_hardirqs_on(void) | |||
30 | lockdep_hardirqs_on(CALLER_ADDR0); | 31 | lockdep_hardirqs_on(CALLER_ADDR0); |
31 | } | 32 | } |
32 | EXPORT_SYMBOL(trace_hardirqs_on); | 33 | EXPORT_SYMBOL(trace_hardirqs_on); |
34 | NOKPROBE_SYMBOL(trace_hardirqs_on); | ||
33 | 35 | ||
34 | void trace_hardirqs_off(void) | 36 | void trace_hardirqs_off(void) |
35 | { | 37 | { |
@@ -43,6 +45,7 @@ void trace_hardirqs_off(void) | |||
43 | lockdep_hardirqs_off(CALLER_ADDR0); | 45 | lockdep_hardirqs_off(CALLER_ADDR0); |
44 | } | 46 | } |
45 | EXPORT_SYMBOL(trace_hardirqs_off); | 47 | EXPORT_SYMBOL(trace_hardirqs_off); |
48 | NOKPROBE_SYMBOL(trace_hardirqs_off); | ||
46 | 49 | ||
47 | __visible void trace_hardirqs_on_caller(unsigned long caller_addr) | 50 | __visible void trace_hardirqs_on_caller(unsigned long caller_addr) |
48 | { | 51 | { |
@@ -56,6 +59,7 @@ __visible void trace_hardirqs_on_caller(unsigned long caller_addr) | |||
56 | lockdep_hardirqs_on(CALLER_ADDR0); | 59 | lockdep_hardirqs_on(CALLER_ADDR0); |
57 | } | 60 | } |
58 | EXPORT_SYMBOL(trace_hardirqs_on_caller); | 61 | EXPORT_SYMBOL(trace_hardirqs_on_caller); |
62 | NOKPROBE_SYMBOL(trace_hardirqs_on_caller); | ||
59 | 63 | ||
60 | __visible void trace_hardirqs_off_caller(unsigned long caller_addr) | 64 | __visible void trace_hardirqs_off_caller(unsigned long caller_addr) |
61 | { | 65 | { |
@@ -69,6 +73,7 @@ __visible void trace_hardirqs_off_caller(unsigned long caller_addr) | |||
69 | lockdep_hardirqs_off(CALLER_ADDR0); | 73 | lockdep_hardirqs_off(CALLER_ADDR0); |
70 | } | 74 | } |
71 | EXPORT_SYMBOL(trace_hardirqs_off_caller); | 75 | EXPORT_SYMBOL(trace_hardirqs_off_caller); |
76 | NOKPROBE_SYMBOL(trace_hardirqs_off_caller); | ||
72 | #endif /* CONFIG_TRACE_IRQFLAGS */ | 77 | #endif /* CONFIG_TRACE_IRQFLAGS */ |
73 | 78 | ||
74 | #ifdef CONFIG_TRACE_PREEMPT_TOGGLE | 79 | #ifdef CONFIG_TRACE_PREEMPT_TOGGLE |