|
@@ -2252,10 +2252,9 @@ static void __clear_all_pkt_pointers(struct bpf_verifier_env *env,
|
|
|
if (reg_is_pkt_pointer_any(®s[i]))
|
|
|
mark_reg_unknown(env, regs, i);
|
|
|
|
|
|
- for (i = 0; i < state->allocated_stack / BPF_REG_SIZE; i++) {
|
|
|
- if (state->stack[i].slot_type[0] != STACK_SPILL)
|
|
|
+ bpf_for_each_spilled_reg(i, state, reg) {
|
|
|
+ if (!reg)
|
|
|
continue;
|
|
|
- reg = &state->stack[i].spilled_ptr;
|
|
|
if (reg_is_pkt_pointer_any(reg))
|
|
|
__mark_reg_unknown(reg);
|
|
|
}
|
|
@@ -3395,10 +3394,9 @@ static void find_good_pkt_pointers(struct bpf_verifier_state *vstate,
|
|
|
|
|
|
for (j = 0; j <= vstate->curframe; j++) {
|
|
|
state = vstate->frame[j];
|
|
|
- for (i = 0; i < state->allocated_stack / BPF_REG_SIZE; i++) {
|
|
|
- if (state->stack[i].slot_type[0] != STACK_SPILL)
|
|
|
+ bpf_for_each_spilled_reg(i, state, reg) {
|
|
|
+ if (!reg)
|
|
|
continue;
|
|
|
- reg = &state->stack[i].spilled_ptr;
|
|
|
if (reg->type == type && reg->id == dst_reg->id)
|
|
|
reg->range = max(reg->range, new_range);
|
|
|
}
|
|
@@ -3643,7 +3641,7 @@ static void mark_map_regs(struct bpf_verifier_state *vstate, u32 regno,
|
|
|
bool is_null)
|
|
|
{
|
|
|
struct bpf_func_state *state = vstate->frame[vstate->curframe];
|
|
|
- struct bpf_reg_state *regs = state->regs;
|
|
|
+ struct bpf_reg_state *reg, *regs = state->regs;
|
|
|
u32 id = regs[regno].id;
|
|
|
int i, j;
|
|
|
|
|
@@ -3652,8 +3650,8 @@ static void mark_map_regs(struct bpf_verifier_state *vstate, u32 regno,
|
|
|
|
|
|
for (j = 0; j <= vstate->curframe; j++) {
|
|
|
state = vstate->frame[j];
|
|
|
- for (i = 0; i < state->allocated_stack / BPF_REG_SIZE; i++) {
|
|
|
- if (state->stack[i].slot_type[0] != STACK_SPILL)
|
|
|
+ bpf_for_each_spilled_reg(i, state, reg) {
|
|
|
+ if (!reg)
|
|
|
continue;
|
|
|
mark_map_reg(&state->stack[i].spilled_ptr, 0, id, is_null);
|
|
|
}
|