summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Rostedt (VMware) <rostedt@goodmis.org>2018-12-18 15:50:02 -0500
committerSteven Rostedt (VMware) <rostedt@goodmis.org>2018-12-22 08:21:03 -0500
commite8d086ddb5339d72c60e6c7b8d28810f26960f9a (patch)
tree3e9a132b74db5abafa6cf5e2b4ab7adc268b5e6b
parent29924e5030969c55dbe68074215be5a1f14f1ff1 (diff)
tracing: Fix ftrace_graph_get_ret_stack() to use task and not current
The function ftrace_graph_get_ret_stack() takes a task struct descriptor but uses current as the task to perform the operations on. In pretty much all cases the task decriptor is the same as current, so this wasn't an issue. But there is a case in the ARM architecture that passes in a task that is not current, and expects a result from that task, and this code breaks it. Fixes: 51584396cff5 ("arm64: Use ftrace_graph_get_ret_stack() instead of curr_ret_stack") Reported-by: James Morse <james.morse@arm.com> Tested-by: James Morse <james.morse@arm.com> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
-rw-r--r--kernel/trace/fgraph.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/trace/fgraph.c b/kernel/trace/fgraph.c
index d4f04f0ca646..8dfd5021b933 100644
--- a/kernel/trace/fgraph.c
+++ b/kernel/trace/fgraph.c
@@ -246,10 +246,10 @@ unsigned long ftrace_return_to_handler(unsigned long frame_pointer)
struct ftrace_ret_stack *
ftrace_graph_get_ret_stack(struct task_struct *task, int idx)
{
- idx = current->curr_ret_stack - idx;
+ idx = task->curr_ret_stack - idx;
if (idx >= 0 && idx <= task->curr_ret_stack)
- return &current->ret_stack[idx];
+ return &task->ret_stack[idx];
return NULL;
}