/* First find the starting scatterlist element */
        i = msg->sg.start;
        do {
+               offset += len;
                len = sk_msg_elem(msg, i)->length;
                if (start < offset + len)
                        break;
-               offset += len;
                sk_msg_iter_var_next(i);
        } while (i != msg->sg.end);
 
           u32, len, u64, flags)
 {
        struct scatterlist sge, nsge, nnsge, rsge = {0}, *psge;
-       u32 new, i = 0, l, space, copy = 0, offset = 0;
+       u32 new, i = 0, l = 0, space, copy = 0, offset = 0;
        u8 *raw, *to, *from;
        struct page *page;
 
        /* First find the starting scatterlist element */
        i = msg->sg.start;
        do {
+               offset += l;
                l = sk_msg_elem(msg, i)->length;
 
                if (start < offset + l)
                        break;
-               offset += l;
                sk_msg_iter_var_next(i);
        } while (i != msg->sg.end);
 
 BPF_CALL_4(bpf_msg_pop_data, struct sk_msg *, msg, u32, start,
           u32, len, u64, flags)
 {
-       u32 i = 0, l, space, offset = 0;
+       u32 i = 0, l = 0, space, offset = 0;
        u64 last = start + len;
        int pop;
 
        /* First find the starting scatterlist element */
        i = msg->sg.start;
        do {
+               offset += l;
                l = sk_msg_elem(msg, i)->length;
 
                if (start < offset + l)
                        break;
-               offset += l;
                sk_msg_iter_var_next(i);
        } while (i != msg->sg.end);