Skip to content

Commit bae7ab2

Browse files
mykola-lysenkoNobody
authored and
Nobody
committed
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]>
1 parent 2441fae commit bae7ab2

File tree

3 files changed

+142
-138
lines changed

3 files changed

+142
-138
lines changed

kernel/bpf/verifier.c

Lines changed: 31 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,69 +693,73 @@ 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+
702+
verbose(env, "(");
703+
704+
#define verbose_a(fmt, ...) ({ verbose(env, "%s" fmt, sep, __VA_ARGS__); sep = ","; })
705+
706+
if (reg->id)
707+
verbose_a("id=%d", reg->id);
708+
709+
if (reg_type_may_be_refcounted_or_null(t) && reg->ref_obj_id)
710+
verbose_a("ref_obj_id=%d", reg->ref_obj_id);
702711
if (t != SCALAR_VALUE)
703-
verbose(env, ",off=%d", reg->off);
712+
verbose_a("off=%d", reg->off);
704713
if (type_is_pkt_pointer(t))
705-
verbose(env, ",r=%d", reg->range);
714+
verbose_a("r=%d", reg->range);
706715
else if (base_type(t) == CONST_PTR_TO_MAP ||
707716
base_type(t) == PTR_TO_MAP_KEY ||
708717
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);
718+
verbose_a("ks=%d,vs=%d",
719+
reg->map_ptr->key_size,
720+
reg->map_ptr->value_size);
712721
if (tnum_is_const(reg->var_off)) {
713722
/* Typically an immediate SCALAR_VALUE, but
714723
* could be a pointer whose offset is too big
715724
* for reg->off
716725
*/
717-
verbose(env, ",imm=%llx", reg->var_off.value);
726+
verbose_a("imm=%llx", reg->var_off.value);
718727
} else {
719728
if (reg->smin_value != reg->umin_value &&
720729
reg->smin_value != S64_MIN)
721-
verbose(env, ",smin_value=%lld",
722-
(long long)reg->smin_value);
730+
verbose_a("smin=%lld", (long long)reg->smin_value);
723731
if (reg->smax_value != reg->umax_value &&
724732
reg->smax_value != S64_MAX)
725-
verbose(env, ",smax_value=%lld",
726-
(long long)reg->smax_value);
733+
verbose_a("smax=%lld", (long long)reg->smax_value);
727734
if (reg->umin_value != 0)
728-
verbose(env, ",umin_value=%llu",
729-
(unsigned long long)reg->umin_value);
735+
verbose_a("umin=%llu", (unsigned long long)reg->umin_value);
730736
if (reg->umax_value != U64_MAX)
731-
verbose(env, ",umax_value=%llu",
732-
(unsigned long long)reg->umax_value);
737+
verbose_a("umax=%llu", (unsigned long long)reg->umax_value);
733738
if (!tnum_is_unknown(reg->var_off)) {
734739
char tn_buf[48];
735740

736741
tnum_strn(tn_buf, sizeof(tn_buf), reg->var_off);
737-
verbose(env, ",var_off=%s", tn_buf);
742+
verbose_a("var_off=%s", tn_buf);
738743
}
739744
if (reg->s32_min_value != reg->smin_value &&
740745
reg->s32_min_value != S32_MIN)
741-
verbose(env, ",s32_min_value=%d",
742-
(int)(reg->s32_min_value));
746+
verbose_a("s32_min=%d", (int)(reg->s32_min_value));
743747
if (reg->s32_max_value != reg->smax_value &&
744748
reg->s32_max_value != S32_MAX)
745-
verbose(env, ",s32_max_value=%d",
746-
(int)(reg->s32_max_value));
749+
verbose_a("s32_max=%d", (int)(reg->s32_max_value));
747750
if (reg->u32_min_value != reg->umin_value &&
748751
reg->u32_min_value != U32_MIN)
749-
verbose(env, ",u32_min_value=%d",
750-
(int)(reg->u32_min_value));
752+
verbose_a("u32_min=%d", (int)(reg->u32_min_value));
751753
if (reg->u32_max_value != reg->umax_value &&
752754
reg->u32_max_value != U32_MAX)
753-
verbose(env, ",u32_max_value=%d",
754-
(int)(reg->u32_max_value));
755+
verbose_a("u32_max=%d", (int)(reg->u32_max_value));
755756
}
756757
verbose(env, ")");
757758
}
758759
}
760+
761+
#undef verbose_append
762+
759763
for (i = 0; i < state->allocated_stack / BPF_REG_SIZE; i++) {
760764
char types_buf[BPF_REG_SIZE + 1];
761765
bool valid = false;

0 commit comments

Comments
 (0)