--- x/net/smc/smc_close.c +++ y/net/smc/smc_close.c @@ -28,12 +28,14 @@ void smc_clcsock_release(struct smc_sock if (smc->listen_smc && current_work() != &smc->smc_listen_work) cancel_work_sync(&smc->smc_listen_work); mutex_lock(&smc->clcsock_release_lock); + tcp = NULL; if (smc->clcsock) { tcp = smc->clcsock; smc->clcsock = NULL; - sock_release(tcp); } mutex_unlock(&smc->clcsock_release_lock); + if (tcp) + sock_release(tcp); } static void smc_close_cleanup_listen(struct sock *parent)