On Mon, Apr 24, 2023 at 9:05 AM Jiri Olsa <jolsa@xxxxxxxxxx> wrote: > > Adding support to specify cookies array for uprobe_multi link. > > The cookies array share indexes and length with other uprobe_multi > arrays (paths/offsets/ref_ctr_offsets). > > The cookies[i] value defines cookie for i-the uprobe and will be > returned by bpf_get_attach_cookie helper when called from ebpf > program hooked to that specific uprobe. > > Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> > --- > include/uapi/linux/bpf.h | 1 + > kernel/bpf/syscall.c | 2 +- > kernel/trace/bpf_trace.c | 46 +++++++++++++++++++++++++++++++++++++--- > 3 files changed, 45 insertions(+), 4 deletions(-) > LGTM, one nit below Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx> [...] > static void bpf_uprobe_unregister(struct bpf_uprobe *uprobes, u32 cnt) > @@ -2964,6 +2982,7 @@ static int uprobe_prog_run(struct bpf_uprobe *uprobe, > struct bpf_uprobe_multi_link *link = uprobe->link; > struct bpf_uprobe_multi_run_ctx run_ctx = { > .entry_ip = entry_ip, > + .uprobe = uprobe, > }; > struct bpf_run_ctx *old_run_ctx; > int err; > @@ -3005,6 +3024,16 @@ uprobe_multi_link_ret_handler(struct uprobe_consumer *con, unsigned long func, s > return uprobe_prog_run(uprobe, func, regs); > } > > +static u64 bpf_uprobe_multi_cookie(struct bpf_run_ctx *ctx) > +{ > + struct bpf_uprobe_multi_run_ctx *run_ctx; > + > + if (WARN_ON_ONCE(!ctx)) > + return 0; do we need this check?... seems redundant, tbh > + run_ctx = container_of(current->bpf_ctx, struct bpf_uprobe_multi_run_ctx, run_ctx); > + return run_ctx->uprobe->cookie; > +} > + [...]