Lines Matching refs:ptr_reg

4203 static int retrieve_ptr_limit(const struct bpf_reg_state *ptr_reg,  in retrieve_ptr_limit()  argument
4210 switch (ptr_reg->type) { in retrieve_ptr_limit()
4215 off = ptr_reg->off + ptr_reg->var_off.value; in retrieve_ptr_limit()
4223 *ptr_limit = ptr_reg->umax_value + ptr_reg->off; in retrieve_ptr_limit()
4225 off = ptr_reg->smin_value + ptr_reg->off; in retrieve_ptr_limit()
4226 *ptr_limit = ptr_reg->map_ptr->value_size - off; in retrieve_ptr_limit()
4270 const struct bpf_reg_state *ptr_reg, in sanitize_ptr_alu() argument
4276 bool ptr_is_dst_reg = ptr_reg == dst_reg; in sanitize_ptr_alu()
4296 if (retrieve_ptr_limit(ptr_reg, &alu_limit, opcode, off_is_neg)) in sanitize_ptr_alu()
4312 *dst_reg = *ptr_reg; in sanitize_ptr_alu()
4327 const struct bpf_reg_state *ptr_reg, in adjust_ptr_min_max_vals() argument
4335 smin_ptr = ptr_reg->smin_value, smax_ptr = ptr_reg->smax_value; in adjust_ptr_min_max_vals()
4337 umin_ptr = ptr_reg->umin_value, umax_ptr = ptr_reg->umax_value; in adjust_ptr_min_max_vals()
4361 switch (ptr_reg->type) { in adjust_ptr_min_max_vals()
4364 dst, reg_type_str[ptr_reg->type]); in adjust_ptr_min_max_vals()
4376 dst, reg_type_str[ptr_reg->type]); in adjust_ptr_min_max_vals()
4392 dst_reg->type = ptr_reg->type; in adjust_ptr_min_max_vals()
4393 dst_reg->id = ptr_reg->id; in adjust_ptr_min_max_vals()
4395 if (!check_reg_sane_offset(env, off_reg, ptr_reg->type) || in adjust_ptr_min_max_vals()
4396 !check_reg_sane_offset(env, ptr_reg, ptr_reg->type)) in adjust_ptr_min_max_vals()
4401 ret = sanitize_ptr_alu(env, insn, ptr_reg, dst_reg, smin_val < 0); in adjust_ptr_min_max_vals()
4409 if (known && (ptr_reg->off + smin_val == in adjust_ptr_min_max_vals()
4410 (s64)(s32)(ptr_reg->off + smin_val))) { in adjust_ptr_min_max_vals()
4416 dst_reg->var_off = ptr_reg->var_off; in adjust_ptr_min_max_vals()
4417 dst_reg->off = ptr_reg->off + smin_val; in adjust_ptr_min_max_vals()
4418 dst_reg->raw = ptr_reg->raw; in adjust_ptr_min_max_vals()
4446 dst_reg->var_off = tnum_add(ptr_reg->var_off, off_reg->var_off); in adjust_ptr_min_max_vals()
4447 dst_reg->off = ptr_reg->off; in adjust_ptr_min_max_vals()
4448 dst_reg->raw = ptr_reg->raw; in adjust_ptr_min_max_vals()
4449 if (reg_is_pkt_pointer(ptr_reg)) { in adjust_ptr_min_max_vals()
4456 ret = sanitize_ptr_alu(env, insn, ptr_reg, dst_reg, smin_val < 0); in adjust_ptr_min_max_vals()
4471 if (ptr_reg->type == PTR_TO_STACK) { in adjust_ptr_min_max_vals()
4476 if (known && (ptr_reg->off - smin_val == in adjust_ptr_min_max_vals()
4477 (s64)(s32)(ptr_reg->off - smin_val))) { in adjust_ptr_min_max_vals()
4483 dst_reg->var_off = ptr_reg->var_off; in adjust_ptr_min_max_vals()
4484 dst_reg->id = ptr_reg->id; in adjust_ptr_min_max_vals()
4485 dst_reg->off = ptr_reg->off - smin_val; in adjust_ptr_min_max_vals()
4486 dst_reg->raw = ptr_reg->raw; in adjust_ptr_min_max_vals()
4510 dst_reg->var_off = tnum_sub(ptr_reg->var_off, off_reg->var_off); in adjust_ptr_min_max_vals()
4511 dst_reg->off = ptr_reg->off; in adjust_ptr_min_max_vals()
4512 dst_reg->raw = ptr_reg->raw; in adjust_ptr_min_max_vals()
4513 if (reg_is_pkt_pointer(ptr_reg)) { in adjust_ptr_min_max_vals()
4534 if (!check_reg_sane_offset(env, dst_reg, ptr_reg->type)) in adjust_ptr_min_max_vals()
4850 struct bpf_reg_state *ptr_reg = NULL, off_reg = {0}; in adjust_reg_min_max_vals() local
4857 ptr_reg = dst_reg; in adjust_reg_min_max_vals()
4885 } else if (ptr_reg) { in adjust_reg_min_max_vals()
4900 if (ptr_reg) /* pointer += K */ in adjust_reg_min_max_vals()
4902 ptr_reg, src_reg); in adjust_reg_min_max_vals()
4906 if (WARN_ON_ONCE(ptr_reg)) { in adjust_reg_min_max_vals()