On Fri, Sep 23, 2022 at 02:42:07PM -0700, Andrii Nakryiko wrote: > On Thu, Sep 22, 2022 at 2:04 PM Jiri Olsa <jolsa@xxxxxxxxxx> wrote: > > > > Changing return value of kprobe's version of bpf_get_func_ip > > to return zero if the attach address is not on the function's > > entry point. > > > > For kprobes attached in the middle of the function we can't easily > > get to the function address especially now with the CONFIG_X86_KERNEL_IBT > > support. > > > > If user cares about current IP for kprobes attached within the > > function body, they can get it with PT_REGS_IP(ctx). > > > > Suggested-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > > Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> > > --- > > kernel/trace/bpf_trace.c | 5 ++++- > > tools/testing/selftests/bpf/progs/get_func_ip_test.c | 4 ++-- > > 2 files changed, 6 insertions(+), 3 deletions(-) > > > > Can you please add a note in bpf_get_func_ip() description in > uapi/linux/bpf.h that this function returns zero for kprobes in the > middle of the function? yep, will do that thanks, jirka > > With that: > > Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > > > > diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c > > index ebd1b348beb3..688552df95ca 100644 > > --- a/kernel/trace/bpf_trace.c > > +++ b/kernel/trace/bpf_trace.c > > @@ -1048,7 +1048,10 @@ BPF_CALL_1(bpf_get_func_ip_kprobe, struct pt_regs *, regs) > > { > > struct kprobe *kp = kprobe_running(); > > > > - return kp ? (uintptr_t)kp->addr : 0; > > + if (!kp || !(kp->flags & KPROBE_FLAG_ON_FUNC_ENTRY)) > > + return 0; > > + > > + return get_entry_ip((uintptr_t)kp->addr); > > } > > [...]