return reg->type != SCALAR_VALUE;
 }
 
+static struct bpf_reg_state *reg_state(struct bpf_verifier_env *env, int regno)
+{
+       return cur_regs(env) + regno;
+}
+
 static bool is_pointer_value(struct bpf_verifier_env *env, int regno)
 {
-       return __is_pointer_value(env->allow_ptr_leaks, cur_regs(env) + regno);
+       return __is_pointer_value(env->allow_ptr_leaks, reg_state(env, regno));
 }
 
 static bool is_ctx_reg(struct bpf_verifier_env *env, int regno)
 {
-       const struct bpf_reg_state *reg = cur_regs(env) + regno;
+       const struct bpf_reg_state *reg = reg_state(env, regno);
 
        return reg->type == PTR_TO_CTX ||
               reg->type == PTR_TO_SOCKET;
 
 static bool is_pkt_reg(struct bpf_verifier_env *env, int regno)
 {
-       const struct bpf_reg_state *reg = cur_regs(env) + regno;
+       const struct bpf_reg_state *reg = reg_state(env, regno);
 
        return type_is_pkt_pointer(reg->type);
 }
        if (is_ctx_reg(env, insn->dst_reg) ||
            is_pkt_reg(env, insn->dst_reg)) {
                verbose(env, "BPF_XADD stores into R%d %s is not allowed\n",
-                       insn->dst_reg, reg_type_str[insn->dst_reg]);
+                       insn->dst_reg,
+                       reg_type_str[reg_state(env, insn->dst_reg)->type]);
                return -EACCES;
        }
 
                                int access_size, bool zero_size_allowed,
                                struct bpf_call_arg_meta *meta)
 {
-       struct bpf_reg_state *reg = cur_regs(env) + regno;
+       struct bpf_reg_state *reg = reg_state(env, regno);
        struct bpf_func_state *state = func(env, reg);
        int off, i, slot, spi;
 
 
                        if (is_ctx_reg(env, insn->dst_reg)) {
                                verbose(env, "BPF_ST stores into R%d %s is not allowed\n",
-                                       insn->dst_reg, reg_type_str[insn->dst_reg]);
+                                       insn->dst_reg,
+                                       reg_type_str[reg_state(env, insn->dst_reg)->type]);
                                return -EACCES;
                        }
 
 
                        BPF_ST_MEM(BPF_DW, BPF_REG_1, offsetof(struct __sk_buff, mark), 0),
                        BPF_EXIT_INSN(),
                },
-               .errstr = "BPF_ST stores into R1 inv is not allowed",
+               .errstr = "BPF_ST stores into R1 ctx is not allowed",
                .result = REJECT,
                .prog_type = BPF_PROG_TYPE_SCHED_CLS,
        },
                                     BPF_REG_0, offsetof(struct __sk_buff, mark), 0),
                        BPF_EXIT_INSN(),
                },
-               .errstr = "BPF_XADD stores into R1 inv is not allowed",
+               .errstr = "BPF_XADD stores into R1 ctx is not allowed",
                .result = REJECT,
                .prog_type = BPF_PROG_TYPE_SCHED_CLS,
        },
                .errstr_unpriv = "R2 leaks addr into mem",
                .result_unpriv = REJECT,
                .result = REJECT,
-               .errstr = "BPF_XADD stores into R1 inv is not allowed",
+               .errstr = "BPF_XADD stores into R1 ctx is not allowed",
        },
        {
                "leak pointer into ctx 2",
                .errstr_unpriv = "R10 leaks addr into mem",
                .result_unpriv = REJECT,
                .result = REJECT,
-               .errstr = "BPF_XADD stores into R1 inv is not allowed",
+               .errstr = "BPF_XADD stores into R1 ctx is not allowed",
        },
        {
                "leak pointer into ctx 3",
                        BPF_EXIT_INSN(),
                },
                .result = REJECT,
-               .errstr = "BPF_XADD stores into R2 ctx",
+               .errstr = "BPF_XADD stores into R2 pkt is not allowed",
                .prog_type = BPF_PROG_TYPE_XDP,
        },
        {