Skip to content

Commit

Permalink
s390/stacktrace: Skip first user stack frame
Browse files Browse the repository at this point in the history
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: aa44433 ("s390: add USER_STACKTRACE support")
Reviewed-by: Jens Remus <jremus@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
  • Loading branch information
Heiko Carstens authored and Alexander Gordeev committed May 14, 2024
1 parent ebd912f commit 87eceb1
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions arch/s390/kernel/stacktrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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();
Expand Down

0 comments on commit 87eceb1

Please sign in to comment.