FAILED: patch "[PATCH] mptcp: reset rcv wnd on disconnect" failed to apply to 6.12-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 6.12-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.12.y
git checkout FETCH_HEAD
git cherry-pick -x 0981f90e1a05773a4c29c6e720f5ea1e3c8f1876
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026052850-revocable-pessimism-d52d@gregkh' --subject-prefix 'PATCH 6.12.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 0981f90e1a05773a4c29c6e720f5ea1e3c8f1876 Mon Sep 17 00:00:00 2001
From: Paolo Abeni <[email protected]>
Date: Fri, 15 May 2026 06:27:35 +0200
Subject: [PATCH] mptcp: reset rcv wnd on disconnect
If the MPTCP socket fallback to TCP before the MP handshake completion, the IASN remain 0, and the rcv_wnd_sent field is not explicitly initialized, just incremented over time with the data transfer.
At disconnect time such value is not cleared. If the next connection falls back to TCP before the MP handshake completion, the data transfer will keep incrementing the receive window end sequence starting from the last value used in the previous connection: the announced window will be unrelated from the actual receiver buffer size and likely too big.
Address the issue zeroing the field at disconnect time.
net/mptcp/protocol.c +1 -0
@@ -3487,6 +3487,7 @@ static int mptcp_disconnect(struct sock *sk, int flags)/* for fallback's sake */ WRITE_ONCE (msk->ack_seq,0 ); +atomic64_set (&msk->rcv_wnd_sent,0 );WRITE_ONCE (sk->sk_shutdown,0 );sk_error_report (sk);
Sasha Levin
maintainerPATCH 1/2 mptcp: cleanup fallback dummy mapping generation
From: Paolo Abeni <[email protected]>
[ Upstream commit 2834f8edd74d5dda368087a654c0e52b141e9893 ]
MPTCP currently access ack_seq outside the msk socket log scope to generate the dummy mapping for fallback socket. Soon we are going to introduce backlog usage and even for fallback socket the ack_seq value will be significantly off outside of the msk socket lock scope.
Avoid relying on ack_seq for dummy mapping generation, using instead the subflow sequence number. Note that in case of disconnect() and (re)connect() we must ensure that any previous state is re-set.
Stable-dep-of: 0981f90e1a05 ("mptcp: reset rcv wnd on disconnect")
--- net/mptcp/protocol.c | 3 +++ net/mptcp/subflow.c | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-)
net/mptcp/protocol.c +3 -0
@@ -3369,6 +3369,9 @@ static int mptcp_disconnect(struct sock *sk, int flags) msk->rcvspace_init =0 ; msk->fastclosing =0 ; +/* for fallback's sake */ +WRITE_ONCE (msk->ack_seq,0 ); +WRITE_ONCE (sk->sk_shutdown,0 );sk_error_report (sk);return 0 ;
net/mptcp/subflow.c +7 -1
@@ -490,6 +490,9 @@ static void subflow_set_remote_key(struct mptcp_sock *msk,mptcp_crypto_key_sha (subflow->remote_key,NULL , &subflow->iasn); subflow->iasn++; +/* for fallback's sake */ + subflow->map_seq = subflow->iasn; +WRITE_ONCE (msk->remote_key, subflow->remote_key);WRITE_ONCE (msk->ack_seq, subflow->iasn);WRITE_ONCE (msk->can_ack, true);
@@ -1415,9 +1418,12 @@ static bool subflow_check_data_avail(struct sock *ssk) skb =skb_peek (&ssk->sk_receive_queue); subflow->map_valid =1 ; - subflow->map_seq =READ_ONCE (msk->ack_seq); subflow->map_data_len = skb->len; subflow->map_subflow_seq =tcp_sk (ssk)->copied_seq - subflow->ssn_offset; + subflow->map_seq =__mptcp_expand_seq (subflow->map_seq, + subflow->iasn + +TCP_SKB_CB (skb)->seq - + subflow->ssn_offset -1 );WRITE_ONCE (subflow->data_avail, true);return true; }
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/2 mptcp: reset rcv wnd on disconnect
From: Paolo Abeni <[email protected]>
[ Upstream commit 0981f90e1a05773a4c29c6e720f5ea1e3c8f1876 ]
If the MPTCP socket fallback to TCP before the MP handshake completion, the IASN remain 0, and the rcv_wnd_sent field is not explicitly initialized, just incremented over time with the data transfer.
At disconnect time such value is not cleared. If the next connection falls back to TCP before the MP handshake completion, the data transfer will keep incrementing the receive window end sequence starting from the last value used in the previous connection: the announced window will be unrelated from the actual receiver buffer size and likely too big.
Address the issue zeroing the field at disconnect time.
--- net/mptcp/protocol.c | 1 + 1 file changed, 1 insertion(+)
net/mptcp/protocol.c +1 -0
@@ -3371,6 +3371,7 @@ static int mptcp_disconnect(struct sock *sk, int flags)/* for fallback's sake */ WRITE_ONCE (msk->ack_seq,0 ); +atomic64_set (&msk->rcv_wnd_sent,0 );WRITE_ONCE (sk->sk_shutdown,0 );sk_error_report (sk);
Signature · 1 line
2.53.0