| .. | .. |
|---|
| 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 | |
|---|