On Sun, Mar 29, 2026 at 10:38 PM Leon Hwang <[email protected]> wrote:
>
> On 28/3/26 05:39, Song Liu wrote:
> > On Thu, Mar 26, 2026 at 7:17 AM Leon Hwang <[email protected]> wrote:
> [...]
> >> @@ -3733,6 +3733,11 @@ static int bpf_tracing_prog_attach(struct bpf_prog 
> >> *prog,
> >>                 tr = prog->aux->dst_trampoline;
> >>                 tgt_prog = prog->aux->dst_prog;
> >>         }
> >> +       if (prog->type == BPF_PROG_TYPE_EXT &&
> >> +           prog->aux->kprobe_write_ctx != 
> >> tgt_prog->aux->kprobe_write_ctx) {
> >> +               err = -EINVAL;
> >> +               goto out_unlock;
> >> +       }
> >
> > This also blocks uprobe+freplace when prog and tgt_prog have different
> > kprobe_write_ctx, right? Is this the expected behavior?
> >
>
> Intuitively, yes, this also blocks uprobe+freplace.
>
> However, how can we distinguish uprobe/kprobe here?
>
> At attach time, uprobe/kprobe is recognized by the target perf event
> flags instead of BPF prog's expected_attach_type. Thus, we cannot infer
> the use of prog by prog itself.

Maybe we should introduce an attach type BPF_TRACE_UPROBE in a
backward compatible way:
- expected_attach_type = 0, it could be either kprobe or uprobe.
- expected_attach_type = BPF_TRACE_UPROBE, it must be an uprobe.

With this flag, we can allow uprobe+freplace when the user space sets
BPF_TRACE_UPROBE properly. WDYT?

Thanks,
Song

Reply via email to