bpf: Add BTF_KIND_DECL_TAG typedef support
authorYonghong Song <yhs@fb.com>
Thu, 21 Oct 2021 19:56:28 +0000 (12:56 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Sat, 23 Oct 2021 00:04:43 +0000 (17:04 -0700)
The llvm patches ([1], [2]) added support to attach btf_decl_tag
attributes to typedef declarations. This patch added
support in kernel.

  [1] https://reviews.llvm.org/D110127
  [2] https://reviews.llvm.org/D112259

Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20211021195628.4018847-1-yhs@fb.com
kernel/bpf/btf.c

index 9059053088b90c2da1ddf297cef13be0232b0263..dbc3ad07e21b66f19fe4308b0e07be89db7e443f 100644 (file)
@@ -468,7 +468,7 @@ static bool btf_type_is_decl_tag(const struct btf_type *t)
 static bool btf_type_is_decl_tag_target(const struct btf_type *t)
 {
        return btf_type_is_func(t) || btf_type_is_struct(t) ||
-              btf_type_is_var(t);
+              btf_type_is_var(t) || btf_type_is_typedef(t);
 }
 
 u32 btf_nr_types(const struct btf *btf)
@@ -3885,7 +3885,7 @@ static int btf_decl_tag_resolve(struct btf_verifier_env *env,
 
        component_idx = btf_type_decl_tag(t)->component_idx;
        if (component_idx != -1) {
-               if (btf_type_is_var(next_type)) {
+               if (btf_type_is_var(next_type) || btf_type_is_typedef(next_type)) {
                        btf_verifier_log_type(env, v->t, "Invalid component_idx");
                        return -EINVAL;
                }