@@ -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