return 0;
 }
 
-static int mark_dynptr_read(struct bpf_verifier_env *env, struct bpf_reg_state *reg)
+static int mark_stack_slot_obj_read(struct bpf_verifier_env *env, struct bpf_reg_state *reg,
+                                   int spi, int nr_slots)
 {
        struct bpf_func_state *state = func(env, reg);
-       int spi, ret;
+       int err, i;
+
+       for (i = 0; i < nr_slots; i++) {
+               struct bpf_reg_state *st = &state->stack[spi - i].spilled_ptr;
+
+               err = mark_reg_read(env, st, st->parent, REG_LIVE_READ64);
+               if (err)
+                       return err;
+
+               mark_stack_slot_scratched(env, spi - i);
+       }
+       return 0;
+}
+
+static int mark_dynptr_read(struct bpf_verifier_env *env, struct bpf_reg_state *reg)
+{
+       int spi;
 
        /* For CONST_PTR_TO_DYNPTR, it must have already been done by
         * check_reg_arg in check_helper_call and mark_btf_func_reg_size in
         * bounds and spi is the first dynptr slot. Simply mark stack slot as
         * read.
         */
-       ret = mark_reg_read(env, &state->stack[spi].spilled_ptr,
-                           state->stack[spi].spilled_ptr.parent, REG_LIVE_READ64);
-       if (ret)
-               return ret;
-       return mark_reg_read(env, &state->stack[spi - 1].spilled_ptr,
-                            state->stack[spi - 1].spilled_ptr.parent, REG_LIVE_READ64);
+       return mark_stack_slot_obj_read(env, reg, spi, BPF_DYNPTR_NR_SLOTS);
 }
 
 static int mark_iter_read(struct bpf_verifier_env *env, struct bpf_reg_state *reg,
                          int spi, int nr_slots)
 {
-       struct bpf_func_state *state = func(env, reg);
-       int err, i;
-
-       for (i = 0; i < nr_slots; i++) {
-               struct bpf_reg_state *st = &state->stack[spi - i].spilled_ptr;
-
-               err = mark_reg_read(env, st, st->parent, REG_LIVE_READ64);
-               if (err)
-                       return err;
-
-               mark_stack_slot_scratched(env, spi - i);
-       }
-
-       return 0;
+       return mark_stack_slot_obj_read(env, reg, spi, nr_slots);
 }
 
 /* This function is supposed to be used by the following 32-bit optimization