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. 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>