Messages in this thread Patch in this message | | | From | madvenka@linux ... | Subject | [PATCH v12 09/10] arm64: Introduce arch_stack_walk_reliable() | Date | Mon, 3 Jan 2022 10:52:11 -0600 |
| |
From: "Madhavan T. Venkataraman" <madvenka@linux.microsoft.com>
Introduce arch_stack_walk_reliable() for ARM64. This works like arch_stack_walk() except that it returns -EINVAL if the stack trace is not reliable.
Until all the reliability checks are in place, arch_stack_walk_reliable() may not be used by livepatch. But it may be used by debug and test code.
Signed-off-by: Madhavan T. Venkataraman <madvenka@linux.microsoft.com> Reviewed-by: Mark Brown <broonie@kernel.org> --- arch/arm64/kernel/stacktrace.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)
diff --git a/arch/arm64/kernel/stacktrace.c b/arch/arm64/kernel/stacktrace.c index 1db1ccb61241..717d30833252 100644 --- a/arch/arm64/kernel/stacktrace.c +++ b/arch/arm64/kernel/stacktrace.c @@ -339,3 +339,27 @@ noinline notrace void arch_stack_walk(stack_trace_consume_fn consume_entry, unwind(&state); } + +/* + * arch_stack_walk_reliable() may not be used for livepatch until all of + * the reliability checks are in place in unwind_consume(). However, + * debug and test code can choose to use it even if all the checks are not + * in place. + */ +noinline int notrace arch_stack_walk_reliable(stack_trace_consume_fn consume_fn, + void *cookie, + struct task_struct *task) +{ + struct unwind_state state; + bool reliable; + + unwind_init_common(&state, task, NULL, consume_fn, cookie); + + if (task == current) + unwind_init_current(&state); + else + unwind_init_task(&state); + + reliable = unwind(&state); + return reliable ? 0 : -EINVAL; +} -- 2.25.1
| |