]> www.infradead.org Git - users/jedix/linux-maple.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)
committerDavid S. Miller <davem@davemloft.net>
Wed, 5 Jul 2023 09:51:14 +0000 (10:51 +0100)
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>
net/mptcp/protocol.c

index e892673deb73b48abdcaff1f24a3b962ee5d5d9d..489a3defdde5c1fa724f5cf681e78f248f2908b1 100644 (file)
@@ -2909,10 +2909,10 @@ 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);
        mptcp_event_pm_listener(ssk, MPTCP_EVENT_LISTENER_CLOSED);
-       tcp_set_state(ssk, TCP_CLOSE);
        release_sock(ssk);
 }