bpf: log struct/union attribute for forward type
authorYonghong Song <yhs@fb.com>
Tue, 18 Dec 2018 21:43:58 +0000 (13:43 -0800)
committerDaniel Borkmann <daniel@iogearbox.net>
Tue, 18 Dec 2018 23:47:56 +0000 (00:47 +0100)
Current btf internal verbose logger logs fwd type as
  [2] FWD A type_id=0
where A is the type name.

Commit 9d5f9f701b18 ("bpf: btf: fix struct/union/fwd types
with kind_flag") introduced kind_flag which can be used
to distinguish whether a forward type is a struct or
union.

Also, "type_id=0" does not carry any meaningful
information for fwd type as btf_type.type = 0 is simply
enforced during btf verification and is not used
anywhere else.

This commit changed the log to
  [2] FWD A struct
if kind_flag = 0, or
  [2] FWD A union
if kind_flag = 1.

Acked-by: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
kernel/bpf/btf.c

index e804b26a0506a64e75ab36f38f9b063e8c6a9041..715f9fcf4712b5842a37019c114fd1f625ab848a 100644 (file)
@@ -1595,12 +1595,18 @@ static s32 btf_fwd_check_meta(struct btf_verifier_env *env,
        return 0;
 }
 
+static void btf_fwd_type_log(struct btf_verifier_env *env,
+                            const struct btf_type *t)
+{
+       btf_verifier_log(env, "%s", btf_type_kflag(t) ? "union" : "struct");
+}
+
 static struct btf_kind_operations fwd_ops = {
        .check_meta = btf_fwd_check_meta,
        .resolve = btf_df_resolve,
        .check_member = btf_df_check_member,
        .check_kflag_member = btf_df_check_kflag_member,
-       .log_details = btf_ref_type_log,
+       .log_details = btf_fwd_type_log,
        .seq_show = btf_df_seq_show,
 };