Re: [PATCH v3 bpf-next 01/10] bpf: Support ->fill_link_info for kprobe_multi

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jun 15, 2023 at 4:29 PM Jiri Olsa <olsajiri@xxxxxxxxx> wrote:
>
> On Mon, Jun 12, 2023 at 03:15:59PM +0000, Yafang Shao wrote:
>
> SNIP
>
> > diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
> > index 2bc41e6..742047c 100644
> > --- a/kernel/trace/bpf_trace.c
> > +++ b/kernel/trace/bpf_trace.c
> > @@ -2548,9 +2548,36 @@ static void bpf_kprobe_multi_link_dealloc(struct bpf_link *link)
> >       kfree(kmulti_link);
> >  }
> >
> > +static int bpf_kprobe_multi_link_fill_link_info(const struct bpf_link *link,
> > +                                             struct bpf_link_info *info)
> > +{
> > +     u64 __user *uaddrs = u64_to_user_ptr(info->kprobe_multi.addrs);
> > +     struct bpf_kprobe_multi_link *kmulti_link;
> > +     u32 ucount = info->kprobe_multi.count;
> > +
> > +     if (!uaddrs ^ !ucount)
> > +             return -EINVAL;
> > +
> > +     kmulti_link = container_of(link, struct bpf_kprobe_multi_link, link);
> > +     if (!uaddrs) {
> > +             info->kprobe_multi.count = kmulti_link->cnt;
> > +             return 0;
> > +     }
> > +
> > +     if (ucount < kmulti_link->cnt)
> > +             return -EINVAL;
> > +     info->kprobe_multi.flags = kmulti_link->fp.flags;
> > +     if (!kallsyms_show_value(current_cred()))
> > +             return 0;
> > +     if (copy_to_user(uaddrs, kmulti_link->addrs, ucount * sizeof(u64)))
> > +             return -EFAULT;
> > +     return 0;
> > +}
> > +
> >  static const struct bpf_link_ops bpf_kprobe_multi_link_lops = {
> >       .release = bpf_kprobe_multi_link_release,
> >       .dealloc = bpf_kprobe_multi_link_dealloc,
> > +     .fill_link_info = bpf_kprobe_multi_link_fill_link_info,
> >  };
> >
> >  static void bpf_kprobe_multi_cookie_swap(void *a, void *b, int size, const void *priv)
> > @@ -2890,6 +2917,7 @@ int bpf_kprobe_multi_link_attach(const union bpf_attr *attr, struct bpf_prog *pr
> >               return err;
> >       }
> >
> > +     link->fp.flags = flags;
>
> hum this looks wrong, we can't use fprobe flags to store our flags
> you should add flags to bpf_kprobe_multi_link

Will fix it. Thanks for pointing it out.

-- 
Regards
Yafang





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux