return -EACCES;
        }
 
-       if (env->ops->btf_struct_access && !type_is_alloc(reg->type)) {
+       if (env->ops->btf_struct_access && !type_is_alloc(reg->type) && atype == BPF_WRITE) {
                if (!btf_is_kernel(reg->btf)) {
                        verbose(env, "verifier internal error: reg->btf must be kernel btf\n");
                        return -EFAULT;
 
 {
        int ret = -EACCES;
 
-       if (atype == BPF_READ)
-               return btf_struct_access(log, reg, off, size, atype, next_btf_id, flag);
-
        mutex_lock(&nf_conn_btf_access_lock);
        if (nfct_btf_struct_access)
                ret = nfct_btf_struct_access(log, reg, off, size, atype, next_btf_id, flag);
 {
        int ret = -EACCES;
 
-       if (atype == BPF_READ)
-               return btf_struct_access(log, reg, off, size, atype, next_btf_id, flag);
-
        mutex_lock(&nf_conn_btf_access_lock);
        if (nfct_btf_struct_access)
                ret = nfct_btf_struct_access(log, reg, off, size, atype, next_btf_id, flag);
 
        const struct btf_type *t;
        size_t end;
 
-       if (atype == BPF_READ)
-               return btf_struct_access(log, reg, off, size, atype, next_btf_id, flag);
-
        t = btf_type_by_id(reg->btf, reg->btf_id);
        if (t != tcp_sock_type) {
                bpf_log(log, "only read is supported\n");