* [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7
@ 2025-11-18 7:20 Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 01/11] mptcp: fix ack generation for fallback msk Matthieu Baerts (NGI0)
` (11 more replies)
0 siblings, 12 replies; 15+ messages in thread
From: Matthieu Baerts (NGI0) @ 2025-11-18 7:20 UTC (permalink / raw)
To: Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman, Shuah Khan,
Florian Westphal
Cc: netdev, mptcp, linux-kernel, linux-kselftest,
Matthieu Baerts (NGI0), stable, Gang Yan
Here are various unrelated fixes:
- Patch 1: Fix window space computation for fallback connections which
can affect ACK generation. A fix for v5.11.
- Patch 2: Avoid unneeded subflow-level drops due to unsynced received
window. A fix for v5.11.
- Patch 3: Avoid premature close for fallback connections with PREEMPT
kernels. A fix for v5.12.
- Patch 4: Reset instead of fallback in case of data in the MPTCP
out-of-order queue. A fix for v5.7.
- Patches 5-7: Avoid also sending "plain" TCP reset when closing with an
MP_FASTCLOSE. A fix for v6.1.
- Patches 8-9: Longer timeout for background connections in MPTCP Join
selftests. An additional fix for recent patches for v5.13/v6.1.
- Patches 10-11: Fix typo in a check introduce in a recent refactoring.
A fix for v6.15.
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
Gang Yan (2):
mptcp: fix address removal logic in mptcp_pm_nl_rm_addr
selftests: mptcp: add a check for 'add_addr_accepted'
Matthieu Baerts (NGI0) (3):
selftests: mptcp: join: fastclose: remove flaky marks
selftests: mptcp: join: endpoints: longer timeout
selftests: mptcp: join: userspace: longer timeout
Paolo Abeni (6):
mptcp: fix ack generation for fallback msk
mptcp: avoid unneeded subflow-level drops
mptcp: fix premature close in case of fallback
mptcp: do not fallback when OoO is present
mptcp: decouple mptcp fastclose from tcp close
mptcp: fix duplicate reset on fastclose
net/mptcp/options.c | 54 +++++++++++++++++++++-
net/mptcp/pm_kernel.c | 2 +-
net/mptcp/protocol.c | 59 +++++++++++++++++--------
net/mptcp/protocol.h | 3 +-
tools/testing/selftests/net/mptcp/mptcp_join.sh | 27 ++++++-----
5 files changed, 113 insertions(+), 32 deletions(-)
---
base-commit: 8e0a754b0836d996802713bbebc87bc1cc17925c
change-id: 20251117-net-mptcp-misc-fixes-6-18-rc6-835d94cdc095
Best regards,
--
Matthieu Baerts (NGI0) <matttbe@kernel.org>
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH net 01/11] mptcp: fix ack generation for fallback msk
2025-11-18 7:20 [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7 Matthieu Baerts (NGI0)
@ 2025-11-18 7:20 ` Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 02/11] mptcp: avoid unneeded subflow-level drops Matthieu Baerts (NGI0)
` (10 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Matthieu Baerts (NGI0) @ 2025-11-18 7:20 UTC (permalink / raw)
To: Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman, Shuah Khan,
Florian Westphal
Cc: netdev, mptcp, linux-kernel, linux-kselftest,
Matthieu Baerts (NGI0), stable
From: Paolo Abeni <pabeni@redhat.com>
mptcp_cleanup_rbuf() needs to know the last most recent, mptcp-level
rcv_wnd sent, and such information is tracked into the msk->old_wspace
field, updated at ack transmission time by mptcp_write_options().
Fallback socket do not add any mptcp options, such helper is never
invoked, and msk->old_wspace value remain stale. That in turn makes
ack generation at recvmsg() time quite random.
Address the issue ensuring mptcp_write_options() is invoked even for
fallback sockets, and just update the needed info in such a case.
The issue went unnoticed for a long time, as mptcp currently overshots
the fallback socket receive buffer autotune significantly. It is going
to change in the near future.
Fixes: e3859603ba13 ("mptcp: better msk receive window updates")
Cc: stable@vger.kernel.org
Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/594
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Geliang Tang <geliang@kernel.org>
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
net/mptcp/options.c | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/net/mptcp/options.c b/net/mptcp/options.c
index 1103b3341a70..8a63bd00807d 100644
--- a/net/mptcp/options.c
+++ b/net/mptcp/options.c
@@ -838,8 +838,11 @@ bool mptcp_established_options(struct sock *sk, struct sk_buff *skb,
opts->suboptions = 0;
+ /* Force later mptcp_write_options(), but do not use any actual
+ * option space.
+ */
if (unlikely(__mptcp_check_fallback(msk) && !mptcp_check_infinite_map(skb)))
- return false;
+ return true;
if (unlikely(skb && TCP_SKB_CB(skb)->tcp_flags & TCPHDR_RST)) {
if (mptcp_established_options_fastclose(sk, &opt_size, remaining, opts) ||
@@ -1319,6 +1322,20 @@ static void mptcp_set_rwin(struct tcp_sock *tp, struct tcphdr *th)
WRITE_ONCE(msk->old_wspace, tp->rcv_wnd);
}
+static void mptcp_track_rwin(struct tcp_sock *tp)
+{
+ const struct sock *ssk = (const struct sock *)tp;
+ struct mptcp_subflow_context *subflow;
+ struct mptcp_sock *msk;
+
+ if (!ssk)
+ return;
+
+ subflow = mptcp_subflow_ctx(ssk);
+ msk = mptcp_sk(subflow->conn);
+ WRITE_ONCE(msk->old_wspace, tp->rcv_wnd);
+}
+
__sum16 __mptcp_make_csum(u64 data_seq, u32 subflow_seq, u16 data_len, __wsum sum)
{
struct csum_pseudo_header header;
@@ -1611,6 +1628,10 @@ void mptcp_write_options(struct tcphdr *th, __be32 *ptr, struct tcp_sock *tp,
opts->reset_transient,
opts->reset_reason);
return;
+ } else if (unlikely(!opts->suboptions)) {
+ /* Fallback to TCP */
+ mptcp_track_rwin(tp);
+ return;
}
if (OPTION_MPTCP_PRIO & opts->suboptions) {
--
2.51.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH net 02/11] mptcp: avoid unneeded subflow-level drops
2025-11-18 7:20 [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7 Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 01/11] mptcp: fix ack generation for fallback msk Matthieu Baerts (NGI0)
@ 2025-11-18 7:20 ` Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 03/11] mptcp: fix premature close in case of fallback Matthieu Baerts (NGI0)
` (9 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Matthieu Baerts (NGI0) @ 2025-11-18 7:20 UTC (permalink / raw)
To: Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman, Shuah Khan,
Florian Westphal
Cc: netdev, mptcp, linux-kernel, linux-kselftest,
Matthieu Baerts (NGI0), stable
From: Paolo Abeni <pabeni@redhat.com>
The rcv window is shared among all the subflows. Currently, MPTCP sync
the TCP-level rcv window with the MPTCP one at tcp_transmit_skb() time.
The above means that incoming data may sporadically observe outdated
TCP-level rcv window and being wrongly dropped by TCP.
Address the issue checking for the edge condition before queuing the
data at TCP level, and eventually syncing the rcv window as needed.
Note that the issue is actually present from the very first MPTCP
implementation, but backports older than the blamed commit below will
range from impossible to useless.
Before:
$ nstat -n; sleep 1; nstat -z TcpExtBeyondWindow
TcpExtBeyondWindow 14 0.0
After:
$ nstat -n; sleep 1; nstat -z TcpExtBeyondWindow
TcpExtBeyondWindow 0 0.0
Fixes: fa3fe2b15031 ("mptcp: track window announced to peer")
Cc: stable@vger.kernel.org
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>
---
net/mptcp/options.c | 31 +++++++++++++++++++++++++++++++
net/mptcp/protocol.h | 1 +
2 files changed, 32 insertions(+)
diff --git a/net/mptcp/options.c b/net/mptcp/options.c
index 8a63bd00807d..f24ae7d40e88 100644
--- a/net/mptcp/options.c
+++ b/net/mptcp/options.c
@@ -1044,6 +1044,31 @@ static void __mptcp_snd_una_update(struct mptcp_sock *msk, u64 new_snd_una)
WRITE_ONCE(msk->snd_una, new_snd_una);
}
+static void rwin_update(struct mptcp_sock *msk, struct sock *ssk,
+ struct sk_buff *skb)
+{
+ struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
+ struct tcp_sock *tp = tcp_sk(ssk);
+ u64 mptcp_rcv_wnd;
+
+ /* Avoid touching extra cachelines if TCP is going to accept this
+ * skb without filling the TCP-level window even with a possibly
+ * outdated mptcp-level rwin.
+ */
+ if (!skb->len || skb->len < tcp_receive_window(tp))
+ return;
+
+ mptcp_rcv_wnd = atomic64_read(&msk->rcv_wnd_sent);
+ if (!after64(mptcp_rcv_wnd, subflow->rcv_wnd_sent))
+ return;
+
+ /* Some other subflow grew the mptcp-level rwin since rcv_wup,
+ * resync.
+ */
+ tp->rcv_wnd += mptcp_rcv_wnd - subflow->rcv_wnd_sent;
+ subflow->rcv_wnd_sent = mptcp_rcv_wnd;
+}
+
static void ack_update_msk(struct mptcp_sock *msk,
struct sock *ssk,
struct mptcp_options_received *mp_opt)
@@ -1211,6 +1236,7 @@ bool mptcp_incoming_options(struct sock *sk, struct sk_buff *skb)
*/
if (mp_opt.use_ack)
ack_update_msk(msk, sk, &mp_opt);
+ rwin_update(msk, sk, skb);
/* Zero-data-length packets are dropped by the caller and not
* propagated to the MPTCP layer, so the skb extension does not
@@ -1297,6 +1323,10 @@ static void mptcp_set_rwin(struct tcp_sock *tp, struct tcphdr *th)
if (rcv_wnd_new != rcv_wnd_old) {
raise_win:
+ /* The msk-level rcv wnd is after the tcp level one,
+ * sync the latter.
+ */
+ rcv_wnd_new = rcv_wnd_old;
win = rcv_wnd_old - ack_seq;
tp->rcv_wnd = min_t(u64, win, U32_MAX);
new_win = tp->rcv_wnd;
@@ -1320,6 +1350,7 @@ static void mptcp_set_rwin(struct tcp_sock *tp, struct tcphdr *th)
update_wspace:
WRITE_ONCE(msk->old_wspace, tp->rcv_wnd);
+ subflow->rcv_wnd_sent = rcv_wnd_new;
}
static void mptcp_track_rwin(struct tcp_sock *tp)
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 379a88e14e8d..5575ef64ea31 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -509,6 +509,7 @@ struct mptcp_subflow_context {
u64 remote_key;
u64 idsn;
u64 map_seq;
+ u64 rcv_wnd_sent;
u32 snd_isn;
u32 token;
u32 rel_write_seq;
--
2.51.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH net 03/11] mptcp: fix premature close in case of fallback
2025-11-18 7:20 [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7 Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 01/11] mptcp: fix ack generation for fallback msk Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 02/11] mptcp: avoid unneeded subflow-level drops Matthieu Baerts (NGI0)
@ 2025-11-18 7:20 ` Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 04/11] mptcp: do not fallback when OoO is present Matthieu Baerts (NGI0)
` (8 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Matthieu Baerts (NGI0) @ 2025-11-18 7:20 UTC (permalink / raw)
To: Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman, Shuah Khan,
Florian Westphal
Cc: netdev, mptcp, linux-kernel, linux-kselftest,
Matthieu Baerts (NGI0), stable
From: Paolo Abeni <pabeni@redhat.com>
I'm observing very frequent self-tests failures in case of fallback when
running on a CONFIG_PREEMPT kernel.
The root cause is that subflow_sched_work_if_closed() closes any subflow
as soon as it is half-closed and has no incoming data pending.
That works well for regular subflows - MPTCP needs bi-directional
connectivity to operate on a given subflow - but for fallback socket is
race prone.
When TCP peer closes the connection before the MPTCP one,
subflow_sched_work_if_closed() will schedule the MPTCP worker to
gracefully close the subflow, and shortly after will do another schedule
to inject and process a dummy incoming DATA_FIN.
On CONFIG_PREEMPT kernel, the MPTCP worker can kick-in and close the
fallback subflow before subflow_sched_work_if_closed() is able to create
the dummy DATA_FIN, unexpectedly interrupting the transfer.
Address the issue explicitly avoiding closing fallback subflows on when
the peer is only half-closed.
Note that, when the subflow is able to create the DATA_FIN before the
worker invocation, the worker will change the msk state before trying to
close the subflow and will skip the latter operation as the msk will not
match anymore the precondition in __mptcp_close_subflow().
Fixes: f09b0ad55a11 ("mptcp: close subflow when receiving TCP+FIN")
Cc: stable@vger.kernel.org
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>
---
net/mptcp/protocol.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index e27e0fe2460f..e30e9043a694 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -2563,7 +2563,8 @@ static void __mptcp_close_subflow(struct sock *sk)
if (ssk_state != TCP_CLOSE &&
(ssk_state != TCP_CLOSE_WAIT ||
- inet_sk_state_load(sk) != TCP_ESTABLISHED))
+ inet_sk_state_load(sk) != TCP_ESTABLISHED ||
+ __mptcp_check_fallback(msk)))
continue;
/* 'subflow_data_ready' will re-sched once rx queue is empty */
--
2.51.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH net 04/11] mptcp: do not fallback when OoO is present
2025-11-18 7:20 [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7 Matthieu Baerts (NGI0)
` (2 preceding siblings ...)
2025-11-18 7:20 ` [PATCH net 03/11] mptcp: fix premature close in case of fallback Matthieu Baerts (NGI0)
@ 2025-11-18 7:20 ` Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 05/11] mptcp: decouple mptcp fastclose from tcp close Matthieu Baerts (NGI0)
` (7 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Matthieu Baerts (NGI0) @ 2025-11-18 7:20 UTC (permalink / raw)
To: Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman, Shuah Khan,
Florian Westphal
Cc: netdev, mptcp, linux-kernel, linux-kselftest,
Matthieu Baerts (NGI0), stable
From: Paolo Abeni <pabeni@redhat.com>
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>
---
net/mptcp/protocol.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index e30e9043a694..6f0e8f670d83 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -76,6 +76,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);
--
2.51.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH net 05/11] mptcp: decouple mptcp fastclose from tcp close
2025-11-18 7:20 [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7 Matthieu Baerts (NGI0)
` (3 preceding siblings ...)
2025-11-18 7:20 ` [PATCH net 04/11] mptcp: do not fallback when OoO is present Matthieu Baerts (NGI0)
@ 2025-11-18 7:20 ` Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 06/11] mptcp: fix duplicate reset on fastclose Matthieu Baerts (NGI0)
` (6 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Matthieu Baerts (NGI0) @ 2025-11-18 7:20 UTC (permalink / raw)
To: Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman, Shuah Khan,
Florian Westphal
Cc: netdev, mptcp, linux-kernel, linux-kselftest,
Matthieu Baerts (NGI0), stable
From: Paolo Abeni <pabeni@redhat.com>
With the current fastclose implementation, the mptcp_do_fastclose()
helper is in charge of two distinct actions: send the fastclose reset
and cleanup the subflows.
Formally decouple the two steps, ensuring that mptcp explicitly closes
all the subflows after the mentioned helper.
This will make the upcoming fix simpler, and allows dropping the 2nd
argument from mptcp_destroy_common(). The Fixes tag is then the same as
in the next commit to help with the backports.
Fixes: d21f83485518 ("mptcp: use fastclose on more edge scenarios")
Cc: stable@vger.kernel.org
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Geliang Tang <geliang@kernel.org>
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
net/mptcp/protocol.c | 13 +++++++++----
net/mptcp/protocol.h | 2 +-
2 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 6f0e8f670d83..c59246c1fde6 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -2808,7 +2808,11 @@ static void mptcp_worker(struct work_struct *work)
__mptcp_close_subflow(sk);
if (mptcp_close_tout_expired(sk)) {
+ struct mptcp_subflow_context *subflow, *tmp;
+
mptcp_do_fastclose(sk);
+ mptcp_for_each_subflow_safe(msk, subflow, tmp)
+ __mptcp_close_ssk(sk, subflow->tcp_sock, subflow, 0);
mptcp_close_wake_up(sk);
}
@@ -3233,7 +3237,8 @@ static int mptcp_disconnect(struct sock *sk, int flags)
/* msk->subflow is still intact, the following will not free the first
* subflow
*/
- mptcp_destroy_common(msk, MPTCP_CF_FASTCLOSE);
+ mptcp_do_fastclose(sk);
+ mptcp_destroy_common(msk);
/* The first subflow is already in TCP_CLOSE status, the following
* can't overlap with a fallback anymore
@@ -3412,7 +3417,7 @@ void mptcp_rcv_space_init(struct mptcp_sock *msk, const struct sock *ssk)
msk->rcvq_space.space = TCP_INIT_CWND * TCP_MSS_DEFAULT;
}
-void mptcp_destroy_common(struct mptcp_sock *msk, unsigned int flags)
+void mptcp_destroy_common(struct mptcp_sock *msk)
{
struct mptcp_subflow_context *subflow, *tmp;
struct sock *sk = (struct sock *)msk;
@@ -3421,7 +3426,7 @@ void mptcp_destroy_common(struct mptcp_sock *msk, unsigned int flags)
/* join list will be eventually flushed (with rst) at sock lock release time */
mptcp_for_each_subflow_safe(msk, subflow, tmp)
- __mptcp_close_ssk(sk, mptcp_subflow_tcp_sock(subflow), subflow, flags);
+ __mptcp_close_ssk(sk, mptcp_subflow_tcp_sock(subflow), subflow, 0);
__skb_queue_purge(&sk->sk_receive_queue);
skb_rbtree_purge(&msk->out_of_order_queue);
@@ -3439,7 +3444,7 @@ static void mptcp_destroy(struct sock *sk)
/* allow the following to close even the initial subflow */
msk->free_first = 1;
- mptcp_destroy_common(msk, 0);
+ mptcp_destroy_common(msk);
sk_sockets_allocated_dec(sk);
}
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 5575ef64ea31..6ca97096607c 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -977,7 +977,7 @@ static inline void mptcp_propagate_sndbuf(struct sock *sk, struct sock *ssk)
local_bh_enable();
}
-void mptcp_destroy_common(struct mptcp_sock *msk, unsigned int flags);
+void mptcp_destroy_common(struct mptcp_sock *msk);
#define MPTCP_TOKEN_MAX_RETRIES 4
--
2.51.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH net 06/11] mptcp: fix duplicate reset on fastclose
2025-11-18 7:20 [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7 Matthieu Baerts (NGI0)
` (4 preceding siblings ...)
2025-11-18 7:20 ` [PATCH net 05/11] mptcp: decouple mptcp fastclose from tcp close Matthieu Baerts (NGI0)
@ 2025-11-18 7:20 ` Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 07/11] selftests: mptcp: join: fastclose: remove flaky marks Matthieu Baerts (NGI0)
` (5 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Matthieu Baerts (NGI0) @ 2025-11-18 7:20 UTC (permalink / raw)
To: Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman, Shuah Khan,
Florian Westphal
Cc: netdev, mptcp, linux-kernel, linux-kselftest,
Matthieu Baerts (NGI0), stable
From: Paolo Abeni <pabeni@redhat.com>
The CI reports sporadic failures of the fastclose self-tests. The root
cause is a duplicate reset, not carrying the relevant MPTCP option.
In the failing scenario the bad reset is received by the peer before
the fastclose one, preventing the reception of the latter.
Indeed there is window of opportunity at fastclose time for the
following race:
mptcp_do_fastclose
__mptcp_close_ssk
__tcp_close()
tcp_set_state() [1]
tcp_send_active_reset() [2]
After [1] the stack will send reset to in-flight data reaching the now
closed port. Such reset may race with [2].
Address the issue explicitly sending a single reset on fastclose before
explicitly moving the subflow to close status.
Fixes: d21f83485518 ("mptcp: use fastclose on more edge scenarios")
Cc: stable@vger.kernel.org
Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/596
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Geliang Tang <geliang@kernel.org>
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
net/mptcp/protocol.c | 36 +++++++++++++++++++++++-------------
1 file changed, 23 insertions(+), 13 deletions(-)
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index c59246c1fde6..a70267a74e3c 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -2409,7 +2409,6 @@ bool __mptcp_retransmit_pending_data(struct sock *sk)
/* flags for __mptcp_close_ssk() */
#define MPTCP_CF_PUSH BIT(1)
-#define MPTCP_CF_FASTCLOSE BIT(2)
/* be sure to send a reset only if the caller asked for it, also
* clean completely the subflow status when the subflow reaches
@@ -2420,7 +2419,7 @@ static void __mptcp_subflow_disconnect(struct sock *ssk,
unsigned int flags)
{
if (((1 << ssk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN)) ||
- (flags & MPTCP_CF_FASTCLOSE)) {
+ subflow->send_fastclose) {
/* The MPTCP code never wait on the subflow sockets, TCP-level
* disconnect should never fail
*/
@@ -2467,14 +2466,8 @@ static void __mptcp_close_ssk(struct sock *sk, struct sock *ssk,
lock_sock_nested(ssk, SINGLE_DEPTH_NESTING);
- if ((flags & MPTCP_CF_FASTCLOSE) && !__mptcp_check_fallback(msk)) {
- /* be sure to force the tcp_close path
- * to generate the egress reset
- */
- ssk->sk_lingertime = 0;
- sock_set_flag(ssk, SOCK_LINGER);
- subflow->send_fastclose = 1;
- }
+ if (subflow->send_fastclose && ssk->sk_state != TCP_CLOSE)
+ tcp_set_state(ssk, TCP_CLOSE);
need_push = (flags & MPTCP_CF_PUSH) && __mptcp_retransmit_pending_data(sk);
if (!dispose_it) {
@@ -2779,9 +2772,26 @@ static void mptcp_do_fastclose(struct sock *sk)
struct mptcp_sock *msk = mptcp_sk(sk);
mptcp_set_state(sk, TCP_CLOSE);
- mptcp_for_each_subflow_safe(msk, subflow, tmp)
- __mptcp_close_ssk(sk, mptcp_subflow_tcp_sock(subflow),
- subflow, MPTCP_CF_FASTCLOSE);
+
+ /* Explicitly send the fastclose reset as need */
+ if (__mptcp_check_fallback(msk))
+ return;
+
+ mptcp_for_each_subflow_safe(msk, subflow, tmp) {
+ struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
+
+ lock_sock(ssk);
+
+ /* Some subflow socket states don't allow/need a reset.*/
+ if ((1 << ssk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE))
+ goto unlock;
+
+ subflow->send_fastclose = 1;
+ tcp_send_active_reset(ssk, ssk->sk_allocation,
+ SK_RST_REASON_TCP_ABORT_ON_CLOSE);
+unlock:
+ release_sock(ssk);
+ }
}
static void mptcp_worker(struct work_struct *work)
--
2.51.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH net 07/11] selftests: mptcp: join: fastclose: remove flaky marks
2025-11-18 7:20 [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7 Matthieu Baerts (NGI0)
` (5 preceding siblings ...)
2025-11-18 7:20 ` [PATCH net 06/11] mptcp: fix duplicate reset on fastclose Matthieu Baerts (NGI0)
@ 2025-11-18 7:20 ` Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 08/11] selftests: mptcp: join: endpoints: longer timeout Matthieu Baerts (NGI0)
` (4 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Matthieu Baerts (NGI0) @ 2025-11-18 7:20 UTC (permalink / raw)
To: Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman, Shuah Khan,
Florian Westphal
Cc: netdev, mptcp, linux-kernel, linux-kselftest,
Matthieu Baerts (NGI0)
After recent fixes like the parent commit, and "selftests: mptcp:
connect: trunc: read all recv data", the two fastclose subtests no
longer look flaky any more.
It then feels fine to remove these flaky marks, to no longer ignore
these subtests in case of errors.
Reviewed-by: Geliang Tang <geliang@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
tools/testing/selftests/net/mptcp/mptcp_join.sh | 2 --
1 file changed, 2 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 41503c241989..303abbca59fc 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -3500,7 +3500,6 @@ fullmesh_tests()
fastclose_tests()
{
if reset_check_counter "fastclose test" "MPTcpExtMPFastcloseTx"; then
- MPTCP_LIB_SUBTEST_FLAKY=1
test_linkfail=1024 fastclose=client \
run_tests $ns1 $ns2 10.0.1.1
chk_join_nr 0 0 0
@@ -3509,7 +3508,6 @@ fastclose_tests()
fi
if reset_check_counter "fastclose server test" "MPTcpExtMPFastcloseRx"; then
- MPTCP_LIB_SUBTEST_FLAKY=1
test_linkfail=1024 fastclose=server \
run_tests $ns1 $ns2 10.0.1.1
join_rst_nr=1 \
--
2.51.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH net 08/11] selftests: mptcp: join: endpoints: longer timeout
2025-11-18 7:20 [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7 Matthieu Baerts (NGI0)
` (6 preceding siblings ...)
2025-11-18 7:20 ` [PATCH net 07/11] selftests: mptcp: join: fastclose: remove flaky marks Matthieu Baerts (NGI0)
@ 2025-11-18 7:20 ` Matthieu Baerts (NGI0)
2025-11-18 8:39 ` Geliang Tang
2025-11-18 7:20 ` [PATCH net 09/11] selftests: mptcp: join: userspace: " Matthieu Baerts (NGI0)
` (3 subsequent siblings)
11 siblings, 1 reply; 15+ messages in thread
From: Matthieu Baerts (NGI0) @ 2025-11-18 7:20 UTC (permalink / raw)
To: Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman, Shuah Khan,
Florian Westphal
Cc: netdev, mptcp, linux-kernel, linux-kselftest,
Matthieu Baerts (NGI0), stable
In rare cases, when the test environment is very slow, some endpoints
tests can fail because some expected events have not been seen.
Because the tests are expecting a long on-going connection, and they are
not waiting for the end of the transfer, it is fine to have a longer
timeout, and even go over the default one. This connection will be
killed at the end, after the verifications: increasing the timeout
doesn't change anything, apart from avoiding it to end before the end of
the verifications.
To play it safe, all endpoints tests not waiting for the end of the
transfer are now having a longer timeout: 2 minutes.
The Fixes commit was making the connection longer, but still, the
default timeout would have stopped it after 1 minute, which might not be
enough in very slow environments.
Fixes: 6457595db987 ("selftests: mptcp: join: endpoints: longer transfer")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
tools/testing/selftests/net/mptcp/mptcp_join.sh | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 303abbca59fc..93d38ded5e4e 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -3941,7 +3941,7 @@ endpoint_tests()
pm_nl_set_limits $ns1 2 2
pm_nl_set_limits $ns2 2 2
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
- { test_linkfail=128 speed=slow \
+ { timeout_test=120 test_linkfail=128 speed=slow \
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
local tests_pid=$!
@@ -3968,7 +3968,7 @@ endpoint_tests()
pm_nl_set_limits $ns2 0 3
pm_nl_add_endpoint $ns2 10.0.1.2 id 1 dev ns2eth1 flags subflow
pm_nl_add_endpoint $ns2 10.0.2.2 id 2 dev ns2eth2 flags subflow
- { test_linkfail=128 speed=5 \
+ { timeout_test=120 test_linkfail=128 speed=5 \
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
local tests_pid=$!
@@ -4046,7 +4046,7 @@ endpoint_tests()
# broadcast IP: no packet for this address will be received on ns1
pm_nl_add_endpoint $ns1 224.0.0.1 id 2 flags signal
pm_nl_add_endpoint $ns1 10.0.1.1 id 42 flags signal
- { test_linkfail=128 speed=5 \
+ { timeout_test=120 test_linkfail=128 speed=5 \
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
local tests_pid=$!
@@ -4119,7 +4119,7 @@ endpoint_tests()
# broadcast IP: no packet for this address will be received on ns1
pm_nl_add_endpoint $ns1 224.0.0.1 id 2 flags signal
pm_nl_add_endpoint $ns2 10.0.3.2 id 3 flags subflow
- { test_linkfail=128 speed=20 \
+ { timeout_test=120 test_linkfail=128 speed=20 \
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
local tests_pid=$!
--
2.51.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH net 09/11] selftests: mptcp: join: userspace: longer timeout
2025-11-18 7:20 [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7 Matthieu Baerts (NGI0)
` (7 preceding siblings ...)
2025-11-18 7:20 ` [PATCH net 08/11] selftests: mptcp: join: endpoints: longer timeout Matthieu Baerts (NGI0)
@ 2025-11-18 7:20 ` Matthieu Baerts (NGI0)
2025-11-18 8:41 ` Geliang Tang
2025-11-18 7:20 ` [PATCH net 10/11] mptcp: fix address removal logic in mptcp_pm_nl_rm_addr Matthieu Baerts (NGI0)
` (2 subsequent siblings)
11 siblings, 1 reply; 15+ messages in thread
From: Matthieu Baerts (NGI0) @ 2025-11-18 7:20 UTC (permalink / raw)
To: Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman, Shuah Khan,
Florian Westphal
Cc: netdev, mptcp, linux-kernel, linux-kselftest,
Matthieu Baerts (NGI0), stable
In rare cases, when the test environment is very slow, some userspace
tests can fail because some expected events have not been seen.
Because the tests are expecting a long on-going connection, and they are
not waiting for the end of the transfer, it is fine to have a longer
timeout, and even go over the default one. This connection will be
killed at the end, after the verifications: increasing the timeout
doesn't change anything, apart from avoiding it to end before the end of
the verifications.
To play it safe, all userspace tests not waiting for the end of the
transfer are now having a longer timeout: 2 minutes.
The Fixes commit was making the connection longer, but still, the
default timeout would have stopped it after 1 minute, which might not be
enough in very slow environments.
Fixes: 290493078b96 ("selftests: mptcp: join: userspace: longer transfer")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
tools/testing/selftests/net/mptcp/mptcp_join.sh | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 93d38ded5e4e..74632beae2c6 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -3804,7 +3804,7 @@ userspace_tests()
continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
set_userspace_pm $ns1
pm_nl_set_limits $ns2 2 2
- { test_linkfail=128 speed=5 \
+ { timeout_test=120 test_linkfail=128 speed=5 \
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
local tests_pid=$!
wait_mpj $ns1
@@ -3837,7 +3837,7 @@ userspace_tests()
continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
set_userspace_pm $ns2
pm_nl_set_limits $ns1 0 1
- { test_linkfail=128 speed=5 \
+ { timeout_test=120 test_linkfail=128 speed=5 \
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
local tests_pid=$!
wait_mpj $ns2
@@ -3865,7 +3865,7 @@ userspace_tests()
continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
set_userspace_pm $ns2
pm_nl_set_limits $ns1 0 1
- { test_linkfail=128 speed=5 \
+ { timeout_test=120 test_linkfail=128 speed=5 \
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
local tests_pid=$!
wait_mpj $ns2
@@ -3886,7 +3886,7 @@ userspace_tests()
continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
set_userspace_pm $ns2
pm_nl_set_limits $ns1 0 1
- { test_linkfail=128 speed=5 \
+ { timeout_test=120 test_linkfail=128 speed=5 \
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
local tests_pid=$!
wait_mpj $ns2
@@ -3910,7 +3910,7 @@ userspace_tests()
continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
set_userspace_pm $ns1
pm_nl_set_limits $ns2 1 1
- { test_linkfail=128 speed=5 \
+ { timeout_test=120 test_linkfail=128 speed=5 \
run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
local tests_pid=$!
wait_mpj $ns1
--
2.51.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH net 10/11] mptcp: fix address removal logic in mptcp_pm_nl_rm_addr
2025-11-18 7:20 [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7 Matthieu Baerts (NGI0)
` (8 preceding siblings ...)
2025-11-18 7:20 ` [PATCH net 09/11] selftests: mptcp: join: userspace: " Matthieu Baerts (NGI0)
@ 2025-11-18 7:20 ` Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 11/11] selftests: mptcp: add a check for 'add_addr_accepted' Matthieu Baerts (NGI0)
2025-11-20 4:10 ` [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7 patchwork-bot+netdevbpf
11 siblings, 0 replies; 15+ messages in thread
From: Matthieu Baerts (NGI0) @ 2025-11-18 7:20 UTC (permalink / raw)
To: Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman, Shuah Khan,
Florian Westphal
Cc: netdev, mptcp, linux-kernel, linux-kselftest,
Matthieu Baerts (NGI0), Gang Yan, stable
From: Gang Yan <yangang@kylinos.cn>
Fix inverted WARN_ON_ONCE condition that prevented normal address
removal counter updates. The current code only executes decrement
logic when the counter is already 0 (abnormal state), while
normal removals (counter > 0) are ignored.
Signed-off-by: Gang Yan <yangang@kylinos.cn>
Fixes: 636113918508 ("mptcp: pm: remove '_nl' from mptcp_pm_nl_rm_addr_received")
Cc: stable@vger.kernel.org
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
net/mptcp/pm_kernel.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c
index 2ae95476dba3..0a50fd5edc06 100644
--- a/net/mptcp/pm_kernel.c
+++ b/net/mptcp/pm_kernel.c
@@ -672,7 +672,7 @@ static void mptcp_pm_nl_add_addr_received(struct mptcp_sock *msk)
void mptcp_pm_nl_rm_addr(struct mptcp_sock *msk, u8 rm_id)
{
- if (rm_id && WARN_ON_ONCE(msk->pm.add_addr_accepted == 0)) {
+ if (rm_id && !WARN_ON_ONCE(msk->pm.add_addr_accepted == 0)) {
u8 limit_add_addr_accepted =
mptcp_pm_get_limit_add_addr_accepted(msk);
--
2.51.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH net 11/11] selftests: mptcp: add a check for 'add_addr_accepted'
2025-11-18 7:20 [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7 Matthieu Baerts (NGI0)
` (9 preceding siblings ...)
2025-11-18 7:20 ` [PATCH net 10/11] mptcp: fix address removal logic in mptcp_pm_nl_rm_addr Matthieu Baerts (NGI0)
@ 2025-11-18 7:20 ` Matthieu Baerts (NGI0)
2025-11-20 4:10 ` [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7 patchwork-bot+netdevbpf
11 siblings, 0 replies; 15+ messages in thread
From: Matthieu Baerts (NGI0) @ 2025-11-18 7:20 UTC (permalink / raw)
To: Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman, Shuah Khan,
Florian Westphal
Cc: netdev, mptcp, linux-kernel, linux-kselftest,
Matthieu Baerts (NGI0), Gang Yan
From: Gang Yan <yangang@kylinos.cn>
The previous patch fixed an issue with the 'add_addr_accepted' counter.
This was not spot by the test suite.
Check this counter and 'add_addr_signal' in MPTCP Join 'delete re-add
signal' test. This should help spotting similar regressions later on.
These counters are crucial for ensuring the MPTCP path manager correctly
handles the subflow creation via 'ADD_ADDR'.
Signed-off-by: Gang Yan <yangang@kylinos.cn>
Reviewed-by: Geliang Tang <geliang@kernel.org>
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
tools/testing/selftests/net/mptcp/mptcp_join.sh | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 74632beae2c6..43f31f8d587f 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -4055,38 +4055,45 @@ endpoint_tests()
$ns1 10.0.2.1 id 1 flags signal
chk_subflow_nr "before delete" 2
chk_mptcp_info subflows 1 subflows 1
+ chk_mptcp_info add_addr_signal 2 add_addr_accepted 1
pm_nl_del_endpoint $ns1 1 10.0.2.1
pm_nl_del_endpoint $ns1 2 224.0.0.1
sleep 0.5
chk_subflow_nr "after delete" 1
chk_mptcp_info subflows 0 subflows 0
+ chk_mptcp_info add_addr_signal 0 add_addr_accepted 0
pm_nl_add_endpoint $ns1 10.0.2.1 id 1 flags signal
pm_nl_add_endpoint $ns1 10.0.3.1 id 2 flags signal
wait_mpj $ns2
chk_subflow_nr "after re-add" 3
chk_mptcp_info subflows 2 subflows 2
+ chk_mptcp_info add_addr_signal 2 add_addr_accepted 2
pm_nl_del_endpoint $ns1 42 10.0.1.1
sleep 0.5
chk_subflow_nr "after delete ID 0" 2
chk_mptcp_info subflows 2 subflows 2
+ chk_mptcp_info add_addr_signal 2 add_addr_accepted 2
pm_nl_add_endpoint $ns1 10.0.1.1 id 99 flags signal
wait_mpj $ns2
chk_subflow_nr "after re-add ID 0" 3
chk_mptcp_info subflows 3 subflows 3
+ chk_mptcp_info add_addr_signal 3 add_addr_accepted 2
pm_nl_del_endpoint $ns1 99 10.0.1.1
sleep 0.5
chk_subflow_nr "after re-delete ID 0" 2
chk_mptcp_info subflows 2 subflows 2
+ chk_mptcp_info add_addr_signal 2 add_addr_accepted 2
pm_nl_add_endpoint $ns1 10.0.1.1 id 88 flags signal
wait_mpj $ns2
chk_subflow_nr "after re-re-add ID 0" 3
chk_mptcp_info subflows 3 subflows 3
+ chk_mptcp_info add_addr_signal 3 add_addr_accepted 2
mptcp_lib_kill_group_wait $tests_pid
kill_events_pids
--
2.51.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH net 08/11] selftests: mptcp: join: endpoints: longer timeout
2025-11-18 7:20 ` [PATCH net 08/11] selftests: mptcp: join: endpoints: longer timeout Matthieu Baerts (NGI0)
@ 2025-11-18 8:39 ` Geliang Tang
0 siblings, 0 replies; 15+ messages in thread
From: Geliang Tang @ 2025-11-18 8:39 UTC (permalink / raw)
To: Matthieu Baerts (NGI0), Mat Martineau, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, Simon Horman,
Shuah Khan, Florian Westphal
Cc: netdev, mptcp, linux-kernel, linux-kselftest, stable
Hi Matt,
On Tue, 2025-11-18 at 08:20 +0100, Matthieu Baerts (NGI0) wrote:
> In rare cases, when the test environment is very slow, some endpoints
> tests can fail because some expected events have not been seen.
>
> Because the tests are expecting a long on-going connection, and they
> are
> not waiting for the end of the transfer, it is fine to have a longer
> timeout, and even go over the default one. This connection will be
> killed at the end, after the verifications: increasing the timeout
> doesn't change anything, apart from avoiding it to end before the end
> of
> the verifications.
>
> To play it safe, all endpoints tests not waiting for the end of the
> transfer are now having a longer timeout: 2 minutes.
>
> The Fixes commit was making the connection longer, but still, the
> default timeout would have stopped it after 1 minute, which might not
> be
> enough in very slow environments.
>
> Fixes: 6457595db987 ("selftests: mptcp: join: endpoints: longer
> transfer")
> Cc: stable@vger.kernel.org
> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
This patch looks good to me.
Reviewed-by: Geliang Tang <geliang@kernel.org>
Thanks,
-Geliang
> ---
> tools/testing/selftests/net/mptcp/mptcp_join.sh | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh
> b/tools/testing/selftests/net/mptcp/mptcp_join.sh
> index 303abbca59fc..93d38ded5e4e 100755
> --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
> +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
> @@ -3941,7 +3941,7 @@ endpoint_tests()
> pm_nl_set_limits $ns1 2 2
> pm_nl_set_limits $ns2 2 2
> pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
> - { test_linkfail=128 speed=slow \
> + { timeout_test=120 test_linkfail=128 speed=slow \
> run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
> local tests_pid=$!
>
> @@ -3968,7 +3968,7 @@ endpoint_tests()
> pm_nl_set_limits $ns2 0 3
> pm_nl_add_endpoint $ns2 10.0.1.2 id 1 dev ns2eth1
> flags subflow
> pm_nl_add_endpoint $ns2 10.0.2.2 id 2 dev ns2eth2
> flags subflow
> - { test_linkfail=128 speed=5 \
> + { timeout_test=120 test_linkfail=128 speed=5 \
> run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
> local tests_pid=$!
>
> @@ -4046,7 +4046,7 @@ endpoint_tests()
> # broadcast IP: no packet for this address will be
> received on ns1
> pm_nl_add_endpoint $ns1 224.0.0.1 id 2 flags signal
> pm_nl_add_endpoint $ns1 10.0.1.1 id 42 flags signal
> - { test_linkfail=128 speed=5 \
> + { timeout_test=120 test_linkfail=128 speed=5 \
> run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
> local tests_pid=$!
>
> @@ -4119,7 +4119,7 @@ endpoint_tests()
> # broadcast IP: no packet for this address will be
> received on ns1
> pm_nl_add_endpoint $ns1 224.0.0.1 id 2 flags signal
> pm_nl_add_endpoint $ns2 10.0.3.2 id 3 flags subflow
> - { test_linkfail=128 speed=20 \
> + { timeout_test=120 test_linkfail=128 speed=20 \
> run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
> local tests_pid=$!
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 09/11] selftests: mptcp: join: userspace: longer timeout
2025-11-18 7:20 ` [PATCH net 09/11] selftests: mptcp: join: userspace: " Matthieu Baerts (NGI0)
@ 2025-11-18 8:41 ` Geliang Tang
0 siblings, 0 replies; 15+ messages in thread
From: Geliang Tang @ 2025-11-18 8:41 UTC (permalink / raw)
To: Matthieu Baerts (NGI0), Mat Martineau, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, Simon Horman,
Shuah Khan, Florian Westphal
Cc: netdev, mptcp, linux-kernel, linux-kselftest, stable
Hi Matt,
On Tue, 2025-11-18 at 08:20 +0100, Matthieu Baerts (NGI0) wrote:
> In rare cases, when the test environment is very slow, some userspace
> tests can fail because some expected events have not been seen.
>
> Because the tests are expecting a long on-going connection, and they
> are
> not waiting for the end of the transfer, it is fine to have a longer
> timeout, and even go over the default one. This connection will be
> killed at the end, after the verifications: increasing the timeout
> doesn't change anything, apart from avoiding it to end before the end
> of
> the verifications.
>
> To play it safe, all userspace tests not waiting for the end of the
> transfer are now having a longer timeout: 2 minutes.
>
> The Fixes commit was making the connection longer, but still, the
> default timeout would have stopped it after 1 minute, which might not
> be
> enough in very slow environments.
>
> Fixes: 290493078b96 ("selftests: mptcp: join: userspace: longer
> transfer")
> Cc: stable@vger.kernel.org
> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
This patch looks good to me.
Reviewed-by: Geliang Tang <geliang@kernel.org>
Thanks,
-Geliang
> ---
> tools/testing/selftests/net/mptcp/mptcp_join.sh | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh
> b/tools/testing/selftests/net/mptcp/mptcp_join.sh
> index 93d38ded5e4e..74632beae2c6 100755
> --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
> +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
> @@ -3804,7 +3804,7 @@ userspace_tests()
> continue_if mptcp_lib_has_file
> '/proc/sys/net/mptcp/pm_type'; then
> set_userspace_pm $ns1
> pm_nl_set_limits $ns2 2 2
> - { test_linkfail=128 speed=5 \
> + { timeout_test=120 test_linkfail=128 speed=5 \
> run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
> local tests_pid=$!
> wait_mpj $ns1
> @@ -3837,7 +3837,7 @@ userspace_tests()
> continue_if mptcp_lib_has_file
> '/proc/sys/net/mptcp/pm_type'; then
> set_userspace_pm $ns2
> pm_nl_set_limits $ns1 0 1
> - { test_linkfail=128 speed=5 \
> + { timeout_test=120 test_linkfail=128 speed=5 \
> run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
> local tests_pid=$!
> wait_mpj $ns2
> @@ -3865,7 +3865,7 @@ userspace_tests()
> continue_if mptcp_lib_has_file
> '/proc/sys/net/mptcp/pm_type'; then
> set_userspace_pm $ns2
> pm_nl_set_limits $ns1 0 1
> - { test_linkfail=128 speed=5 \
> + { timeout_test=120 test_linkfail=128 speed=5 \
> run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
> local tests_pid=$!
> wait_mpj $ns2
> @@ -3886,7 +3886,7 @@ userspace_tests()
> continue_if mptcp_lib_has_file
> '/proc/sys/net/mptcp/pm_type'; then
> set_userspace_pm $ns2
> pm_nl_set_limits $ns1 0 1
> - { test_linkfail=128 speed=5 \
> + { timeout_test=120 test_linkfail=128 speed=5 \
> run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
> local tests_pid=$!
> wait_mpj $ns2
> @@ -3910,7 +3910,7 @@ userspace_tests()
> continue_if mptcp_lib_has_file
> '/proc/sys/net/mptcp/pm_type'; then
> set_userspace_pm $ns1
> pm_nl_set_limits $ns2 1 1
> - { test_linkfail=128 speed=5 \
> + { timeout_test=120 test_linkfail=128 speed=5 \
> run_tests $ns1 $ns2 10.0.1.1 & } 2>/dev/null
> local tests_pid=$!
> wait_mpj $ns1
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7
2025-11-18 7:20 [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7 Matthieu Baerts (NGI0)
` (10 preceding siblings ...)
2025-11-18 7:20 ` [PATCH net 11/11] selftests: mptcp: add a check for 'add_addr_accepted' Matthieu Baerts (NGI0)
@ 2025-11-20 4:10 ` patchwork-bot+netdevbpf
11 siblings, 0 replies; 15+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-11-20 4:10 UTC (permalink / raw)
To: Matthieu Baerts
Cc: martineau, geliang, davem, edumazet, kuba, pabeni, horms, shuah,
fw, netdev, mptcp, linux-kernel, linux-kselftest, stable, yangang
Hello:
This series was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Tue, 18 Nov 2025 08:20:18 +0100 you wrote:
> Here are various unrelated fixes:
>
> - Patch 1: Fix window space computation for fallback connections which
> can affect ACK generation. A fix for v5.11.
>
> - Patch 2: Avoid unneeded subflow-level drops due to unsynced received
> window. A fix for v5.11.
>
> [...]
Here is the summary with links:
- [net,01/11] mptcp: fix ack generation for fallback msk
https://git.kernel.org/netdev/net/c/5e15395f6d9e
- [net,02/11] mptcp: avoid unneeded subflow-level drops
https://git.kernel.org/netdev/net/c/4f102d747cad
- [net,03/11] mptcp: fix premature close in case of fallback
https://git.kernel.org/netdev/net/c/17393fa7b708
- [net,04/11] mptcp: do not fallback when OoO is present
https://git.kernel.org/netdev/net/c/1bba3f219c5e
- [net,05/11] mptcp: decouple mptcp fastclose from tcp close
https://git.kernel.org/netdev/net/c/fff0c8799667
- [net,06/11] mptcp: fix duplicate reset on fastclose
https://git.kernel.org/netdev/net/c/ae155060247b
- [net,07/11] selftests: mptcp: join: fastclose: remove flaky marks
https://git.kernel.org/netdev/net/c/efff6cd53ac5
- [net,08/11] selftests: mptcp: join: endpoints: longer timeout
https://git.kernel.org/netdev/net/c/fb13c6bb810c
- [net,09/11] selftests: mptcp: join: userspace: longer timeout
https://git.kernel.org/netdev/net/c/0e4ec14dc1ee
- [net,10/11] mptcp: fix address removal logic in mptcp_pm_nl_rm_addr
https://git.kernel.org/netdev/net/c/92e239e36d60
- [net,11/11] selftests: mptcp: add a check for 'add_addr_accepted'
https://git.kernel.org/netdev/net/c/0eee0fdf9b7b
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2025-11-20 4:10 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-18 7:20 [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7 Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 01/11] mptcp: fix ack generation for fallback msk Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 02/11] mptcp: avoid unneeded subflow-level drops Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 03/11] mptcp: fix premature close in case of fallback Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 04/11] mptcp: do not fallback when OoO is present Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 05/11] mptcp: decouple mptcp fastclose from tcp close Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 06/11] mptcp: fix duplicate reset on fastclose Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 07/11] selftests: mptcp: join: fastclose: remove flaky marks Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 08/11] selftests: mptcp: join: endpoints: longer timeout Matthieu Baerts (NGI0)
2025-11-18 8:39 ` Geliang Tang
2025-11-18 7:20 ` [PATCH net 09/11] selftests: mptcp: join: userspace: " Matthieu Baerts (NGI0)
2025-11-18 8:41 ` Geliang Tang
2025-11-18 7:20 ` [PATCH net 10/11] mptcp: fix address removal logic in mptcp_pm_nl_rm_addr Matthieu Baerts (NGI0)
2025-11-18 7:20 ` [PATCH net 11/11] selftests: mptcp: add a check for 'add_addr_accepted' Matthieu Baerts (NGI0)
2025-11-20 4:10 ` [PATCH net 00/11] mptcp: misc fixes for v6.18-rc7 patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox