env,
                                regno, reg->off, access_size,
                                zero_size_allowed, ACCESS_HELPER, meta);
+       case PTR_TO_CTX:
+               /* in case the function doesn't know how to access the context,
+                * (because we are in a program of type SYSCALL for example), we
+                * can not statically check its size.
+                * Dynamically check it now.
+                */
+               if (!env->ops->convert_ctx_access) {
+                       enum bpf_access_type atype = meta && meta->raw_mode ? BPF_WRITE : BPF_READ;
+                       int offset = access_size - 1;
+
+                       /* Allow zero-byte read from PTR_TO_CTX */
+                       if (access_size == 0)
+                               return zero_size_allowed ? 0 : -EACCES;
+
+                       return check_mem_access(env, env->insn_idx, regno, offset, BPF_B,
+                                               atype, -1, false);
+               }
+
+               fallthrough;
        default: /* scalar_value or invalid ptr */
                /* Allow zero-byte read from NULL, regardless of pointer type */
                if (zero_size_allowed && access_size == 0 &&