]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - net/rxrpc/af_rxrpc.c
rxrpc: Fix service endpoint expiry
[mirror_ubuntu-bionic-kernel.git] / net / rxrpc / af_rxrpc.c
index c0cdcf980ffc35238f75c0fbd38a07633f905106..abb524c2b8f8cd25d6cc32cbbc7ba75a31c91463 100644 (file)
@@ -867,6 +867,19 @@ static int rxrpc_release_sock(struct sock *sk)
        sock_orphan(sk);
        sk->sk_shutdown = SHUTDOWN_MASK;
 
+       /* We want to kill off all connections from a service socket
+        * as fast as possible because we can't share these; client
+        * sockets, on the other hand, can share an endpoint.
+        */
+       switch (sk->sk_state) {
+       case RXRPC_SERVER_BOUND:
+       case RXRPC_SERVER_BOUND2:
+       case RXRPC_SERVER_LISTENING:
+       case RXRPC_SERVER_LISTEN_DISABLED:
+               rx->local->service_closed = true;
+               break;
+       }
+
        spin_lock_bh(&sk->sk_receive_queue.lock);
        sk->sk_state = RXRPC_CLOSE;
        spin_unlock_bh(&sk->sk_receive_queue.lock);