On Tue, Nov 21, 2017 at 08:44:03PM -0800, Andy Lutomirski wrote: > We currently special-case stack overflow on the task stack. We're > going to start putting special stacks in the fixmap with a custom > layout, so they'll have guard pages, too. Teach the unwinder to be > able to unwind an overflow of any of the stacks. > > Signed-off-by: Andy Lutomirski <l...@kernel.org> > --- > arch/x86/kernel/dumpstack.c | 26 ++++++++++++++++---------- > 1 file changed, 16 insertions(+), 10 deletions(-) > > diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c > index 5e7d10e8ca25..635dcbfe2398 100644 > --- a/arch/x86/kernel/dumpstack.c > +++ b/arch/x86/kernel/dumpstack.c > @@ -90,24 +90,30 @@ void show_trace_log_lvl(struct task_struct *task, struct > pt_regs *regs, > * - task stack > * - interrupt stack > * - HW exception stacks (double fault, nmi, debug, mce) > + * - SYSENTER stack > * > - * x86-32 can have up to three stacks: > + * x86-32 can have up to four stacks: > * - task stack > * - softirq stack > * - hardirq stack > + * - SYSENTER stack > */ > for (regs = NULL; stack; stack = PTR_ALIGN(stack_info.next_sp, > sizeof(long))) { > const char *stack_name; > > - /* > - * If we overflowed the task stack into a guard page, jump back > - * to the bottom of the usable stack. > - */ > - if (task_stack_page(task) - (void *)stack < PAGE_SIZE) > - stack = task_stack_page(task); > - > - if (get_stack_info(stack, task, &stack_info, &visit_mask)) > - break; > + if (get_stack_info(stack, task, &stack_info, &visit_mask)) { > + /* > + * We weren't on a valid stack. It's possible that > + * we overflowed a valid stack into a guard page. > + * See if the next page up is valid to that we can
s/to/so/ > + * generate some kind of backtrace if this happens. > + */ > + stack = (unsigned long *) > + PAGE_ALIGN((unsigned long)stack); > + if (get_stack_info(stack, task, &stack_info, > + &visit_mask)) Yeah, let them stick out. With that: Reviewed-by: Borislav Petkov <b...@suse.de> -- Regards/Gruss, Boris. SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nürnberg) --