Message ID | 20190801072405.2835116-1-andriin@fb.com |
---|---|
State | Accepted |
Delegated to: | BPF Maintainers |
Headers | show |
Series | [bpf] libbpf: set BTF FD for prog only when there is supported .BTF.ext data | expand |
On Thu, Aug 1, 2019 at 12:41 AM Andrii Nakryiko <andriin@fb.com> wrote: > > 5d01ab7bac46 ("libbpf: fix erroneous multi-closing of BTF FD") > introduced backwards-compatibility issue, manifesting itself as -E2BIG > error returned on program load due to unknown non-zero btf_fd attribute > value for BPF_PROG_LOAD sys_bpf() sub-command. > > This patch fixes bug by ensuring that we only ever associate BTF FD with > program if there is a BTF.ext data that was successfully loaded into > kernel, which automatically means kernel supports func_info/line_info > and associated BTF FD for progs (checked and ensured also by BTF > sanitization code). > > Fixes: 5d01ab7bac46 ("libbpf: fix erroneous multi-closing of BTF FD") > Reported-by: Andrey Ignatov <rdna@fb.com> > Signed-off-by: Andrii Nakryiko <andriin@fb.com> Applied. Thanks
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 2e84fa5b8479..2b57d7ea7836 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -2472,7 +2472,11 @@ load_program(struct bpf_program *prog, struct bpf_insn *insns, int insns_cnt, load_attr.license = license; load_attr.kern_version = kern_version; load_attr.prog_ifindex = prog->prog_ifindex; - btf_fd = bpf_object__btf_fd(prog->obj); + /* if .BTF.ext was loaded, kernel supports associated BTF for prog */ + if (prog->obj->btf_ext) + btf_fd = bpf_object__btf_fd(prog->obj); + else + btf_fd = -1; load_attr.prog_btf_fd = btf_fd >= 0 ? btf_fd : 0; load_attr.func_info = prog->func_info; load_attr.func_info_rec_size = prog->func_info_rec_size;
5d01ab7bac46 ("libbpf: fix erroneous multi-closing of BTF FD") introduced backwards-compatibility issue, manifesting itself as -E2BIG error returned on program load due to unknown non-zero btf_fd attribute value for BPF_PROG_LOAD sys_bpf() sub-command. This patch fixes bug by ensuring that we only ever associate BTF FD with program if there is a BTF.ext data that was successfully loaded into kernel, which automatically means kernel supports func_info/line_info and associated BTF FD for progs (checked and ensured also by BTF sanitization code). Fixes: 5d01ab7bac46 ("libbpf: fix erroneous multi-closing of BTF FD") Reported-by: Andrey Ignatov <rdna@fb.com> Signed-off-by: Andrii Nakryiko <andriin@fb.com> --- tools/lib/bpf/libbpf.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)