Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

s390/traps: Change stack overflow message

When the kernel stack pointer is pointing to invalid memory,
a 'Kernel stack overflow' message is printed, which is misleading.
Change the message to actually say that the stack pointer is invalid
instead.

Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>

authored by

Sven Schnelle and committed by
Vasily Gorbik
f740a8b4 a9f24559

+11 -11
+6 -6
arch/s390/kernel/entry.S
··· 68 68 clg %r14,__LC_RESTART_STACK(\lowcore) 69 69 je \oklabel 70 70 la %r14,\savearea(\lowcore) 71 - j stack_overflow 71 + j stack_invalid 72 72 .endm 73 73 74 74 /* ··· 316 316 tm __LC_PGM_ILC+3(%r13),0x80 # check for per exception 317 317 jnz .Lpgm_svcper # -> single stepped svc 318 318 2: aghi %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE) 319 - # CHECK_VMAP_STACK branches to stack_overflow or 4f 319 + # CHECK_VMAP_STACK branches to stack_invalid or 4f 320 320 CHECK_VMAP_STACK __LC_SAVE_AREA,%r13,4f 321 321 3: lg %r15,__LC_KERNEL_STACK(%r13) 322 322 4: la %r11,STACK_FRAME_OVERHEAD(%r15) ··· 591 591 .section .kprobes.text, "ax" 592 592 593 593 /* 594 - * The synchronous or the asynchronous stack overflowed. We are dead. 594 + * The synchronous or the asynchronous stack pointer is invalid. We are dead. 595 595 * No need to properly save the registers, we are going to panic anyway. 596 596 * Setup a pt_regs so that show_trace can provide a good call trace. 597 597 */ 598 - SYM_CODE_START(stack_overflow) 598 + SYM_CODE_START(stack_invalid) 599 599 GET_LC %r15 600 600 lg %r15,__LC_NODAT_STACK(%r15) # change to panic stack 601 601 la %r11,STACK_FRAME_OVERHEAD(%r15) ··· 605 605 stg %r10,__PT_ORIG_GPR2(%r11) # store last break to orig_gpr2 606 606 xc __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15) 607 607 lgr %r2,%r11 # pass pointer to pt_regs 608 - jg kernel_stack_overflow 609 - SYM_CODE_END(stack_overflow) 608 + jg kernel_stack_invalid 609 + SYM_CODE_END(stack_invalid) 610 610 611 611 .section .data, "aw" 612 612 .balign 4
+1 -1
arch/s390/kernel/entry.h
··· 31 31 void do_non_secure_storage_access(struct pt_regs *regs); 32 32 void do_secure_storage_violation(struct pt_regs *regs); 33 33 void do_report_trap(struct pt_regs *regs, int si_signo, int si_code, char *str); 34 - void kernel_stack_overflow(struct pt_regs * regs); 34 + void kernel_stack_invalid(struct pt_regs *regs); 35 35 void handle_signal32(struct ksignal *ksig, sigset_t *oldset, 36 36 struct pt_regs *regs); 37 37
+4 -4
arch/s390/kernel/traps.c
··· 236 236 } 237 237 } 238 238 239 - void kernel_stack_overflow(struct pt_regs *regs) 239 + void kernel_stack_invalid(struct pt_regs *regs) 240 240 { 241 241 /* 242 242 * Normally regs are unpoisoned by the generic entry code, but ··· 244 244 */ 245 245 kmsan_unpoison_entry_regs(regs); 246 246 bust_spinlocks(1); 247 - pr_emerg("Kernel stack overflow\n"); 247 + pr_emerg("Kernel stack pointer invalid\n"); 248 248 show_regs(regs); 249 249 bust_spinlocks(0); 250 - panic("Corrupt kernel stack, cannot continue"); 250 + panic("Invalid kernel stack pointer, cannot continue"); 251 251 } 252 - NOKPROBE_SYMBOL(kernel_stack_overflow); 252 + NOKPROBE_SYMBOL(kernel_stack_invalid); 253 253 254 254 static void __init test_monitor_call(void) 255 255 {