.. | .. |
---|
195 | 195 | printk("%sCall Trace:\n", log_lvl); |
---|
196 | 196 | |
---|
197 | 197 | unwind_start(&state, task, regs, stack); |
---|
198 | | - stack = stack ? : get_stack_pointer(task, regs); |
---|
199 | 198 | regs = unwind_get_entry_regs(&state, &partial); |
---|
200 | 199 | |
---|
201 | 200 | /* |
---|
.. | .. |
---|
214 | 213 | * - hardirq stack |
---|
215 | 214 | * - entry stack |
---|
216 | 215 | */ |
---|
217 | | - for ( ; stack; stack = PTR_ALIGN(stack_info.next_sp, sizeof(long))) { |
---|
| 216 | + for (stack = stack ?: get_stack_pointer(task, regs); |
---|
| 217 | + stack; |
---|
| 218 | + stack = stack_info.next_sp) { |
---|
218 | 219 | const char *stack_name; |
---|
| 220 | + |
---|
| 221 | + stack = PTR_ALIGN(stack, sizeof(long)); |
---|
219 | 222 | |
---|
220 | 223 | if (get_stack_info(stack, task, &stack_info, &visit_mask)) { |
---|
221 | 224 | /* |
---|
.. | .. |
---|
351 | 354 | } |
---|
352 | 355 | NOKPROBE_SYMBOL(oops_begin); |
---|
353 | 356 | |
---|
354 | | -void __noreturn rewind_stack_do_exit(int signr); |
---|
| 357 | +void __noreturn rewind_stack_and_make_dead(int signr); |
---|
355 | 358 | |
---|
356 | 359 | void oops_end(unsigned long flags, struct pt_regs *regs, int signr) |
---|
357 | 360 | { |
---|
.. | .. |
---|
386 | 389 | * reuse the task stack and that existing poisons are invalid. |
---|
387 | 390 | */ |
---|
388 | 391 | kasan_unpoison_task_stack(current); |
---|
389 | | - rewind_stack_do_exit(signr); |
---|
| 392 | + rewind_stack_and_make_dead(signr); |
---|
390 | 393 | } |
---|
391 | 394 | NOKPROBE_SYMBOL(oops_end); |
---|
392 | 395 | |
---|