aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2021-11-23 11:42:24 +0000
committerDavid S. Miller <davem@davemloft.net>2021-11-23 11:42:24 +0000
commit5789d04b77126752ab1d70c7f7fc00d65401cb1d (patch)
tree53ebd6421a293b12831d3682f13b2a5451c86843
parentnet: nexthop: fix null pointer dereference when IPv6 is not enabled (diff)
parentnet/smc: Ensure the active closing peer first closes clcsock (diff)
downloadwireguard-linux-5789d04b77126752ab1d70c7f7fc00d65401cb1d.tar.xz
wireguard-linux-5789d04b77126752ab1d70c7f7fc00d65401cb1d.zip
Merge branch 'smc-fixes'
Tony Lu says: ==================== smc: Fixes for closing process and minor cleanup Patch 1 is a minor cleanup for local struct sock variables. Patch 2 ensures the active closing side enters TIME_WAIT. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/smc/smc_close.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/net/smc/smc_close.c b/net/smc/smc_close.c
index 0f9ffba07d26..3715d2f5ad55 100644
--- a/net/smc/smc_close.c
+++ b/net/smc/smc_close.c
@@ -228,6 +228,12 @@ again:
/* send close request */
rc = smc_close_final(conn);
sk->sk_state = SMC_PEERCLOSEWAIT1;
+
+ /* actively shutdown clcsock before peer close it,
+ * prevent peer from entering TIME_WAIT state.
+ */
+ if (smc->clcsock && smc->clcsock->sk)
+ rc = kernel_sock_shutdown(smc->clcsock, SHUT_RDWR);
} else {
/* peer event has changed the state */
goto again;
@@ -354,9 +360,9 @@ static void smc_close_passive_work(struct work_struct *work)
if (rxflags->peer_conn_abort) {
/* peer has not received all data */
smc_close_passive_abort_received(smc);
- release_sock(&smc->sk);
+ release_sock(sk);
cancel_delayed_work_sync(&conn->tx_work);
- lock_sock(&smc->sk);
+ lock_sock(sk);
goto wakeup;
}