Commit 87eceb17 authored by Heiko Carstens's avatar Heiko Carstens Committed by Alexander Gordeev
Browse files

s390/stacktrace: Skip first user stack frame



When walking user stack frames the first stack frame (where the stack
pointer points to) should be skipped: the return address of the current
function is saved in the previous stack frame, not the current stack frame,
which is allocated for to be called functions.

Fixes: aa44433a ("s390: add USER_STACKTRACE support")
Reviewed-by: default avatarJens Remus <jremus@linux.ibm.com>
Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
Signed-off-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
parent ebd912ff
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -95,6 +95,10 @@ void arch_stack_walk_user_common(stack_trace_consume_fn consume_entry, void *coo
	while (1) {
		if (__get_user(sp, &sf->back_chain))
			break;
		/* Sanity check: ABI requires SP to be 8 byte aligned. */
		if (!sp || sp & 0x7)
			break;
		sf = (void __user *)sp;
		if (__get_user(ip, &sf->gprs[8]))
			break;
		if (ip & 0x1) {
@@ -110,10 +114,6 @@ void arch_stack_walk_user_common(stack_trace_consume_fn consume_entry, void *coo
		}
		if (!store_ip(consume_entry, cookie, entry, perf, ip))
			return;
		/* Sanity check: ABI requires SP to be aligned 8 bytes. */
		if (!sp || sp & 0x7)
			break;
		sf = (void __user *)sp;
		first = false;
	}
	pagefault_enable();