Commit 0771ac69 authored by Masami Hiramatsu's avatar Masami Hiramatsu Committed by Stefan Bader

kprobes: Mark ftrace mcount handler functions nokprobe

BugLink: https://bugs.launchpad.net/bugs/1828420

commit fabe38ab upstream.

Mark ftrace mcount handler functions nokprobe since
probing on these functions with kretprobe pushes
return address incorrectly on kretprobe shadow stack.
Reported-by: default avatarFrancis Deslauriers <francis.deslauriers@efficios.com>
Tested-by: default avatarAndrea Righi <righi.andrea@gmail.com>
Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
Acked-by: default avatarSteven Rostedt <rostedt@goodmis.org>
Acked-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
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>
Cc: stable@vger.kernel.org
Link: http://lkml.kernel.org/r/155094062044.6137.6419622920568680640.stgit@devboxSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarKleber Sacilotto de Souza <kleber.souza@canonical.com>
Signed-off-by: default avatarStefan Bader <stefan.bader@canonical.com>
parent c978a58b
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <linux/list.h> #include <linux/list.h>
#include <linux/hash.h> #include <linux/hash.h>
#include <linux/rcupdate.h> #include <linux/rcupdate.h>
#include <linux/kprobes.h>
#include <trace/events/sched.h> #include <trace/events/sched.h>
...@@ -5165,7 +5166,7 @@ static struct ftrace_ops control_ops = { ...@@ -5165,7 +5166,7 @@ static struct ftrace_ops control_ops = {
INIT_OPS_HASH(control_ops) INIT_OPS_HASH(control_ops)
}; };
static inline void static nokprobe_inline void
__ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip, __ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip,
struct ftrace_ops *ignored, struct pt_regs *regs) struct ftrace_ops *ignored, struct pt_regs *regs)
{ {
...@@ -5214,11 +5215,13 @@ static void ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip, ...@@ -5214,11 +5215,13 @@ static void ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip,
{ {
__ftrace_ops_list_func(ip, parent_ip, NULL, regs); __ftrace_ops_list_func(ip, parent_ip, NULL, regs);
} }
NOKPROBE_SYMBOL(ftrace_ops_list_func);
#else #else
static void ftrace_ops_no_ops(unsigned long ip, unsigned long parent_ip) static void ftrace_ops_no_ops(unsigned long ip, unsigned long parent_ip)
{ {
__ftrace_ops_list_func(ip, parent_ip, NULL, NULL); __ftrace_ops_list_func(ip, parent_ip, NULL, NULL);
} }
NOKPROBE_SYMBOL(ftrace_ops_no_ops);
#endif #endif
/* /*
...@@ -5239,6 +5242,7 @@ static void ftrace_ops_recurs_func(unsigned long ip, unsigned long parent_ip, ...@@ -5239,6 +5242,7 @@ static void ftrace_ops_recurs_func(unsigned long ip, unsigned long parent_ip,
trace_clear_recursion(bit); trace_clear_recursion(bit);
} }
NOKPROBE_SYMBOL(ftrace_ops_recurs_func);
/** /**
* ftrace_ops_get_func - get the function a trampoline should call * ftrace_ops_get_func - get the function a trampoline should call
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment