• Florent Revest's avatar
    bpf/btf: Accept function names that contain dots · 9724160b
    Florent Revest authored
    When building a kernel with LLVM=1, LLVM_IAS=0 and CONFIG_KASAN=y, LLVM
    leaves DWARF tags for the "asan.module_ctor" & co symbols. In turn,
    pahole creates BTF_KIND_FUNC entries for these and this makes the BTF
    metadata validation fail because they contain a dot.
    
    In a dramatic turn of event, this BTF verification failure can cause
    the netfilter_bpf initialization to fail, causing netfilter_core to
    free the netfilter_helper hashmap and netfilter_ftp to trigger a
    use-after-free. The risk of u-a-f in netfilter will be addressed
    separately but the existence of "asan.module_ctor" debug info under some
    build conditions sounds like a good enough reason to accept functions
    that contain dots in BTF.
    
    Although using only LLVM=1 is the recommended way to compile clang-based
    kernels, users can certainly do LLVM=1, LLVM_IAS=0 as well and we still
    try to support that combination according to Nick. To clarify:
    
      - > v5.10 kernel, LLVM=1 (LLVM_IAS=0 is not the default) is recommended,
        but user can still have LLVM=1, LLVM_IAS=0 to trigger the issue
    
      - <= 5.10 kernel, LLVM=1 (LLVM_IAS=0 is the default) is recommended in
        which case GNU as will be used
    
    Fixes: 1dc92851
    
     ("bpf: kernel side support for BTF Var and DataSec")
    Signed-off-by: default avatarFlorent Revest <revest@chromium.org>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Cc: Yonghong Song <yhs@meta.com>
    Cc: Nick Desaulniers <ndesaulniers@google.com>
    Link: https://lore.kernel.org/bpf/20230615145607.3469985-1-revest@chromium.org
    9724160b
btf.c 219 KB