struct bpf_insn_access_aux *info)
 {
        const int size_default = sizeof(__u32);
+       int field_size;
 
        if (off < 0 || off >= sizeof(struct bpf_sock))
                return false;
        case offsetof(struct bpf_sock, family):
        case offsetof(struct bpf_sock, type):
        case offsetof(struct bpf_sock, protocol):
-       case offsetof(struct bpf_sock, dst_port):
        case offsetof(struct bpf_sock, src_port):
        case offsetof(struct bpf_sock, rx_queue_mapping):
        case bpf_ctx_range(struct bpf_sock, src_ip4):
        case bpf_ctx_range_till(struct bpf_sock, dst_ip6[0], dst_ip6[3]):
                bpf_ctx_record_field_size(info, size_default);
                return bpf_ctx_narrow_access_ok(off, size, size_default);
+       case bpf_ctx_range(struct bpf_sock, dst_port):
+               field_size = size == size_default ?
+                       size_default : sizeof_field(struct bpf_sock, dst_port);
+               bpf_ctx_record_field_size(info, field_size);
+               return bpf_ctx_narrow_access_ok(off, size, field_size);
+       case offsetofend(struct bpf_sock, dst_port) ...
+            offsetof(struct bpf_sock, dst_ip4) - 1:
+               return false;
        }
 
        return size == size_default;