aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/dumpstack.c
diff options
context:
space:
mode:
authorJosh Poimboeuf <jpoimboe@redhat.com>2016-10-25 10:51:13 -0400
committerIngo Molnar <mingo@kernel.org>2016-10-25 12:40:37 -0400
commit0ee1dd9f5e7eae4e55f95935b72d4beecb03de9c (patch)
treed552e8dc63d8daac8e472accff99b6710b57348e /arch/x86/kernel/dumpstack.c
parentbb5e5ce545f2031c96f7901cd8d1698ea3ca4c9c (diff)
x86/dumpstack: Remove raw stack dump
For mostly historical reasons, the x86 oops dump shows the raw stack values: ... [registers] Stack: ffff880079af7350 ffff880079905400 0000000000000000 ffffc900008f3ae0 ffffffffa0196610 0000000000000001 00010000ffffffff 0000000087654321 0000000000000002 0000000000000000 0000000000000000 0000000000000000 Call Trace: ... This seems to be an artifact from long ago, and probably isn't needed anymore. It generally just adds noise to the dump, and it can be actively harmful because it leaks kernel addresses. Linus says: "The stack dump actually goes back to forever, and it used to be useful back in 1992 or so. But it used to be useful mainly because stacks were simpler and we didn't have very good call traces anyway. I definitely remember having used them - I just do not remember having used them in the last ten+ years. Of course, it's still true that if you can trigger an oops, you've likely already lost the security game, but since the stack dump is so useless, let's aim to just remove it and make games like the above harder." This also removes the related 'kstack=' cmdline option and the 'kstack_depth_to_print' sysctl. Suggested-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Andy Lutomirski <luto@kernel.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/e83bd50df52d8fe88e94d2566426ae40d813bf8f.1477405374.git.jpoimboe@redhat.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86/kernel/dumpstack.c')
-rw-r--r--arch/x86/kernel/dumpstack.c21
1 files changed, 2 insertions, 19 deletions
diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c
index f967652500fa..499aa6f0fde5 100644
--- a/arch/x86/kernel/dumpstack.c
+++ b/arch/x86/kernel/dumpstack.c
@@ -22,7 +22,6 @@
22int panic_on_unrecovered_nmi; 22int panic_on_unrecovered_nmi;
23int panic_on_io_nmi; 23int panic_on_io_nmi;
24unsigned int code_bytes = 64; 24unsigned int code_bytes = 64;
25int kstack_depth_to_print = 3 * STACKSLOTS_PER_LINE;
26static int die_counter; 25static int die_counter;
27 26
28bool in_task_stack(unsigned long *stack, struct task_struct *task, 27bool in_task_stack(unsigned long *stack, struct task_struct *task,
@@ -171,12 +170,12 @@ void show_stack(struct task_struct *task, unsigned long *sp)
171 if (!sp && task == current) 170 if (!sp && task == current)
172 sp = get_stack_pointer(current, NULL); 171 sp = get_stack_pointer(current, NULL);
173 172
174 show_stack_log_lvl(task, NULL, sp, KERN_DEFAULT); 173 show_trace_log_lvl(task, NULL, sp, KERN_DEFAULT);
175} 174}
176 175
177void show_stack_regs(struct pt_regs *regs) 176void show_stack_regs(struct pt_regs *regs)
178{ 177{
179 show_stack_log_lvl(current, regs, NULL, KERN_DEFAULT); 178 show_trace_log_lvl(current, regs, NULL, KERN_DEFAULT);
180} 179}
181 180
182static arch_spinlock_t die_lock = __ARCH_SPIN_LOCK_UNLOCKED; 181static arch_spinlock_t die_lock = __ARCH_SPIN_LOCK_UNLOCKED;
@@ -295,22 +294,6 @@ void die(const char *str, struct pt_regs *regs, long err)
295 oops_end(flags, regs, sig); 294 oops_end(flags, regs, sig);
296} 295}
297 296
298static int __init kstack_setup(char *s)
299{
300 ssize_t ret;
301 unsigned long val;
302
303 if (!s)
304 return -EINVAL;
305
306 ret = kstrtoul(s, 0, &val);
307 if (ret)
308 return ret;
309 kstack_depth_to_print = val;
310 return 0;
311}
312early_param("kstack", kstack_setup);
313
314static int __init code_bytes_setup(char *s) 297static int __init code_bytes_setup(char *s)
315{ 298{
316 ssize_t ret; 299 ssize_t ret;