On Mon, Oct 5, 2020 at 3:45 PM Luigi Rizzo <lrizzo@xxxxxxxxxx> wrote: > > bpf_program__set_attach_target(prog, fd, ...) will always fail when > fd = 0 (attach to a kernel symbol) because obj->btf_vmlinux is NULL > and there is no way to set it (at the moment btf_vmlinux is meant > to be temporary storage for use in bpf_object__load_xattr()). > > Fix this by using libbpf_find_vmlinux_btf_id(). > > At some point we may want to opportunistically cache btf_vmlinux > so it can be reused with multiple programs. > > Acked-by: Andrii Nakryiko <andriin@xxxxxx> Acked-by: Petar Penkov <ppenkov@xxxxxxxxxx> > Signed-off-by: Luigi Rizzo <lrizzo@xxxxxxxxxx> > --- > tools/lib/bpf/libbpf.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index a4f55f8a460d..33bf102259dd 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -10353,9 +10353,8 @@ int bpf_program__set_attach_target(struct bpf_program *prog, > btf_id = libbpf_find_prog_btf_id(attach_func_name, > attach_prog_fd); > else > - btf_id = __find_vmlinux_btf_id(prog->obj->btf_vmlinux, > - attach_func_name, > - prog->expected_attach_type); > + btf_id = libbpf_find_vmlinux_btf_id(attach_func_name, > + prog->expected_attach_type); > > if (btf_id < 0) > return btf_id; > -- > 2.28.0.806.g8561365e88-goog >