• Andrii Nakryiko's avatar
    libbpf: fix erroneous multi-closing of BTF FD · 5d01ab7b
    Andrii Nakryiko authored
    Libbpf stores associated BTF FD per each instance of bpf_program. When
    program is unloaded, that FD is closed. This is wrong, because leads to
    a race and possibly closing of unrelated files, if application
    simultaneously opens new files while bpf_programs are unloaded.
    
    It's also unnecessary, because struct btf "owns" that FD, and
    btf__free(), called from bpf_object__close() will close it. Thus the fix
    is to never have per-program BTF FD and fetch it from obj->btf, when
    necessary.
    
    Fixes: 2993e051 ("tools/bpf: add support to read .BTF.ext sections")
    Reported-by: default avatarAndrey Ignatov <rdna@fb.com>
    Signed-off-by: default avatarAndrii Nakryiko <andriin@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    5d01ab7b
libbpf.c 121 KB