--- x/net/core/sock_map.c +++ y/net/core/sock_map.c @@ -188,7 +188,7 @@ static void sock_map_unref(struct sock * static int sock_map_init_proto(struct sock *sk, struct sk_psock *psock) { - if (!sk->sk_prot->psock_update_sk_prot) + if (!sk->sk_prot->psock_update_sk_prot || sk->sk_prot->close == sock_map_close) return -EINVAL; psock->psock_update_sk_prot = sk->sk_prot->psock_update_sk_prot; return sk->sk_prot->psock_update_sk_prot(sk, psock, false);