@@ -539,7 +539,7 @@ static const char *reg_type_str(struct bpf_verifier_env *env,
539
539
char postfix [16 ] = {0 }, prefix [32 ] = {0 };
540
540
static const char * const str [] = {
541
541
[NOT_INIT ] = "?" ,
542
- [SCALAR_VALUE ] = "inv " ,
542
+ [SCALAR_VALUE ] = "" ,
543
543
[PTR_TO_CTX ] = "ctx" ,
544
544
[CONST_PTR_TO_MAP ] = "map_ptr" ,
545
545
[PTR_TO_MAP_VALUE ] = "map_value" ,
@@ -693,69 +693,73 @@ static void print_verifier_state(struct bpf_verifier_env *env,
693
693
/* reg->off should be 0 for SCALAR_VALUE */
694
694
verbose (env , "%lld" , reg -> var_off .value + reg -> off );
695
695
} else {
696
+ const char * sep = "" ;
697
+
696
698
if (base_type (t ) == PTR_TO_BTF_ID ||
697
699
base_type (t ) == PTR_TO_PERCPU_BTF_ID )
698
700
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 );
702
711
if (t != SCALAR_VALUE )
703
- verbose ( env , ", off=%d" , reg -> off );
712
+ verbose_a ( " off=%d" , reg -> off );
704
713
if (type_is_pkt_pointer (t ))
705
- verbose ( env , ", r=%d" , reg -> range );
714
+ verbose_a ( " r=%d" , reg -> range );
706
715
else if (base_type (t ) == CONST_PTR_TO_MAP ||
707
716
base_type (t ) == PTR_TO_MAP_KEY ||
708
717
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 );
712
721
if (tnum_is_const (reg -> var_off )) {
713
722
/* Typically an immediate SCALAR_VALUE, but
714
723
* could be a pointer whose offset is too big
715
724
* for reg->off
716
725
*/
717
- verbose ( env , ", imm=%llx" , reg -> var_off .value );
726
+ verbose_a ( " imm=%llx" , reg -> var_off .value );
718
727
} else {
719
728
if (reg -> smin_value != reg -> umin_value &&
720
729
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 );
723
731
if (reg -> smax_value != reg -> umax_value &&
724
732
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 );
727
734
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 );
730
736
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 );
733
738
if (!tnum_is_unknown (reg -> var_off )) {
734
739
char tn_buf [48 ];
735
740
736
741
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 );
738
743
}
739
744
if (reg -> s32_min_value != reg -> smin_value &&
740
745
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 ));
743
747
if (reg -> s32_max_value != reg -> smax_value &&
744
748
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 ));
747
750
if (reg -> u32_min_value != reg -> umin_value &&
748
751
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 ));
751
753
if (reg -> u32_max_value != reg -> umax_value &&
752
754
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 ));
755
756
}
756
757
verbose (env , ")" );
757
758
}
758
759
}
760
+
761
+ #undef verbose_append
762
+
759
763
for (i = 0 ; i < state -> allocated_stack / BPF_REG_SIZE ; i ++ ) {
760
764
char types_buf [BPF_REG_SIZE + 1 ];
761
765
bool valid = false;
0 commit comments