]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mptcp: ensure subflow is unhashed before cleaning the backlog
authorPaolo Abeni <pabeni@redhat.com>
Tue, 4 Jul 2023 20:44:33 +0000 (22:44 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 3 Aug 2023 08:24:18 +0000 (10:24 +0200)
commit 3fffa15bfef48b0ad6424779c03e68ae8ace5acb upstream.

While tacking care of the mptcp-level listener I unintentionally
moved the subflow level unhash after the subflow listener backlog
cleanup.

That could cause some nasty race and makes the code harder to read.

Address the issue restoring the proper order of operations.

Fixes: 57fc0f1ceaa4 ("mptcp: ensure listener is unhashed before updating the sk status")
Cc: stable@vger.kernel.org
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/mptcp/protocol.c

index 37ff6766fd52644b3735df274e5230bb78e3070c..f6f2e6417dcbe7d637dbd6f52b9952575820147e 100644 (file)
@@ -2945,9 +2945,9 @@ static void mptcp_check_listen_stop(struct sock *sk)
                return;
 
        lock_sock_nested(ssk, SINGLE_DEPTH_NESTING);
+       tcp_set_state(ssk, TCP_CLOSE);
        mptcp_subflow_queue_clean(sk, ssk);
        inet_csk_listen_stop(ssk);
-       tcp_set_state(ssk, TCP_CLOSE);
        release_sock(ssk);
 }