return insn - insn_buf;
 
        switch (si->off) {
-       case offsetof(struct bpf_sock_ops, op) ...
+       case offsetof(struct bpf_sock_ops, op):
+               *insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct bpf_sock_ops_kern,
+                                                      op),
+                                     si->dst_reg, si->src_reg,
+                                     offsetof(struct bpf_sock_ops_kern, op));
+               break;
+
+       case offsetof(struct bpf_sock_ops, replylong[0]) ...
             offsetof(struct bpf_sock_ops, replylong[3]):
-               BUILD_BUG_ON(sizeof_field(struct bpf_sock_ops, op) !=
-                            sizeof_field(struct bpf_sock_ops_kern, op));
                BUILD_BUG_ON(sizeof_field(struct bpf_sock_ops, reply) !=
                             sizeof_field(struct bpf_sock_ops_kern, reply));
                BUILD_BUG_ON(sizeof_field(struct bpf_sock_ops, replylong) !=
                             sizeof_field(struct bpf_sock_ops_kern, replylong));
                off = si->off;
-               off -= offsetof(struct bpf_sock_ops, op);
-               off += offsetof(struct bpf_sock_ops_kern, op);
+               off -= offsetof(struct bpf_sock_ops, replylong[0]);
+               off += offsetof(struct bpf_sock_ops_kern, replylong[0]);
                if (type == BPF_WRITE)
                        *insn++ = BPF_STX_MEM(BPF_W, si->dst_reg, si->src_reg,
                                              off);