lkml.org 
[lkml]   [2019]   [Aug]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.2 03/76] libbpf: set BTF FD for prog only when there is supported .BTF.ext data
    Date
    From: Andrii Nakryiko <andriin@fb.com>

    [ Upstream commit 3415ec643e7bd644b03026efbe2f2b36cbe9b34b ]

    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>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/lib/bpf/libbpf.c | 6 +++++-
    1 file changed, 5 insertions(+), 1 deletion(-)

    diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
    index e308fcf16cdd0..ce579e3654d60 100644
    --- a/tools/lib/bpf/libbpf.c
    +++ b/tools/lib/bpf/libbpf.c
    @@ -2066,7 +2066,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;
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-08-29 20:13    [W:4.097 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site