Message ID | 20210513165427.1133795-2-pcc@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v5,1/3] arm64: Change the on_*stack functions to take a size argument | expand |
On Thu, May 13, 2021 at 09:54:26AM -0700, Peter Collingbourne wrote: > The AAPCS places no requirements on the alignment of the frame > record. In theory it could be placed anywhere, although it seems > sensible to require it to be aligned to 8 bytes. With an upcoming > enhancement to tag-based KASAN Clang will begin creating frame records > located at an address that is only aligned to 8 bytes. Accommodate > such frame records in the stack unwinding code. Reviewed-by: Mark Brown <broonie@kernel.org>
diff --git a/arch/arm64/kernel/perf_callchain.c b/arch/arm64/kernel/perf_callchain.c index 88ff471b0bce..4a72c2727309 100644 --- a/arch/arm64/kernel/perf_callchain.c +++ b/arch/arm64/kernel/perf_callchain.c @@ -116,7 +116,7 @@ void perf_callchain_user(struct perf_callchain_entry_ctx *entry, tail = (struct frame_tail __user *)regs->regs[29]; while (entry->nr < entry->max_stack && - tail && !((unsigned long)tail & 0xf)) + tail && !((unsigned long)tail & 0x7)) tail = user_backtrace(tail, entry); } else { #ifdef CONFIG_COMPAT diff --git a/arch/arm64/kernel/stacktrace.c b/arch/arm64/kernel/stacktrace.c index 2fecbf152e80..bc672bfd7ac7 100644 --- a/arch/arm64/kernel/stacktrace.c +++ b/arch/arm64/kernel/stacktrace.c @@ -68,7 +68,7 @@ int notrace unwind_frame(struct task_struct *tsk, struct stackframe *frame) unsigned long fp = frame->fp; struct stack_info info; - if (fp & 0xf) + if (fp & 0x7) return -EINVAL; if (!tsk)