Re: [PATCH] ftrace: Fix function name for trampoline

From: Steven Rostedt
Date: Thu Oct 10 2024 - 11:07:18 EST


On Thu, 10 Oct 2024 22:02:59 +0900
Tatsuya S <tatsuya.s2862@xxxxxxxxx> wrote:

> The issue that unrelated function name is shown on stack trace like
> following even though it should be trampoline code address is caused by
> the creation of trampoline code in the area where .init.text section
> of module was freed after module is loaded.
>
> bash-1344 [002] ..... 43.644608: <stack trace>
> => (MODULE INIT FUNCTION)
> => vfs_write
> => ksys_write
> => do_syscall_64
> => entry_SYSCALL_64_after_hwframe
>
> To resolve this, when function address of stack trace entry is in
> trampoline, output without looking up symbol name.
>
> Signed-off-by: Tatsuya S <tatsuya.s2862@xxxxxxxxx>
> ---
> kernel/trace/trace_output.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
> index 868f2f912f28..32a0858373e2 100644
> --- a/kernel/trace/trace_output.c
> +++ b/kernel/trace/trace_output.c
> @@ -1246,6 +1246,11 @@ static enum print_line_t trace_stack_print(struct trace_iterator *iter,
> break;
>
> trace_seq_puts(s, " => ");
> + if (is_ftrace_trampoline((*p) + delta)) {

This is not reliable. The output is called when the user reads the trace
file and the ops may no longer exist.

The only way to test this is if you call it during the trace. Yes it may
slow things down a little, but it will be accurate.

-- Steve


> + trace_seq_printf(s, "0x%08lx", (*p) + delta);
> + trace_seq_putc(s, '\n');
> + continue;
> + }
> seq_print_ip_sym(s, (*p) + delta, flags);
> trace_seq_putc(s, '\n');
> }