Re: [PATCH 1/3] tracing/kprobes: Fix symbol counting logic by looking at modules as well

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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>




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux