Messages in this thread Patch in this message | | | Date | Fri, 23 Mar 2012 14:02:55 -0700 (PDT) | From | Hugh Dickins <> | Subject | [PATCH] x86: stop recursive fault in print_context_stack after stack overflow |
| |
After printing out the first line of a stack backtrace, print_context_stack() calls print_ftrace_graph_addr() to check if it's making a graph of function calls, usually not the case. But unfortunate ordering of assignments causes this to oops if an earlier stack overflow corrupted threadinfo->task. Reorder to avoid that irritation.
(The fact that there was a stack overflow may often be more interesting than the stack that can now be shown; but integrating that information with this stacktrace is awkward, so leave it to overflow reporting.)
Signed-off-by: Hugh Dickins <hughd@google.com> ---
arch/x86/kernel/dumpstack.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
--- linux.git/arch/x86/kernel/dumpstack.c 2012-03-18 16:15:34.000000000 -0700 +++ linux/arch/x86/kernel/dumpstack.c 2012-03-23 10:43:28.196084684 -0700 @@ -37,13 +37,16 @@ print_ftrace_graph_addr(unsigned long ad const struct stacktrace_ops *ops, struct thread_info *tinfo, int *graph) { - struct task_struct *task = tinfo->task; + struct task_struct *task; unsigned long ret_addr; - int index = task->curr_ret_stack; + int index; if (addr != (unsigned long)return_to_handler) return; + task = tinfo->task; + index = task->curr_ret_stack; + if (!task->ret_stack || index < *graph) return;
| |