--- x/net/xdp/xsk.c +++ y/net/xdp/xsk.c @@ -1188,6 +1188,7 @@ static int xsk_bind(struct socket *sock, err = xp_alloc_tx_descs(xs->pool, xs); if (err) { xp_put_pool(xs->pool); + xs->pool = NULL; sockfd_put(sock); goto out_unlock; } @@ -1597,6 +1598,8 @@ static void xsk_destruct(struct sock *sk if (!sock_flag(sk, SOCK_DEAD)) return; + if (!xs->pool) + return; if (!xp_put_pool(xs->pool)) xdp_put_umem(xs->umem, !xs->pool);