Re: [RFC bpf-next 4/4] selftests/bpf: Add attach bench test
From: Andrii Nakryiko
Date: Tue Apr 12 2022 - 19:20:52 EST
On Mon, Apr 11, 2022 at 5:49 PM Masami Hiramatsu <mhiramat@xxxxxxxxxx> wrote:
>
> On Mon, 11 Apr 2022 15:15:40 -0700
> Andrii Nakryiko <andrii.nakryiko@xxxxxxxxx> wrote:
>
> > > +#define DEBUGFS "/sys/kernel/debug/tracing/"
> > > +
> > > +static int get_syms(char ***symsp, size_t *cntp)
> > > +{
> > > + size_t cap = 0, cnt = 0, i;
> > > + char *name, **syms = NULL;
> > > + struct hashmap *map;
> > > + char buf[256];
> > > + FILE *f;
> > > + int err;
> > > +
> > > + /*
> > > + * The available_filter_functions contains many duplicates,
> > > + * but other than that all symbols are usable in kprobe multi
> > > + * interface.
> > > + * Filtering out duplicates by using hashmap__add, which won't
> > > + * add existing entry.
> > > + */
> > > + f = fopen(DEBUGFS "available_filter_functions", "r");
> >
> > I'm really curious how did you manage to attach to everything in
> > available_filter_functions because when I'm trying to do that I fail.
> > available_filter_functions has a bunch of functions that should not be
> > attachable (e.g., notrace functions). Look just at __bpf_tramp_exit:
> >
> > void notrace __bpf_tramp_exit(struct bpf_tramp_image *tr);
>
> Hmm, this sounds like a bug in ftrace side. IIUC, the
> "available_filter_functions" only shows the functions which is NOT
> instrumented by mcount, we should not see any notrace functions on it.
>
> Technically, this is done by __no_instrument_function__ attribute.
>
> #if defined(CC_USING_HOTPATCH)
> #define notrace __attribute__((hotpatch(0, 0)))
> #elif defined(CC_USING_PATCHABLE_FUNCTION_ENTRY)
> #define notrace __attribute__((patchable_function_entry(0, 0)))
> #else
> #define notrace __attribute__((__no_instrument_function__))
> #endif
>
> >
> > So first, curious what I am doing wrong or rather why it succeeds in
> > your case ;)
> >
> > But second, just wanted to plea to "fix" available_filter_functions to
> > not list stuff that should not be attachable. Can you please take a
> > look and checks what's going on there and why do we have notrace
> > functions (and what else should *NOT* be there)?
>
> Can you share how did you reproduce the issue? I'll check it.
>
$ sudo cat /sys/kernel/debug/tracing/available_filter_functions | grep
__bpf_tramp
__bpf_tramp_image_release
__bpf_tramp_image_put_rcu_tasks
__bpf_tramp_image_put_rcu
__bpf_tramp_image_put_deferred
__bpf_tramp_exit
__bpf_tramp_exit is notrace function, so shouldn't be here. Notice
that __bpf_tramp_enter (which is also notrace) are not in
available_filter_functions.
So it's quite bizarre and inconsistent.
> Thank you,
>
>
> --
> Masami Hiramatsu <mhiramat@xxxxxxxxxx>