@@ -1640,12 +1640,13 @@ static int check_flow_keys_access(struct bpf_verifier_env *env, int off,
1640
1640
return 0 ;
1641
1641
}
1642
1642
1643
- static int check_sock_access (struct bpf_verifier_env * env , u32 regno , int off ,
1644
- int size , enum bpf_access_type t )
1643
+ static int check_sock_access (struct bpf_verifier_env * env , int insn_idx ,
1644
+ u32 regno , int off , int size ,
1645
+ enum bpf_access_type t )
1645
1646
{
1646
1647
struct bpf_reg_state * regs = cur_regs (env );
1647
1648
struct bpf_reg_state * reg = & regs [regno ];
1648
- struct bpf_insn_access_aux info ;
1649
+ struct bpf_insn_access_aux info = {} ;
1649
1650
1650
1651
if (reg -> smin_value < 0 ) {
1651
1652
verbose (env , "R%d min value is negative, either use unsigned index or do a if (index >=0) check.\n" ,
@@ -1659,6 +1660,8 @@ static int check_sock_access(struct bpf_verifier_env *env, u32 regno, int off,
1659
1660
return - EACCES ;
1660
1661
}
1661
1662
1663
+ env -> insn_aux_data [insn_idx ].ctx_field_size = info .ctx_field_size ;
1664
+
1662
1665
return 0 ;
1663
1666
}
1664
1667
@@ -2055,7 +2058,7 @@ static int check_mem_access(struct bpf_verifier_env *env, int insn_idx, u32 regn
2055
2058
verbose (env , "cannot write into socket\n" );
2056
2059
return - EACCES ;
2057
2060
}
2058
- err = check_sock_access (env , regno , off , size , t );
2061
+ err = check_sock_access (env , insn_idx , regno , off , size , t );
2059
2062
if (!err && value_regno >= 0 )
2060
2063
mark_reg_unknown (env , regs , value_regno );
2061
2064
} else {
0 commit comments