On Mon, Sep 09, 2024 at 04:44:29PM -0700, Andrii Nakryiko wrote: > On Mon, Sep 9, 2024 at 12:46 AM Jiri Olsa <jolsa@xxxxxxxxxx> wrote: > > > > Adding support to attach bpf program for entry and return probe > > of the same function. This is common use case which at the moment > > requires to create two uprobe multi links. > > > > Adding new BPF_TRACE_UPROBE_SESSION attach type that instructs > > kernel to attach single link program to both entry and exit probe. > > > > It's possible to control execution of the bpf program on return > > probe simply by returning zero or non zero from the entry bpf > > program execution to execute or not the bpf program on return > > probe respectively. > > > > pedantic nit: bpf -> BPF ok > > > Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> > > --- > > include/uapi/linux/bpf.h | 1 + > > kernel/bpf/syscall.c | 9 +++++++-- > > kernel/trace/bpf_trace.c | 32 ++++++++++++++++++++++++-------- > > tools/include/uapi/linux/bpf.h | 1 + > > tools/lib/bpf/libbpf.c | 1 + > > 5 files changed, 34 insertions(+), 10 deletions(-) > > > > LGTM > > Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > > [...] > > > @@ -3336,9 +3347,13 @@ uprobe_multi_link_handler(struct uprobe_consumer *con, struct pt_regs *regs, > > __u64 *data) > > { > > struct bpf_uprobe *uprobe; > > + int ret; > > > > uprobe = container_of(con, struct bpf_uprobe, consumer); > > - return uprobe_prog_run(uprobe, instruction_pointer(regs), regs); > > + ret = uprobe_prog_run(uprobe, instruction_pointer(regs), regs); > > + if (uprobe->consumer.session) > > + return ret ? UPROBE_HANDLER_IGNORE : 0; > > Should we restrict the return range to [0, 1] for UPROBE_SESSION > programs on the verifier side (given it's a new program type and we > can do that)? yes, I think we can do that.. we have BPF_TRACE_UPROBE_SESSION as expected_attach_type so we can do that during the load hum, is it too late to do that for kprobe session as well? thanks, jirka > > > + return ret; > > } > > > > [...]