diff options
author | Andy Lutomirski <luto@kernel.org> | 2016-07-04 18:31:25 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2016-07-08 05:33:18 -0400 |
commit | ef16dd0c2a523d2e3975bb1bea9f5727e3e7146f (patch) | |
tree | 5bbd6f5cec97d5f2ac862e4cc2652f31a5bce593 | |
parent | a99cde438de0c4c0cecc1d1af1a55a75b10bfdef (diff) |
x86/dumpstack: Honor supplied @regs arg
The comment suggests that show_stack(NULL, NULL) should backtrace the
current context, but the code doesn't match the comment. If regs are
given, start the "Stack:" hexdump at regs->sp.
Signed-off-by: Andy Lutomirski <luto@kernel.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1467671487-10344-2-git-send-email-bp@alien8.de
Link: http://lkml.kernel.org/r/efcd79bf4106d61f1cd258c2caa87f3a0618eeac.1466036668.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r-- | arch/x86/kernel/dumpstack_32.c | 4 | ||||
-rw-r--r-- | arch/x86/kernel/dumpstack_64.c | 4 |
2 files changed, 6 insertions, 2 deletions
diff --git a/arch/x86/kernel/dumpstack_32.c b/arch/x86/kernel/dumpstack_32.c index fef917e79b9d..948d77da3881 100644 --- a/arch/x86/kernel/dumpstack_32.c +++ b/arch/x86/kernel/dumpstack_32.c | |||
@@ -96,7 +96,9 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs, | |||
96 | int i; | 96 | int i; |
97 | 97 | ||
98 | if (sp == NULL) { | 98 | if (sp == NULL) { |
99 | if (task) | 99 | if (regs) |
100 | sp = (unsigned long *)regs->sp; | ||
101 | else if (task) | ||
100 | sp = (unsigned long *)task->thread.sp; | 102 | sp = (unsigned long *)task->thread.sp; |
101 | else | 103 | else |
102 | sp = (unsigned long *)&sp; | 104 | sp = (unsigned long *)&sp; |
diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c index d558a8a49016..a81e1ef73bf2 100644 --- a/arch/x86/kernel/dumpstack_64.c +++ b/arch/x86/kernel/dumpstack_64.c | |||
@@ -264,7 +264,9 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs, | |||
264 | * back trace for this cpu: | 264 | * back trace for this cpu: |
265 | */ | 265 | */ |
266 | if (sp == NULL) { | 266 | if (sp == NULL) { |
267 | if (task) | 267 | if (regs) |
268 | sp = (unsigned long *)regs->sp; | ||
269 | else if (task) | ||
268 | sp = (unsigned long *)task->thread.sp; | 270 | sp = (unsigned long *)task->thread.sp; |
269 | else | 271 | else |
270 | sp = (unsigned long *)&sp; | 272 | sp = (unsigned long *)&sp; |