Commit 33974093c024f08caadd2fc71a83bd811ed1831d
Committed by
Ingo Molnar
1 parent
84d88d5d4e
Exists in
master
and in
7 other branches
tracing: Fix infinite recursion in ftrace_update_pid_func()
When CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST is enabled __ftrace_trace_function contains the current trace function, not ftrace_trace_function. In ftrace_update_pid_func() we currently incorrectly assign the value of ftrace_trace_function to __ftrace_trace_funcion before returning. Without this patch it is possible to execute an infinite recursion whereby ftrace_test_stop_func() calls __ftrace_trace_function, which was assigned ftrace_test_stop_func() in ftrace_update_pid_func(). Signed-off-by: Matt Fleming <matthew.fleming@imgtec.com> Acked-by: Steven Rostedt <rostedt@goodmis.org> Cc: Frederic Weisbecker <fweisbec@gmail.com> LKML-Reference: <1254152581-18347-1-git-send-email-matt@console-pimps.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Showing 1 changed file with 4 additions and 0 deletions Side-by-side Diff
kernel/trace/ftrace.c
... | ... | @@ -225,7 +225,11 @@ |
225 | 225 | if (ftrace_trace_function == ftrace_stub) |
226 | 226 | return; |
227 | 227 | |
228 | +#ifdef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST | |
228 | 229 | func = ftrace_trace_function; |
230 | +#else | |
231 | + func = __ftrace_trace_function; | |
232 | +#endif | |
229 | 233 | |
230 | 234 | if (ftrace_pid_trace) { |
231 | 235 | set_ftrace_pid_function(func); |