• Andrii Nakryiko's avatar
    libbpf: Improve BTF sanitization handling · 0f0e55d8
    Andrii Nakryiko authored
    Change sanitization process to preserve original BTF, which might be used by
    libbpf itself for Kconfig externs, CO-RE relocs, etc, even if kernel is old
    and doesn't support BTF. To achieve that, if libbpf detects the need for BTF
    sanitization, it would clone original BTF, sanitize it in-place, attempt to
    load it into kernel, and if successful, will preserve loaded BTF FD in
    original `struct btf`, while freeing sanitized local copy.
    
    If kernel doesn't support any BTF, original btf and btf_ext will still be
    preserved to be used later for CO-RE relocation and other BTF-dependent libbpf
    features, which don't dependon kernel BTF support.
    
    Patch takes care to not specify BTF and BTF.ext features when loading BPF
    programs and/or maps, if it was detected that kernel doesn't support BTF
    features.
    Signed-off-by: default avatarAndrii Nakryiko <andriin@fb.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20200708015318.3827358-4-andriin@fb.com
    0f0e55d8
libbpf.c 232 KB