• Yonghong Song's avatar
    bpf: Fix a BTF_ID_LIST bug with CONFIG_DEBUG_INFO_BTF not set · beb3d47d
    Yonghong Song authored
    With CONFIG_DEBUG_INFO_BTF not set, we hit the following compilation error,
      /.../kernel/bpf/verifier.c:8196:23: error: array index 6 is past the end of the array
      (that has type 'u32[5]' (aka 'unsigned int[5]')) [-Werror,-Warray-bounds]
            if (meta->func_id == special_kfunc_list[KF_bpf_cast_to_kern_ctx])
                                 ^                  ~~~~~~~~~~~~~~~~~~~~~~~
      /.../kernel/bpf/verifier.c:8174:1: note: array 'special_kfunc_list' declared here
      BTF_ID_LIST(special_kfunc_list)
      ^
      /.../include/linux/btf_ids.h:207:27: note: expanded from macro 'BTF_ID_LIST'
      #define BTF_ID_LIST(name) static u32 __maybe_unused name[5];
                                ^
      /.../kernel/bpf/verifier.c:8443:19: error: array index 5 is past the end of the array
      (that has type 'u32[5]' (aka 'unsigned int[5]')) [-Werror,-Warray-bounds]
                     btf_id == special_kfunc_list[KF_bpf_list_pop_back];
                               ^                  ~~~~~~~~~~~~~~~~~~~~
      /.../kernel/bpf/verifier.c:8174:1: note: array 'special_kfunc_list' declared here
      BTF_ID_LIST(special_kfunc_list)
      ^
      /.../include/linux/btf_ids.h:207:27: note: expanded from macro 'BTF_ID_LIST'
      #define BTF_ID_LIST(name) static u32 __maybe_unused name[5];
      ...
    
    Fix the problem by increase the size of BTF_ID_LIST to 16 to avoid compilation error
    and also prevent potentially unintended issue due to out-of-bound access.
    Reported-by: default avatarkernel test robot <lkp@intel.com>
    Reported-by: default avatarDan Carpenter <error27@gmail.com>
    Reported-by: default avatarNathan Chancellor <nathan@kernel.org>
    Signed-off-by: default avatarYonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/r/20221123155759.2669749-1-yhs@fb.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    beb3d47d
btf_ids.h 7.58 KB