diff options
author | Masami Hiramatsu <mhiramat@kernel.org> | 2019-02-12 11:15:05 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2019-02-13 02:16:41 -0500 |
commit | 2f43c6022d84b2f562623a7023f49f1431e50747 (patch) | |
tree | a8bd5af391215c7da87d93a4eafbe6d0da4f98e4 | |
parent | a39f15b9644fac3f950f522c39e667c3af25c588 (diff) |
kprobes: Prohibit probing on lockdep functions
Some lockdep functions can be involved in breakpoint handling
and probing on those functions can cause a breakpoint recursion.
Prohibit probing on those functions by blacklist.
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.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: Steven Rostedt <rostedt@goodmis.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/154998810578.31052.1680977921449292812.stgit@devbox
Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r-- | kernel/locking/lockdep.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c index 95932333a48b..bc35a54ae3d4 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c | |||
@@ -50,6 +50,7 @@ | |||
50 | #include <linux/random.h> | 50 | #include <linux/random.h> |
51 | #include <linux/jhash.h> | 51 | #include <linux/jhash.h> |
52 | #include <linux/nmi.h> | 52 | #include <linux/nmi.h> |
53 | #include <linux/kprobes.h> | ||
53 | 54 | ||
54 | #include <asm/sections.h> | 55 | #include <asm/sections.h> |
55 | 56 | ||
@@ -2814,6 +2815,7 @@ void lockdep_hardirqs_on(unsigned long ip) | |||
2814 | __trace_hardirqs_on_caller(ip); | 2815 | __trace_hardirqs_on_caller(ip); |
2815 | current->lockdep_recursion = 0; | 2816 | current->lockdep_recursion = 0; |
2816 | } | 2817 | } |
2818 | NOKPROBE_SYMBOL(lockdep_hardirqs_on); | ||
2817 | 2819 | ||
2818 | /* | 2820 | /* |
2819 | * Hardirqs were disabled: | 2821 | * Hardirqs were disabled: |
@@ -2843,6 +2845,7 @@ void lockdep_hardirqs_off(unsigned long ip) | |||
2843 | } else | 2845 | } else |
2844 | debug_atomic_inc(redundant_hardirqs_off); | 2846 | debug_atomic_inc(redundant_hardirqs_off); |
2845 | } | 2847 | } |
2848 | NOKPROBE_SYMBOL(lockdep_hardirqs_off); | ||
2846 | 2849 | ||
2847 | /* | 2850 | /* |
2848 | * Softirqs will be enabled: | 2851 | * Softirqs will be enabled: |
@@ -3650,7 +3653,8 @@ __lock_release(struct lockdep_map *lock, int nested, unsigned long ip) | |||
3650 | return 0; | 3653 | return 0; |
3651 | } | 3654 | } |
3652 | 3655 | ||
3653 | static int __lock_is_held(const struct lockdep_map *lock, int read) | 3656 | static nokprobe_inline |
3657 | int __lock_is_held(const struct lockdep_map *lock, int read) | ||
3654 | { | 3658 | { |
3655 | struct task_struct *curr = current; | 3659 | struct task_struct *curr = current; |
3656 | int i; | 3660 | int i; |
@@ -3883,6 +3887,7 @@ int lock_is_held_type(const struct lockdep_map *lock, int read) | |||
3883 | return ret; | 3887 | return ret; |
3884 | } | 3888 | } |
3885 | EXPORT_SYMBOL_GPL(lock_is_held_type); | 3889 | EXPORT_SYMBOL_GPL(lock_is_held_type); |
3890 | NOKPROBE_SYMBOL(lock_is_held_type); | ||
3886 | 3891 | ||
3887 | struct pin_cookie lock_pin_lock(struct lockdep_map *lock) | 3892 | struct pin_cookie lock_pin_lock(struct lockdep_map *lock) |
3888 | { | 3893 | { |