On Fri, 12 Apr 2024 22:29:20 +0900 Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx> wrote: > Hi, > > On Fri, 12 Apr 2024 13:54:20 +0200 > Maxime MERE <maxime.mere@xxxxxxxxxxx> wrote: > > > From: Andrii Nakryiko <andrii@xxxxxxxxxx> > > > > Recent changes to count number of matching symbols when creating > > a kprobe event failed to take into account kernel modules. As such, it > > breaks kprobes on kernel module symbols, by assuming there is no match. > > > > Fix this my calling module_kallsyms_on_each_symbol() in addition to > > kallsyms_on_each_match_symbol() to perform a proper counting. > > > > Link: https://lore.kernel.org/all/20231027233126.2073148-1-andrii@xxxxxxxxxx/ > > > > I forgot to push this to probes/for-next. Thanks for finding. > Let me pick. Nevermind, I confused similar different patch[1]. This fix has been merged as commit 926fe783c8a6 ("tracing/kprobes: Fix symbol counting logic by looking at modules as well"). Thank you, [1] https://patchwork.kernel.org/project/linux-trace-kernel/patch/169854904604.132316.12500381416261460174.stgit@devnote2/ > > Thank you, > > > Cc: Francis Laniel <flaniel@xxxxxxxxxxxxxxxxxxx> > > Cc: stable@xxxxxxxxxxxxxxx > > Cc: Masami Hiramatsu <mhiramat@xxxxxxxxxx> > > Cc: Steven Rostedt <rostedt@xxxxxxxxxxx> > > Fixes: b022f0c7e404 ("tracing/kprobes: Return EADDRNOTAVAIL when func matches several symbols") > > Signed-off-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > > Acked-by: Song Liu <song@xxxxxxxxxx> > > Signed-off-by: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx> > > --- > > kernel/trace/trace_kprobe.c | 24 ++++++++++++++++++++---- > > 1 file changed, 20 insertions(+), 4 deletions(-) > > > > diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c > > index 95c5b0668cb7..e834f149695b 100644 > > --- a/kernel/trace/trace_kprobe.c > > +++ b/kernel/trace/trace_kprobe.c > > @@ -714,14 +714,30 @@ static int count_symbols(void *data, unsigned long unused) > > return 0; > > } > > > > +struct sym_count_ctx { > > + unsigned int count; > > + const char *name; > > +}; > > + > > +static int count_mod_symbols(void *data, const char *name, unsigned long unused) > > +{ > > + struct sym_count_ctx *ctx = data; > > + > > + if (strcmp(name, ctx->name) == 0) > > + ctx->count++; > > + > > + return 0; > > +} > > + > > static unsigned int number_of_same_symbols(char *func_name) > > { > > - unsigned int count; > > + struct sym_count_ctx ctx = { .count = 0, .name = func_name }; > > + > > + kallsyms_on_each_match_symbol(count_symbols, func_name, &ctx.count); > > > > - count = 0; > > - kallsyms_on_each_match_symbol(count_symbols, func_name, &count); > > + module_kallsyms_on_each_symbol(NULL, count_mod_symbols, &ctx); > > > > - return count; > > + return ctx.count; > > } > > > > static int __trace_kprobe_create(int argc, const char *argv[]) > > -- > > 2.25.1 > > > > > -- > Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx> -- Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>