]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mptcp: do not fallback when OoO is present
authorPaolo Abeni <pabeni@redhat.com>
Tue, 18 Nov 2025 07:20:22 +0000 (08:20 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 1 Dec 2025 10:43:27 +0000 (11:43 +0100)
commit 1bba3f219c5e8c29e63afa3c1fc24f875ebec119 upstream.

In case of DSS corruption, the MPTCP protocol tries to avoid the subflow
reset if fallback is possible. Such corruptions happen in the receive
path; to ensure fallback is possible the stack additionally needs to
check for OoO data, otherwise the fallback will break the data stream.

Fixes: e32d262c89e2 ("mptcp: handle consistently DSS corruption")
Cc: stable@vger.kernel.org
Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/598
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20251118-net-mptcp-misc-fixes-6-18-rc6-v1-4-806d3781c95f@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/mptcp/protocol.c

index 6c1f96f6ae392e972cfb5cc6d2426817956746d3..0087a598a383d8518a04ac3e90a62239795a521b 100644 (file)
@@ -906,6 +906,13 @@ static bool __mptcp_finish_join(struct mptcp_sock *msk, struct sock *ssk)
        if (sk->sk_state != TCP_ESTABLISHED)
                return false;
 
+       /* The caller possibly is not holding the msk socket lock, but
+        * in the fallback case only the current subflow is touching
+        * the OoO queue.
+        */
+       if (!RB_EMPTY_ROOT(&msk->out_of_order_queue))
+               return false;
+
        spin_lock_bh(&msk->fallback_lock);
        if (!msk->allow_subflows) {
                spin_unlock_bh(&msk->fallback_lock);