s390/dumpstack: resolve userspace last_break
authorIlya Leoshkevich <iii@linux.ibm.com>
Fri, 10 Mar 2023 02:36:48 +0000 (03:36 +0100)
committerHeiko Carstens <hca@linux.ibm.com>
Mon, 20 Mar 2023 09:56:49 +0000 (10:56 +0100)
report_user_fault() currently does not show which library last_break
points to. Call print_vma_addr() to find out; the output now looks
like this:

    Last Breaking-Event-Address:
     [<000003ffaa2a56e4>] libc.so.6[3ffaa180000+251000]

For kernel it's unchanged:

    Last Breaking-Event-Address:
     [<000000000030fd06>] trace_hardirqs_on+0x56/0xc8

Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Acked-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/kernel/dumpstack.c

index 1e3233eb510a9a69ed6e4a7d5a546dd81bedb2d3..f257058d08282a4d6638d33eaee974cdfdf13d26 100644 (file)
@@ -152,7 +152,13 @@ void show_stack(struct task_struct *task, unsigned long *stack,
 static void show_last_breaking_event(struct pt_regs *regs)
 {
        printk("Last Breaking-Event-Address:\n");
-       printk(" [<%016lx>] %pSR\n", regs->last_break, (void *)regs->last_break);
+       printk(" [<%016lx>] ", regs->last_break);
+       if (user_mode(regs)) {
+               print_vma_addr(KERN_CONT, regs->last_break);
+               pr_cont("\n");
+       } else {
+               pr_cont("%pSR\n", (void *)regs->last_break);
+       }
 }
 
 void show_registers(struct pt_regs *regs)