]> 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:45:46 +0000 (11:45 +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 aed65bfe8480c1a7e4bd5a3783595c68151f4807..bcc94d03da21c72fc3a2de2d8ebb2d5801ab2081 100644 (file)
@@ -77,6 +77,13 @@ bool __mptcp_try_fallback(struct mptcp_sock *msk, int fb_mib)
        if (__mptcp_check_fallback(msk))
                return true;
 
+       /* 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_infinite_fallback) {
                spin_unlock_bh(&msk->fallback_lock);