Skip to content

Commit e118a69

Browse files
mykola-lysenkoNobody
authored andcommitted
Small BPF verifier log improvements
In particular: 1) remove output of inv for scalars 2) remove _value suffixes for umin/umax/s32_min/etc (except map_value) 3) remove output of id=0 4) remove output of ref_obj_id=0 Signed-off-by: Mykola Lysenko <[email protected]> Acked-by: Andrii Nakryiko <[email protected]>
1 parent 846c249 commit e118a69

File tree

3 files changed

+143
-138
lines changed

3 files changed

+143
-138
lines changed

kernel/bpf/verifier.c

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,7 @@ static const char *reg_type_str(struct bpf_verifier_env *env,
539539
char postfix[16] = {0}, prefix[32] = {0};
540540
static const char * const str[] = {
541541
[NOT_INIT] = "?",
542-
[SCALAR_VALUE] = "inv",
542+
[SCALAR_VALUE] = "",
543543
[PTR_TO_CTX] = "ctx",
544544
[CONST_PTR_TO_MAP] = "map_ptr",
545545
[PTR_TO_MAP_VALUE] = "map_value",
@@ -693,66 +693,71 @@ static void print_verifier_state(struct bpf_verifier_env *env,
693693
/* reg->off should be 0 for SCALAR_VALUE */
694694
verbose(env, "%lld", reg->var_off.value + reg->off);
695695
} else {
696+
const char *sep = "";
697+
696698
if (base_type(t) == PTR_TO_BTF_ID ||
697699
base_type(t) == PTR_TO_PERCPU_BTF_ID)
698700
verbose(env, "%s", kernel_type_name(reg->btf, reg->btf_id));
699-
verbose(env, "(id=%d", reg->id);
700-
if (reg_type_may_be_refcounted_or_null(t))
701-
verbose(env, ",ref_obj_id=%d", reg->ref_obj_id);
701+
verbose(env, "(");
702+
703+
/*
704+
* _a stands for append, was shortened to avoid multiline statements below. this macro is used to
705+
* output a comma separated list of attributes
706+
*/
707+
#define verbose_a(fmt, ...) ({ verbose(env, "%s" fmt, sep, __VA_ARGS__); sep = ","; })
708+
709+
if (reg->id)
710+
verbose_a("id=%d", reg->id);
711+
if (reg_type_may_be_refcounted_or_null(t) && reg->ref_obj_id)
712+
verbose_a("ref_obj_id=%d", reg->ref_obj_id);
702713
if (t != SCALAR_VALUE)
703-
verbose(env, ",off=%d", reg->off);
714+
verbose_a("off=%d", reg->off);
704715
if (type_is_pkt_pointer(t))
705-
verbose(env, ",r=%d", reg->range);
716+
verbose_a("r=%d", reg->range);
706717
else if (base_type(t) == CONST_PTR_TO_MAP ||
707718
base_type(t) == PTR_TO_MAP_KEY ||
708719
base_type(t) == PTR_TO_MAP_VALUE)
709-
verbose(env, ",ks=%d,vs=%d",
710-
reg->map_ptr->key_size,
711-
reg->map_ptr->value_size);
720+
verbose_a("ks=%d,vs=%d",
721+
reg->map_ptr->key_size,
722+
reg->map_ptr->value_size);
712723
if (tnum_is_const(reg->var_off)) {
713724
/* Typically an immediate SCALAR_VALUE, but
714725
* could be a pointer whose offset is too big
715726
* for reg->off
716727
*/
717-
verbose(env, ",imm=%llx", reg->var_off.value);
728+
verbose_a("imm=%llx", reg->var_off.value);
718729
} else {
719730
if (reg->smin_value != reg->umin_value &&
720731
reg->smin_value != S64_MIN)
721-
verbose(env, ",smin_value=%lld",
722-
(long long)reg->smin_value);
732+
verbose_a("smin=%lld", (long long)reg->smin_value);
723733
if (reg->smax_value != reg->umax_value &&
724734
reg->smax_value != S64_MAX)
725-
verbose(env, ",smax_value=%lld",
726-
(long long)reg->smax_value);
735+
verbose_a("smax=%lld", (long long)reg->smax_value);
727736
if (reg->umin_value != 0)
728-
verbose(env, ",umin_value=%llu",
729-
(unsigned long long)reg->umin_value);
737+
verbose_a("umin=%llu", (unsigned long long)reg->umin_value);
730738
if (reg->umax_value != U64_MAX)
731-
verbose(env, ",umax_value=%llu",
732-
(unsigned long long)reg->umax_value);
739+
verbose_a("umax=%llu", (unsigned long long)reg->umax_value);
733740
if (!tnum_is_unknown(reg->var_off)) {
734741
char tn_buf[48];
735742

736743
tnum_strn(tn_buf, sizeof(tn_buf), reg->var_off);
737-
verbose(env, ",var_off=%s", tn_buf);
744+
verbose_a("var_off=%s", tn_buf);
738745
}
739746
if (reg->s32_min_value != reg->smin_value &&
740747
reg->s32_min_value != S32_MIN)
741-
verbose(env, ",s32_min_value=%d",
742-
(int)(reg->s32_min_value));
748+
verbose_a("s32_min=%d", (int)(reg->s32_min_value));
743749
if (reg->s32_max_value != reg->smax_value &&
744750
reg->s32_max_value != S32_MAX)
745-
verbose(env, ",s32_max_value=%d",
746-
(int)(reg->s32_max_value));
751+
verbose_a("s32_max=%d", (int)(reg->s32_max_value));
747752
if (reg->u32_min_value != reg->umin_value &&
748753
reg->u32_min_value != U32_MIN)
749-
verbose(env, ",u32_min_value=%d",
750-
(int)(reg->u32_min_value));
754+
verbose_a("u32_min=%d", (int)(reg->u32_min_value));
751755
if (reg->u32_max_value != reg->umax_value &&
752756
reg->u32_max_value != U32_MAX)
753-
verbose(env, ",u32_max_value=%d",
754-
(int)(reg->u32_max_value));
757+
verbose_a("u32_max=%d", (int)(reg->u32_max_value));
755758
}
759+
#undef verbose_a
760+
756761
verbose(env, ")");
757762
}
758763
}

0 commit comments

Comments
 (0)