From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9418A3D6CD2 for ; Mon, 13 Apr 2026 14:12:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089527; cv=none; b=JjqzoVtGuVDKJdxauEDz2AB0NI0/nUoWVvSoMIcpAzdKx2tzi0aqRxYNxYDnLhhs3GKVVqcU7uP4w54CI2SaBJ7PWkk4h8FNqUpFo+M5nPbdttoZZzNkdGVcHp35N2x9ssOlpY9NgKe1Uv9hsPNbXj+2OzXupVTfg5VXtZcWgYA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089527; c=relaxed/simple; bh=qU2gO4U+rLHR/oV2lgldodaiCkxfghI5r1NFCTslTiA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RECmHnapVZwNaFQcIUSeOhRIGZcagu0EZBryc4qlh5Y4leSNJS59ql2to2o0bDgITnB81cXWkvPhDL6QX4cgSMk3/fC1ntNY1Gb02s56qdBIFctVLMXkxU1+m+F4ibBeoE4OYusVebcBC6HV1/hz6jnD1hdLFPKK1kgynGrSDG8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=J0HBLdnH; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="J0HBLdnH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CBE7CC2BCB6; Mon, 13 Apr 2026 14:12:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089527; bh=qU2gO4U+rLHR/oV2lgldodaiCkxfghI5r1NFCTslTiA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=J0HBLdnHXDpMXkRR2GL+hBPaAWwWnFWE9N+DqEDEnLV4pX4cmUOft5ZX24zkQI++4 NoQ6ye7sj2vw1dPKUkyu09FzgYSfzoeyGd6fx9+O6FFnP7rhQEowgtaPXyr1AMwwCh ijCSLjrQ6B1vMmmrWP3JIC7kM1q40JiNOSVg5TNoO7u8cS36JpdlgLzXOEUmUsH5uO ofDjYlFSvyzlwpwP0z7d4D1d1X7ZeHmYtLKaJoEemwKKlWFkOR4q1xtVNfRLcSiA7v M9JIz4XtaJ+YNDdyBH6AhuxoB3MeRyt/wmjY6cbMpl7WUtebrIgyiQLkC4JCVmAxtv i8NhfQsMrKo5Q== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:11:47 +0200 Subject: [PATCH mptcp-net v3 01/19] mptcp: pm: kernel: correctly retransmit ADD_ADDR ID 0 Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-1-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2074; i=matttbe@kernel.org; h=from:subject:message-id; bh=qU2gO4U+rLHR/oV2lgldodaiCkxfghI5r1NFCTslTiA=; b=kA0DAAoWfCLwwvNHCpcByyZiAGnc+aigg3aTfs0T61nYyEZay9FeaWr6dcAd31i0bTEuh9qKt Ih1BAAWCgAdFiEEG4ZZb5nneg10Sk44fCLwwvNHCpcFAmnc+agACgkQfCLwwvNHCpez7QEA++Tf oE0efvR/ofYyU4S40p/quD/76GBsZ4mObv+nYGcBAI+5ocTRCEwOn+lEVMfAdEXhjH2UKKNQfzu kGRdSk38O X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 When adding the ADD_ADDR to the list, the address including the IP, port and ID are copied. On the other hand, when the endpoint corresponds to the one from the initial subflow, the ID is set to 0, as specified by the MPTCP protocol. The issue is that the ID was reset after having copied the ID in the ADD_ADDR entry. So the retransmission was done, but using a different ID than the initial one. Fixes: 8b8ed1b429f8 ("mptcp: pm: reuse ID 0 after delete and re-add") Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm_kernel.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index 7895fb5f982e..906a1d5ab9ed 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -347,6 +347,8 @@ static void mptcp_pm_create_subflow_or_signal_addr(stru= ct mptcp_sock *msk) =20 /* check first for announce */ if (msk->pm.add_addr_signaled < endp_signal_max) { + u8 endp_id; + /* due to racing events on both ends we can reach here while * previous add address is still running: if we invoke now * mptcp_pm_announce_addr(), that will fail and the @@ -360,19 +362,20 @@ static void mptcp_pm_create_subflow_or_signal_addr(st= ruct mptcp_sock *msk) if (!select_signal_address(pernet, msk, &local)) goto subflow; =20 + /* Special case for ID0: set the correct ID */ + endp_id =3D local.addr.id; + if (endp_id =3D=3D msk->mpc_endpoint_id) + local.addr.id =3D 0; + /* If the alloc fails, we are on memory pressure, not worth * continuing, and trying to create subflows. */ if (!mptcp_pm_alloc_anno_list(msk, &local.addr)) return; =20 - __clear_bit(local.addr.id, msk->pm.id_avail_bitmap); + __clear_bit(endp_id, msk->pm.id_avail_bitmap); msk->pm.add_addr_signaled++; =20 - /* Special case for ID0: set the correct ID */ - if (local.addr.id =3D=3D msk->mpc_endpoint_id) - local.addr.id =3D 0; - mptcp_pm_announce_addr(msk, &local.addr, false); mptcp_pm_addr_send_ack(msk); =20 --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4509B3D7D89 for ; Mon, 13 Apr 2026 14:12:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089528; cv=none; b=H0Uapbm5nUDJSYKZu1ejYl1Rwg6OoEA9Ro0qcMbjwHly9DI8uEp3BJ+wvq4lrDiymtXf0sQJYyhrJ9RZqqsz/dJLzfJukX94UT8CSt1qrJWy94eJ+/RlGpChFgaLBr/ZxJqDoxYPsumhxBPVfPB0KP/a699vvQFA0RHWzQmjHNs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089528; c=relaxed/simple; bh=xqQ0XziJocJK+T47pPjFZrFCFv0UNP98JJxxWrafiv4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EOkFS8KA0bxrORoS5ownrGlPyL2fn+16SlmTDgGnSieZydgeO/MfYHLgVlEu7UxfYgcRM4m47SuQV0Vdi/BMTrsLNhI1PJfJ3kpZC7dlW58p9GeWxGJ6Oirp31pY3f3hB4vdC/tFvwu5hmsHZH0UTU2q+bWsZWcsn3iCuuSYdHY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Jr/GvlOQ; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Jr/GvlOQ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9347DC2BCAF; Mon, 13 Apr 2026 14:12:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089528; bh=xqQ0XziJocJK+T47pPjFZrFCFv0UNP98JJxxWrafiv4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Jr/GvlOQr+ty3qHKYGI/bb0HtpXX344vBfuG+eaEV9RSF15AkhmQgQxWgsEJZCDq/ vJ/HhvpecfSAVlaSWq0dMW18ox1uLSo5YmsIcfqNFTIIZQFs+R7wCjcGWwkkgTLVpe Zh2X+QnD8nZFesYAjEzB8oR6hdRXbYMfxjpoN776w4PX2A1wlLlpbUcd1KVt47d6hK mte+IZzs6ChK6Omi6NW76TUuRTBo7uRoxyseq/k/9q9AXDS4o37M6pm3nFH6hqjwbh nd86y3fj2Qy/EoB78WN1SdWNDJDKBBpG+tbak+3sgjQuRKWKoPj+WvuPc5zm3aOcGg k38ODakQJda1Q== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:11:48 +0200 Subject: [PATCH mptcp-net v3 02/19] mptcp: pm: ADD_ADDR rtx: fix potential data-race Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-2-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1180; i=matttbe@kernel.org; h=from:subject:message-id; bh=xqQ0XziJocJK+T47pPjFZrFCFv0UNP98JJxxWrafiv4=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/Fz5MHgl/yqLVYXCa3LyX9wq/fAzm9O+nuGPpDvjG q8Tu1N+d5SyMIhxMciKKbJIt0Xmz3xexVvi5WcBM4eVCWQIAxenAEzklzDDPwWBPdv035z5mf03 2VfUcdVSo48pD8X6mVyUlaRsG/KtHjH8FTDQL1l781Xdv8ppqrMTrtuqrFQxj65fMadHSjPM3zq dFwA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 This mptcp_pm_add_timer() helper is executed as a timer callback in softirq context. To avoid any data races, the socket lock needs to be held with bh_lock_sock(). If the socket is in use, retry again soon after, similar to what is done with the keepalive timer. Fixes: 00cfd77b9063 ("mptcp: retransmit ADD_ADDR when timeout") Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index fdadd0e8f77c..43a11b65235f 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -340,6 +340,13 @@ static void mptcp_pm_add_timer(struct timer_list *time= r) if (!entry->addr.id) return; =20 + bh_lock_sock(sk); + if (sock_owned_by_user(sk)) { + /* Try again later. */ + sk_reset_timer(sk, timer, jiffies + HZ / 20); + goto out; + } + if (mptcp_pm_should_add_signal_addr(msk)) { sk_reset_timer(sk, timer, jiffies + TCP_RTO_MAX / 8); goto out; @@ -368,6 +375,7 @@ static void mptcp_pm_add_timer(struct timer_list *timer) mptcp_pm_subflow_established(msk); =20 out: + bh_unlock_sock(sk); __sock_put(sk); } =20 --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D505C3CCFB6 for ; Mon, 13 Apr 2026 14:12:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089528; cv=none; b=c+Q+XaBgjiQbu/mAse7RTmqNoq1W7hvZH7H8Ml3+RV4IdB1qZLmZU/OwWowzZ4Wp4TUWPIVJmc4fvWg4EyjPD/vWkDUytQIsW5oH9GJbNAa8t9BIn2uXjfEbRy5CQKgkiNNUF5Ewyryk71PLNV9oD+FmcZNcKpbC65M/gszQYCU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089528; c=relaxed/simple; bh=RjhEZ4Y9dGN7dl5bP4at23CWIzyuoWHqJdbVn30LIas=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jlSBzj8xxT84n5RIRPVLIXH+dg2O8x8veCXPcKUrHsh4o5hpNq6rde3Pr1Bhn/Wl+Qbur8E4As9zwkjDDfUAWhP5VBmWBVHfqr/sIe1Ax97DvzmFP20IjIRbpxQcvUjoub1/y/SD2WD0c5NAkMjXET7f309jvJ8xM/1e56f8Bgk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gRT/pjxM; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="gRT/pjxM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5A43EC2BCB4; Mon, 13 Apr 2026 14:12:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089528; bh=RjhEZ4Y9dGN7dl5bP4at23CWIzyuoWHqJdbVn30LIas=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=gRT/pjxMWJc9yM74XWEyRQxy57ZVZiHTzQDSXSZAEvV7CSmp3AZp+KDkfBQR3UPRE WazICCZdW67BvXvFgJKHersbEfSF/s/gyYzb+Gr81mc1hfirwgoz6Qx/pKp/wZLfs4 Uatfz3jFPnawnUUmpd2rD3uoxNWC9tslfYNDhPz91v1t/ma9qXuKib0W/+N10RpAwz 9cAxd8OWLZB4mMQoF32+q7KKCA6L6z7u18sn9f646fVFPvJI7I3uF5mr06w0On+vHm 6f42Adkf0Md85M4Fwhuowbl6/QoKUw8hhAf2IcOANUHy7hBhfuUGrbLMUXOyuiqn5d hghq1hHQ6ffEA== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:11:49 +0200 Subject: [PATCH mptcp-net v3 03/19] mptcp: pm: ADD_ADDR rtx: allow ID 0 Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-3-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=875; i=matttbe@kernel.org; h=from:subject:message-id; bh=RjhEZ4Y9dGN7dl5bP4at23CWIzyuoWHqJdbVn30LIas=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/FxVZXzlz6XjwgbpqXklZY57lcyPM6zg+mVffmW9h dDfkAM+HaUsDGJcDLJiiizSbZH5M59X8ZZ4+VnAzGFlAhnCwMUpABMRL2Jk2HWoqPpe4sQVV1SZ jx4Ncpxb2bAtr5Nb/H2QinyhtqLAQ0aGGXJ3c2Un3AgrlFHL2fHasqX6ud6Or55PJOZd7HRknMr LAAA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 ADD_ADDR can be sent for the ID 0, which corresponds to the local address and port linked to the initial subflow. Indeed, this address could be removed, and re-added later on, e.g. what is done in the "delete re-add signal" MPTCP Join selftests. So no reason to ignore it. Fixes: 00cfd77b9063 ("mptcp: retransmit ADD_ADDR when timeout") Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 43a11b65235f..6a75470dcf5e 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -337,9 +337,6 @@ static void mptcp_pm_add_timer(struct timer_list *timer) if (inet_sk_state_load(sk) =3D=3D TCP_CLOSE) return; =20 - if (!entry->addr.id) - return; - bh_lock_sock(sk); if (sock_owned_by_user(sk)) { /* Try again later. */ --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D80A73CCFB6 for ; Mon, 13 Apr 2026 14:12:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089529; cv=none; b=hbKEC7qmmvcIE5LEmpX6Rb4gVp+oiUPpCw7iGinS3e3kTxAutbdrYIQ+S3O7Pb3H+c69DZWLZl1cP/+Pn8YIz4wB3p0NSs/tOcLmyZ1B176zK2Fjma2tHDe0ywUDMExZF5s9wvouOcNUcC52fO54amUc7iOxWC+uE763QfHoERU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089529; c=relaxed/simple; bh=S5iyu6EcSvC9FvRM6ZNlySYLGPjU4l8BWtgnvahmpec=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=f+FFKRkrog+y+e1nzBS7gXzZs9Nnc2+Xd0fw0Ds3bZLOmlJdyRI17RITBWmr42QH4+MhlMuXapSaOqlsNuCuu2wHHxpUioQjwDMhbIPQlA1uWWgPlRwTpnah3P/zcIyOjMKLsdoJMM2On966C8sz/WdZPmknOfQ83azaD1KFF34= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NFQc6kqK; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NFQc6kqK" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 214E2C2BCB4; Mon, 13 Apr 2026 14:12:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089529; bh=S5iyu6EcSvC9FvRM6ZNlySYLGPjU4l8BWtgnvahmpec=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=NFQc6kqKlIqrnp5///TurAeX3gv+ohG6gqhYgaEl7R2seJMJo1bmm9Udfo1GwKU4x vIQUjZDfWZD+3ywQqV8JKJIeOCFqy4x0m/HW/zq7y7qSFU0ZuexrXLsOgnwNL9lJFo WMk3jokfZfl42Wlb2v9vvMeV+L8XbLiswIPxlepJxpAcvaXmbYCsrwB6/LeP4jDLpV CNpA0FiTspmwnxtjUCGyWjuIQpirlkBfYgE6OdDSorC/XYkxERw9nr9h7KppNJtuQ1 E2GIxCogB+0Da2FSHAiOuIk1G6z/cUgOchn9tMUDU0rxUb3Mder3tilgHzSxvUDty7 rRptxYK1siWyA== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:11:50 +0200 Subject: [PATCH mptcp-net v3 04/19] mptcp: pm: ADD_ADDR rtx: always decrease sk refcount Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-4-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1301; i=matttbe@kernel.org; h=from:subject:message-id; bh=S5iyu6EcSvC9FvRM6ZNlySYLGPjU4l8BWtgnvahmpec=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/FyV+bZL8IRN52W9wrylF98I340/HLTY56Le5j4hs 29V8VfjOkpZGMS4GGTFFFmk2yLzZz6v4i3x8rOAmcPKBDKEgYtTACZy/DQjw9zdCyelyGo3zc50 sH95au1yPv8tUxUl7lrWP2OYs3qSw0KG/3WHVvB8y/mUtO6r97ZPSZ8f8xRY5+g38e3b/clsxZP MNjYA X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 When an ADD_ADDR is retransmitted, the sk is held in sk_reset_timer(). It should then be released in all cases at the end. Some (unlikely) checks were returning directly instead of calling sock_put() to decrease the refcount. Jump to the 'out' label to fix this potential leak. While at it, drop the '!msk' check which cannot happen because it is never reset, and explicitly mark the remaining one as "unlikely". Fixes: 00cfd77b9063 ("mptcp: retransmit ADD_ADDR when timeout") Signed-off-by: Matthieu Baerts (NGI0) --- v3: remove '!msk' check: cannot be true. --- net/mptcp/pm.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 6a75470dcf5e..d3fcf441b208 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -331,11 +331,8 @@ static void mptcp_pm_add_timer(struct timer_list *time= r) =20 pr_debug("msk=3D%p\n", msk); =20 - if (!msk) - return; - - if (inet_sk_state_load(sk) =3D=3D TCP_CLOSE) - return; + if (unlikely(inet_sk_state_load(sk) =3D=3D TCP_CLOSE)) + goto exit; =20 bh_lock_sock(sk); if (sock_owned_by_user(sk)) { @@ -373,6 +370,7 @@ static void mptcp_pm_add_timer(struct timer_list *timer) =20 out: bh_unlock_sock(sk); +exit: __sock_put(sk); } =20 --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6A0B73D75C3 for ; Mon, 13 Apr 2026 14:12:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089530; cv=none; b=hnOc0qe0bd98WwdFChFU6W2TEfaUK00usJNOAn2BPWKMdjxsE6IpaSZTSHKSn53oZxOFDD+Sr2u/c96GJrKe+3muvvFrjMWRO9NoCNYSdn08KN2OyEJNeqZKAgZ+GOvTTS0zFHcWlR61GeKav/gRY5dgCw5gu+QYH0XIh/VeQic= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089530; c=relaxed/simple; bh=GnVcK+k6p55UYcQNlYBgs9oGPxvxqm9Qo+2p6Q0pZk4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=p8/ED6r4SkEl5Hn1WTE2XyYFEV93K6s5ORrc93JdSDtqlrFDln95eEDl7AuwRGPwRN4jwQkrxAxT6yULM5V7fAZwroquIOo132k4CWzRMeh1ApdXuAUkURR8uTHxU1mxtMhkm929Kz0sq7oquxIrNsGO60Cm4+7fAZQTIz8qm7A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pzr9WIjH; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="pzr9WIjH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DC1FDC2BCB5; Mon, 13 Apr 2026 14:12:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089530; bh=GnVcK+k6p55UYcQNlYBgs9oGPxvxqm9Qo+2p6Q0pZk4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=pzr9WIjH4IpdfbLzwB3ebofO9oG8BoeuHaZVLsUrc3iFEUcf4aGnaSdKBOF0DVOwX Wz971RssjvJUC48DpkxW6wKB9/KeDPYrGTzQtidyHT3kpTCn1vrF2CfyVR44HmVenV GbVcb9jGgRARH7V5Vz3jfTGuyK38JWzEy3RS9cjP4C91keovn8uhJ/w7w+NW0KMbpA zZE7N+JFsPB/L2sRaWbTSpCv1X0ipt0sV70rS1QbW0LArYl43zsP92o9KM5pOEam1d onIJwHMVtnCjv7FfrHCfoflBmsNBEPGvmJjc+MtiZEhEGvMLFEllfK8UG8tiWuOso5 4e4LEQaVSMVDQ== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:11:51 +0200 Subject: [PATCH mptcp-net v3 05/19] mptcp: pm: ADD_ADDR rtx: free sk if last Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-5-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3597; i=matttbe@kernel.org; h=from:subject:message-id; bh=GnVcK+k6p55UYcQNlYBgs9oGPxvxqm9Qo+2p6Q0pZk4=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/FzN8tZps44tz4GrR5yE9J1eH7s5d8p37nUHg7d1L JK6qPO6saOUhUGMi0FWTJFFui0yf+bzKt4SLz8LmDmsTCBDGLg4BWAiHqEM/9QO2y1hORZ7Y++7 VX8KF5+3a1j42/Dd022/z9yPOPDk8ZrHDP8rTok9jbXXDFPunfAn8fVZiQmFcxV3d7UvyotV9Hg 1czYPAA== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 When an ADD_ADDR is retransmitted, the sk is held in sk_reset_timer(), and released at the end. If at that moment, it was the last reference being held, the sk would not be freed. sock_put() should then be called instead of __sock_put(). But that's not enough: if it is the last reference, sock_put() will call sk_free(), which will end up calling sk_stop_timer_sync() on the same timer, and waiting indefinitely to finish. So it is needed to mark that the timer is done, and no need to call sk_stop_timer_sync(). Fixes: 00cfd77b9063 ("mptcp: retransmit ADD_ADDR when timeout") Signed-off-by: Matthieu Baerts (NGI0) --- v3: support calling sk_free() from the timer handler. Note: I'm not very happy with this patch, it looks too big. Did I miss a simpler way? --- net/mptcp/pm.c | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index d3fcf441b208..adbebf46dcce 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -16,6 +16,7 @@ struct mptcp_pm_add_entry { struct list_head list; struct mptcp_addr_info addr; u8 retrans_times; + bool timer_done; struct timer_list add_timer; struct mptcp_sock *sock; struct rcu_head rcu; @@ -327,22 +328,22 @@ static void mptcp_pm_add_timer(struct timer_list *tim= er) add_timer); struct mptcp_sock *msk =3D entry->sock; struct sock *sk =3D (struct sock *)msk; - unsigned int timeout; + unsigned int timeout =3D 0; =20 pr_debug("msk=3D%p\n", msk); =20 - if (unlikely(inet_sk_state_load(sk) =3D=3D TCP_CLOSE)) - goto exit; - bh_lock_sock(sk); + if (unlikely(inet_sk_state_load(sk) =3D=3D TCP_CLOSE)) + goto out; + if (sock_owned_by_user(sk)) { /* Try again later. */ - sk_reset_timer(sk, timer, jiffies + HZ / 20); + timeout =3D HZ / 20; goto out; } =20 if (mptcp_pm_should_add_signal_addr(msk)) { - sk_reset_timer(sk, timer, jiffies + TCP_RTO_MAX / 8); + timeout =3D TCP_RTO_MAX / 8; goto out; } =20 @@ -360,8 +361,9 @@ static void mptcp_pm_add_timer(struct timer_list *timer) } =20 if (entry->retrans_times < ADD_ADDR_RETRANS_MAX) - sk_reset_timer(sk, timer, - jiffies + (timeout << entry->retrans_times)); + timeout <<=3D entry->retrans_times; + else + timeout =3D 0; =20 spin_unlock_bh(&msk->pm.lock); =20 @@ -369,9 +371,13 @@ static void mptcp_pm_add_timer(struct timer_list *time= r) mptcp_pm_subflow_established(msk); =20 out: + if (timeout) + sk_reset_timer(sk, timer, jiffies + timeout); + else + /* if sock_put calls sk_free: avoid waiting for this timer */ + entry->timer_done =3D true; bh_unlock_sock(sk); -exit: - __sock_put(sk); + sock_put(sk); } =20 struct mptcp_pm_add_entry * @@ -431,12 +437,15 @@ bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk, add_entry->addr =3D *addr; add_entry->sock =3D msk; add_entry->retrans_times =3D 0; + add_entry->timer_done =3D false; =20 timer_setup(&add_entry->add_timer, mptcp_pm_add_timer, 0); reset_timer: timeout =3D mptcp_adjust_add_addr_timeout(msk); if (timeout) sk_reset_timer(sk, &add_entry->add_timer, jiffies + timeout); + else + add_entry->timer_done =3D true; =20 return true; } @@ -454,7 +463,8 @@ static void mptcp_pm_free_anno_list(struct mptcp_sock *= msk) spin_unlock_bh(&msk->pm.lock); =20 list_for_each_entry_safe(entry, tmp, &free_list, list) { - sk_stop_timer_sync(sk, &entry->add_timer); + if (!entry->timer_done) + sk_stop_timer_sync(sk, &entry->add_timer); kfree_rcu(entry, rcu); } } --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 706053D7D89 for ; Mon, 13 Apr 2026 14:12:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089531; cv=none; b=LXjTXpBYuEAXbsxrELyQhSpzfAoXmNwU/ZGSZShYwHfcshd3SmcjKgrCEornaP2cYluMVgrOgZYA1sntrRN4bjAPVP8BSDVSA3AhVNKj+813N0BZ5UChzo6QqVkmhQ2Qh20rqr4m7FmYYgbRGQtsVPT3t2rAcUwiCG2T3NwQm/U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089531; c=relaxed/simple; bh=pz9+YSGv1Ha7Iy1hBwA7cLzkefbaGrM1oOz9ozAJ2BU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fcGsvK9Lw1LG/Jg7lByNJMf3HP7ysqWzjkWM0ikOWioOW+kV4aQr9Q1izLWXOFTursdVfC1ZTB0B7k4DWSC8OwNTSuKYNWSuGQcWZETUMiQ/rDddzRPwPTrV9/nOenOYi1s+3XBTA8X+GPIjHakA879/nI968yt5tRlX10heS+8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cOZ2HBjb; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cOZ2HBjb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A2F45C2BCB4; Mon, 13 Apr 2026 14:12:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089531; bh=pz9+YSGv1Ha7Iy1hBwA7cLzkefbaGrM1oOz9ozAJ2BU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=cOZ2HBjb1ZZ19PGEj7ACf7J+qzq7xw9HfqF2jIZDd5f7BcacwGNTIuo+2DX1pfKKm GsltFxpxILLK0RU5vndPeym4Z772GN8pAvyFHAW1GTq0B+6bkoCuO1KlXUK5zrigPZ lFdjPJOGWcRS1BkBcJgFSLk1s0Fs+6839moEiffeORlcJ2wVIgCDVHS5LZLm76gdLQ +mGmMHQGKjFJ+MVakaEIAeD3dUMtmUVpayhFWVN31ulkSafK767DrHhBQsoLCO7Sit 3naHjUUEBFRJTdMfVHhXIm0zVFvdYju2ZoExiCxLfjcVu01V0E7Hkknx/QS8KERJ7t PE3PmwrpxD5Dw== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:11:52 +0200 Subject: [PATCH mptcp-net v3 06/19] mptcp: pm: ADD_ADDR rtx: resched blocked ADD_ADDR quicker Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-6-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1553; i=matttbe@kernel.org; h=from:subject:message-id; bh=pz9+YSGv1Ha7Iy1hBwA7cLzkefbaGrM1oOz9ozAJ2BU=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/Fwzpc9N5+VOBeVfh5ffm1X4iOf3YTHJ9sD3PnldZ byLRV/+7yhlYRDjYpAVU2SRbovMn/m8irfEy88CZg4rE8gQBi5OAZjIFXWG/wHcLzf68v33neRo WRt9Qm7fGo2Ub1LsB5YH9Ka75lmstmH4pz5pyV6W7j5lFbk+j9miO6Trcvguc/74NjNwyq/e9Pe XuQA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 When an ADD_ADDR needs to be retransmitted and another one has already been prepared -- e.g. multiple ADD_ADDRs have been sent in a row and need to be retransmitted later -- this additional retransmission will need to wait. In this case, the timer was reset to TCP_RTO_MAX / 8, which is ~15 seconds. This delay is unnecessary long: it should just be rescheduled at the next opportunity, e.g. after the retransmission timeout. Without this modification, some issues can be seen from time to time in the selftests when multiple ADD_ADDRs are sent, and the host takes time to process them, e.g. the "signal addresses, ADD_ADDR timeout" MPTCP Join selftest, especially with a debug kernel config. Note that on older kernels, 'timeout' is not available. It should be enough to replace it by one second (HZ). Fixes: 00cfd77b9063 ("mptcp: retransmit ADD_ADDR when timeout") Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index adbebf46dcce..0830a4d2029e 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -342,13 +342,8 @@ static void mptcp_pm_add_timer(struct timer_list *time= r) goto out; } =20 - if (mptcp_pm_should_add_signal_addr(msk)) { - timeout =3D TCP_RTO_MAX / 8; - goto out; - } - timeout =3D mptcp_adjust_add_addr_timeout(msk); - if (!timeout) + if (!timeout || mptcp_pm_should_add_signal_addr(msk)) goto out; =20 spin_lock_bh(&msk->pm.lock); --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E75163D7D89 for ; Mon, 13 Apr 2026 14:12:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089532; cv=none; b=nrfXKc+EhbRgLXrao3KHMpanLnTzn2G4M8R3n2MpBzl3aXOSrFq8bPD0EYGWE165RgapDiyFMGNNkpb2OSIkm2I1D7jKEH4qqDUYSsD7/Y4JpuaZ1tCTcijyS7DuU/ORv39oAUG9h7vhSNCSzYbUN0QlgUAlmyQERNsEl95wpIk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089532; c=relaxed/simple; bh=AeOXLUm6c8s934bcIBSU09kA/aUUlDw90GGi3QnQaLw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=n8Zw59gxtJbYczaLD8NJqSUuHcRZL+0xEIqiVvRyUjHdbmVfUWLwmzSSKxwW5ujMUMU96JiKt6ljKeUnCJQTk4lDvkTUbNQTjPSdO1TxVcxkHo1F46bIFvgax+JGvUina7DSxDu0UEPzyfuxeFygu+OopTJWPETTgoLVHJzTAWs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MPjJFTBD; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MPjJFTBD" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 69DC3C2BCAF; Mon, 13 Apr 2026 14:12:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089531; bh=AeOXLUm6c8s934bcIBSU09kA/aUUlDw90GGi3QnQaLw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=MPjJFTBD3VgbwZ2cCZsmtTDOUECBTYFDoNboz+2rm4HGF5wYOk3YtmIg3/LYyAq2c O1G82dBnkklqGwvWifYK0noOznKtLfnIEy0ziwOs29KH/TYbGEDHN1Krb8MtN1FDkt +7RrDmAJMdQBGZW/4UsOe36sw4PD64MJSok43+itveqDozaB7KzgbeguwaO9OVTY5U Kl6Am2A01LG+jPntUES8ltQ/8lOzr76C6y8csVFjbTGQ3/WfuEfmk8A9Q2DzElsT8W ZNheFCeI09Ur+ErBjkJkZeYKXRWw8uzrTuRDY1Nbii45KM/IwjV1/jmjpg+7LEr6rM eYJd8/Dvu+4og== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:11:53 +0200 Subject: [PATCH mptcp-net v3 07/19] mptcp: pm: ADD_ADDR rtx: skip inactive subflows Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-7-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1857; i=matttbe@kernel.org; h=from:subject:message-id; bh=AeOXLUm6c8s934bcIBSU09kA/aUUlDw90GGi3QnQaLw=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/FxjWe+6Pu3uiZfN91iuOW8Uypy2bduCsDuXBCWaq xwbZ0Ts7ChlYRDjYpAVU2SRbovMn/m8irfEy88CZg4rE8gQBi5OAZjIhzZGhrNuU+Y/3jDfgDtw qbe49uf1Me77nl/cbvCzKObFpDweTXdGhvehvKW/Ha6pSq4Ie3Th6dO5Hw5uv9238ETPre4FgaJ dCtwA X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 When looking at the maximum RTO amongst the subflows, inactive subflows were taken into account: that includes stale ones, and the initial one if it has been already been closed. Unusable subflows are now simply skipped. Stale ones are used as an alternative: if there are only stale ones, to take their maximum RTO and avoid to eventually fallback to net.mptcp.add_addr_timeout, which is set to 2 minutes by default. Fixes: 30549eebc4d8 ("mptcp: make ADD_ADDR retransmission timeout adaptive") Signed-off-by: Matthieu Baerts (NGI0) --- v2: restore accidentally deleted icsk->icsk_rto > max check --- net/mptcp/pm.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 0830a4d2029e..e2d62131023c 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -306,20 +306,27 @@ static unsigned int mptcp_adjust_add_addr_timeout(str= uct mptcp_sock *msk) const struct net *net =3D sock_net((struct sock *)msk); unsigned int rto =3D mptcp_get_add_addr_timeout(net); struct mptcp_subflow_context *subflow; - unsigned int max =3D 0; + unsigned int max =3D 0, max_stale =3D 0; =20 mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); struct inet_connection_sock *icsk =3D inet_csk(ssk); =20 - if (icsk->icsk_rto > max) + if (!__mptcp_subflow_active(subflow)) + continue; + + if (unlikely(subflow->stale)) { + if (icsk->icsk_rto > max_stale) + max_stale =3D icsk->icsk_rto; + } else if (icsk->icsk_rto > max) { max =3D icsk->icsk_rto; + } } =20 - if (max && max < rto) - rto =3D max; + if (max) + return max < rto ? max : rto; =20 - return rto; + return max_stale && max_stale < rto ? max_stale : rto; } =20 static void mptcp_pm_add_timer(struct timer_list *timer) --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DBE913CCFB6 for ; Mon, 13 Apr 2026 14:12:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089532; cv=none; b=u4UIb8cpm2+SeKlfB1Hxr6tuPI57PSq3cunfomJLfe6jGKEIj/vlY1RRzJv81AWV5h+MWvp+1+X9ck8Ca+5C5mF736CuUSEXH0TGCh1f37W0quiPLNfFojzTA89g/wGjVvfbhiLgD4xMU5OJNYIOtmvk9WN5lm4tKo8zSbxxz/k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089532; c=relaxed/simple; bh=CsvRWitzZn6GxqMqgzfxKxMcX9py9XEG9S6Y+8biWXc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lKVhoy4rELnXWy1ONvOyXgr3sXN/NKA2yZQ4GKtPstWuJYKXMTG2UgU7ZcAL0hVfzLZUswaKFWoprqOkoC9cfzZxDYPSZdLTbl1PhWJ3qCQWOGhymaj+zS6or8dsYpzBJcHwPUTthA1MFNZCo+E8lsmUK/19CCAeh4MtW//3w7E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TpaBK+Ar; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="TpaBK+Ar" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 30C9DC2BCB6; Mon, 13 Apr 2026 14:12:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089532; bh=CsvRWitzZn6GxqMqgzfxKxMcX9py9XEG9S6Y+8biWXc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=TpaBK+ArGYR8uIkJDSgAkiJvAvooyxFUYhd3SQGsnPdOUTijB8zr9OGza04mWxxtg TjuyqbKD8gnMCN0wS/eDehGUU8NGUmCYH0UO5fSa4VO8u0oJ9t3JNRkPsK7MbViBuT pNUx6y/hjzPhmpdrme3gcY5JOWYPnYWPWDLh8jyKDRMSGBdr8aqLUvf4wHx/q0tRdJ LIZiaq+gvzLwVKnewX6qmiGw5Z1SPg24LK1ZeLL0H4jngfg+TdF4Sm1WxjZ8wJtNwK WI3h1SAk2vXSnV5Anw/+QhGOemV1L4z7PjRPqx8bZujjslrQ6NdGYWnMjK2R4V7x7w s5NUWbwullv1Q== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:11:54 +0200 Subject: [PATCH mptcp-net v3 08/19] mptcp: pm: retrans ADD_ADDR: return early if no retrans Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-8-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=747; i=matttbe@kernel.org; h=from:subject:message-id; bh=CsvRWitzZn6GxqMqgzfxKxMcX9py9XEG9S6Y+8biWXc=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/FxbL++7LuCGoFMQU4n5DJfP7vqPqp3Td2nebZs5w TOkM8umo5SFQYyLQVZMkUW6LTJ/5vMq3hIvPwuYOaxMIEMYuDgFYCIvPRj+Cn8LWn2r4vnKl6uO XVptpHjm8OHu7Z/sRMLU3Q8cvSfReIXhf8KhxxuWNP0JLbx99w1nlK6IwWVlWbVmiYt8jK+Ob/s 4kw8A X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 No need to iterate over all subflows if there is no retransmission needed. Exit early in this case then. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index e2d62131023c..b3c4a6c75c27 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -308,6 +308,9 @@ static unsigned int mptcp_adjust_add_addr_timeout(struc= t mptcp_sock *msk) struct mptcp_subflow_context *subflow; unsigned int max =3D 0, max_stale =3D 0; =20 + if (!rto) + return 0; + mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); struct inet_connection_sock *icsk =3D inet_csk(ssk); --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 901723806AA for ; Mon, 13 Apr 2026 14:12:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089533; cv=none; b=OAc2VSw4YZeIrryk/V73LNnEWafuy67whPWnvfe5Eg1XkRYEkgouEN54Dqvmkrx58T/nONaxCoSwLPhz/WCysVE5cb3zFfUSvHEfDm6nMF943EHu0avH1Gx/Dt96UCmpIKZex/HNzZi51yOjxCVSggJlNUKS21KrYxG1rnXXxkE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089533; c=relaxed/simple; bh=jdnbny3FpAqqGhKUlbs7dLOaF4eEPi0aNGYalBCs4Ts=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=M7BjdDphs1jWUU1xN0GRqSxR17JKz+bFZ5nyQ9Prfk3jZjX8QYJF/NnNfo484RfKJKFB+8p7vpjy3LjUA9WgLIgpxzSLkDCIhLtbfH4Wxum+WXbxKCS1B/VincKwgIhaGDvpEsD4oIkWf3DQV57Qyy1bYohPRaKANJaF2TH4+gU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QJ6+lvCP; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QJ6+lvCP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EBBBBC2BCAF; Mon, 13 Apr 2026 14:12:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089533; bh=jdnbny3FpAqqGhKUlbs7dLOaF4eEPi0aNGYalBCs4Ts=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=QJ6+lvCPQw7iya2/UgY/2qutRUYqJGQfM5edEYh/qAY88LuGDh70XmY6HPgGSIdEz /eAp7LB2GFTXkVAfedzolMyX7fJCk2oOQ+SWesL8D4XhD1IhMS9+dce2bkEsstqzWy FFv3T+6HbiK/Js32kHGPqeI2Hcrxp5pp5SEQxuAUZ8UtL1YfdD1xbT9S4+q7rsb6Tw Baw4V1bbnk93pRSMui/KnRo0OoLILJUBuahb/95D4moHyucOR0ujawSqpi1adLRYIc YZ+FIuwU9XjBrHd6BF29tauWsmcnUa4xu/22PsJW1pcc51xL0dLMFWiNh3t3m6n1Zj bl16mhx88ADzQ== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:11:55 +0200 Subject: [PATCH mptcp-net v3 09/19] mptcp: pm: prio: skip closed subflows Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-9-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1077; i=matttbe@kernel.org; h=from:subject:message-id; bh=jdnbny3FpAqqGhKUlbs7dLOaF4eEPi0aNGYalBCs4Ts=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/Fxn3VXV++7qxII9ifIqZjaJE38x6piGz1x4+vaZz 2FeBpWqHaUsDGJcDLJiiizSbZH5M59X8ZZ4+VnAzGFlAhnCwMUpABN5PIWRYeqZpikGb7vWiT6R lYjmP9zbGx3x3S576sJXj1YETPlU0cHIcImHcbGqhszUN2xdKzU2bMo0+Z7Vq7+/en/m6S2sFfa zuQA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 When sending an MP_PRIO, closed subflows needs to be skipped. This fixes the case where the initial subflow got closed, re-opened later, then an MP_PRIO is needed for the same local address. Note that explicit MP_PRIO cannot be sent during the 3WHS, so it is fine to use __mptcp_subflow_active(). Fixes: 067065422fcd ("mptcp: add the outgoing MP_PRIO support") Fixes: b29fcfb54cd7 ("mptcp: full disconnect implementation") Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index b3c4a6c75c27..17f6ccc22941 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -284,6 +284,9 @@ int mptcp_pm_mp_prio_send_ack(struct mptcp_sock *msk, struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); struct mptcp_addr_info local, remote; =20 + if (!__mptcp_subflow_active(subflow)) + continue; + mptcp_local_address((struct sock_common *)ssk, &local); if (!mptcp_addresses_equal(&local, addr, addr->port)) continue; --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 637F13D75C5 for ; Mon, 13 Apr 2026 14:12:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089534; cv=none; b=KXqRT9HIAydo7ZYl1VmAcAlzRlW11x/OdXXQoEKRTIu8xGVAACOngP4Spf6OwMpErn/EHdlCRT1/QB3F0IVZdawn+3RBboIRmbt06GOsucdzuw6XzXMJw8gKO387sdjq+bqijpuSYPT8Zqrl2tUiFlDci4j3417TPYNOutv+c3I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089534; c=relaxed/simple; bh=J/4TSLYnn4WswjEmdMv9hBM7YG3BsYv6rruqE5u/zDQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oXtzFcBcSt/mjG4AyhxO29gKYC0dMAp+fk1TKg7ZAi+OqaL63GY/xPd5d06nepoNr1u61bxgwepY7ejCf5C0/IpfWBv7xeAYIplo72teIBxBSsPxFsW6K0FFHkPt5APLhGiVnacPQyg24XlbsG3PzWzPBG7v+4agU+le99ZlQSg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sD/UAlkS; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="sD/UAlkS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B2D75C2BCAF; Mon, 13 Apr 2026 14:12:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089534; bh=J/4TSLYnn4WswjEmdMv9hBM7YG3BsYv6rruqE5u/zDQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=sD/UAlkS1onf6Fo8fuItjgw3t44l+MIaNHSa5WnCGv7qHL2wxw64majyMPRoGMNmF oNGUF28SnU1sxFgrE046s65ED2snLhgfPjlCZwYFcoR65SfyxrjCaRjbkpSzE5NfKt aCY1K2RKrTs3TbpD+bLPaicmsj3HA3sbzd0Ghwq+AGVvNLnr8x/YcTrpPT9qSDrKUK GYadTL+Q1qYTYs158ZooDLGhUSrV+r1VWG6uMvLOaUwYJSJsJ9AL5mGrV2K2A2oFKk jnZGlj0qasKpNM4LD4I1Mq5g7Q+2IS8Cdg7ifzPOXZiO2KJvft2FAY5IrDUPSWPA9r fIyfeL5n/U1NQ== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:11:56 +0200 Subject: [PATCH mptcp-net v3 10/19] selftests: mptcp: pm: restrict 'unknown' check to pm_nl_ctl Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-10-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1497; i=matttbe@kernel.org; h=from:subject:message-id; bh=J/4TSLYnn4WswjEmdMv9hBM7YG3BsYv6rruqE5u/zDQ=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/Fwn/ulE3C/uO+t3/Qtzern1XunnXs7FFby32hOsV R+y2+uYd5SyMIhxMciKKbJIt0Xmz3xexVvi5WcBM4eVCWQIAxenAEzEv4WR4YjsAz1moYAq1/81 zt6qd9cuy5y98uXSz1O4hGb8iD97i5OR4ZIM+yNV+5rkYpWi2tdcM2rOyrTMF/h9/kuaUNKPU/c lmAA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 When pm_netlink.sh is executed with '-i', 'ip mptcp' is used instead of 'pm_nl_ctl'. IPRoute2 doesn't support the 'unknown' flag, which has only been added to 'pm_nl_ctl' for this specific check: to ensure that the kernel ignores such unsupported flag. No reason to add this flag to 'ip mptcp'. Then, this check should be skipped when 'ip mptcp' is used. Fixes: 29f4801e9c8d ("selftests: mptcp: pm: ensure unknown flags are ignore= d") Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/pm_netlink.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/pm_netlink.sh b/tools/testin= g/selftests/net/mptcp/pm_netlink.sh index 123d9d7a0278..d844ee687a29 100755 --- a/tools/testing/selftests/net/mptcp/pm_netlink.sh +++ b/tools/testing/selftests/net/mptcp/pm_netlink.sh @@ -192,9 +192,13 @@ check "show_endpoints" \ flush_endpoint check "show_endpoints" "" "flush addrs" =20 -add_endpoint 10.0.1.1 flags unknown -check "show_endpoints" "$(format_endpoints "1,10.0.1.1")" "ignore unknown = flags" -flush_endpoint +# "unknown" flag is only supported by pm_nl_ctl +if ! mptcp_lib_is_ip_mptcp; then + add_endpoint 10.0.1.1 flags unknown + check "show_endpoints" "$(format_endpoints "1,10.0.1.1")" \ + "ignore unknown flags" + flush_endpoint +fi =20 set_limits 9 1 2>/dev/null check "get_limits" "${default_limits}" "rcv addrs above hard limit" --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 259573D75C5 for ; Mon, 13 Apr 2026 14:12:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089535; cv=none; b=fvoZtK2XFt2fc6CRXiu7hIJO4X3eNkwUlb5leFyygSbqh8a/Waxlx2lAezVx/xVVhfTHsy4gGr2x6/cDonaiHujH4ikqBCXzt9GxpxI7OkwoSz7bX7QzgZ/6L5bCimZCWj5Y+wUh0oxseYq1PoxTKaLALYrxxd/B225iHumGbc4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089535; c=relaxed/simple; bh=JfovlaL/U2Cz15YP5/ltVy2OQ6r/tYSTUof7MUBhiNc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sLnI1qn0AjvE4YPnq2Pqq/DNjMwnILrqdbWUs7YNnmVFZVQQ1bInkkBTO4riZuLa+GG1bJSBRL/1SmO3iJAFw9DuLeiauag1UWxyTkHWC2ZnzL30v0ZA0ersGgilnW/ZiOxSGBhnHyuyL5QBPesxXhmqossMfP94OOXOPUgMVlw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=FB9UrkHh; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="FB9UrkHh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7979FC2BCB5; Mon, 13 Apr 2026 14:12:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089534; bh=JfovlaL/U2Cz15YP5/ltVy2OQ6r/tYSTUof7MUBhiNc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=FB9UrkHh0thV85I+wmjg/ljmdqQyG/Zh/3OZCj0yf3Gf1ZN4SCOEri3vHHNLSy3MV VVXp38yela05KwIfbdccq6IypXA8Vd+ClkKGOQJp/qK7rxWRDsSWnHbbqSShTjhhs5 jrtlcJyMcmB1Y9wo6m86Ir73Vkb3zyefG6N2R+hj8A0AnJS3bPO87Gsfnl7VfbbUwk lmA1LF0BtYCRfCa+HewqDtBNAKOGaBBrBb/ORGhCILFci0XlI/iAkpOWk4cU1mgEHD wwcBVU2Fj4SPSaiE4K0rt7wv5uBFhF1OFvxntAnUc0DGXAHOQfWm3z/JD0b8Aqhw+Q CacVYNGVUJOyw== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:11:57 +0200 Subject: [PATCH mptcp-net v3 11/19] mptcp: pm: in-kernel: explicitly limit batches to array size Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-11-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5699; i=matttbe@kernel.org; h=from:subject:message-id; bh=JfovlaL/U2Cz15YP5/ltVy2OQ6r/tYSTUof7MUBhiNc=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/Fz/aXfV9fD2B/tUqp8USF/34dtQkbH+/r7/u+a9O BLhWLBfsKOUhUGMi0FWTJFFui0yf+bzKt4SLz8LmDmsTCBDGLg4BWAiVwsYGSbzbU31V5A/5xM9 QyL4cuChuNWzan+uk/B9U/PDcVGcxkmG/9kVU2905L3tbHqV0cn3tjEvwlXE4qOrgENLn7y+1r6 DrAA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 The in-kernel PM can create subflows in reply to ADD_ADDR by batch of maximum 8 subflows for the moment. Same when adding new "subflow" endpoints with the fullmesh flag. This limit is linked to the arrays used during these steps. There was no explicit limit to the arrays size (8), because the limit of extra subflows is the same (8). It seems safer to use an explicit limit, but also these two sizes are going to be different in the next commit. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm_kernel.c | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index 906a1d5ab9ed..a678b1c33f56 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -201,7 +201,8 @@ fill_remote_addr(struct mptcp_sock *msk, struct mptcp_a= ddr_info *local, static unsigned int fill_remote_addresses_fullmesh(struct mptcp_sock *msk, struct mptcp_addr_info *local, - struct mptcp_addr_info *addrs) + struct mptcp_addr_info *addrs, + int addrs_size) { u8 limit_extra_subflows =3D mptcp_pm_get_limit_extra_subflows(msk); bool deny_id0 =3D READ_ONCE(msk->pm.remote_deny_join_id0); @@ -236,7 +237,8 @@ fill_remote_addresses_fullmesh(struct mptcp_sock *msk, msk->pm.extra_subflows++; i++; =20 - if (msk->pm.extra_subflows >=3D limit_extra_subflows) + if (msk->pm.extra_subflows >=3D limit_extra_subflows || + i =3D=3D addrs_size) break; } =20 @@ -248,7 +250,8 @@ fill_remote_addresses_fullmesh(struct mptcp_sock *msk, */ static unsigned int fill_remote_addresses_vec(struct mptcp_sock *msk, struct mptcp_addr_info *= local, - bool fullmesh, struct mptcp_addr_info *addrs) + bool fullmesh, struct mptcp_addr_info *addrs, + int addrs_size) { /* Non-fullmesh: fill in the single entry corresponding to the primary * MPC subflow remote address, and return 1, corresponding to 1 entry. @@ -257,7 +260,7 @@ fill_remote_addresses_vec(struct mptcp_sock *msk, struc= t mptcp_addr_info *local, return fill_remote_addr(msk, local, addrs); =20 /* Fullmesh endpoint: fill all possible remote addresses */ - return fill_remote_addresses_fullmesh(msk, local, addrs); + return fill_remote_addresses_fullmesh(msk, local, addrs, addrs_size); } =20 static struct mptcp_pm_addr_entry * @@ -410,7 +413,8 @@ static void mptcp_pm_create_subflow_or_signal_addr(stru= ct mptcp_sock *msk) else /* local_addr_used is not decr for ID 0 */ msk->pm.local_addr_used++; =20 - nr =3D fill_remote_addresses_vec(msk, &local.addr, fullmesh, addrs); + nr =3D fill_remote_addresses_vec(msk, &local.addr, fullmesh, + addrs, ARRAY_SIZE(addrs)); if (nr =3D=3D 0) continue; =20 @@ -447,6 +451,7 @@ static unsigned int fill_local_addresses_vec_fullmesh(struct mptcp_sock *msk, struct mptcp_addr_info *remote, struct mptcp_pm_local *locals, + int locals_size, bool c_flag_case) { u8 limit_extra_subflows =3D mptcp_pm_get_limit_extra_subflows(msk); @@ -488,7 +493,8 @@ fill_local_addresses_vec_fullmesh(struct mptcp_sock *ms= k, msk->pm.extra_subflows++; i++; =20 - if (msk->pm.extra_subflows >=3D limit_extra_subflows) + if (msk->pm.extra_subflows >=3D limit_extra_subflows || + i =3D=3D locals_size) break; } rcu_read_unlock(); @@ -559,7 +565,8 @@ fill_local_laminar_endp(struct mptcp_sock *msk, struct = mptcp_addr_info *remote, static unsigned int fill_local_addresses_vec_c_flag(struct mptcp_sock *msk, struct mptcp_addr_info *remote, - struct mptcp_pm_local *locals) + struct mptcp_pm_local *locals, + int locals_size) { u8 limit_extra_subflows =3D mptcp_pm_get_limit_extra_subflows(msk); struct pm_nl_pernet *pernet =3D pm_nl_get_pernet_from_msk(msk); @@ -586,7 +593,8 @@ fill_local_addresses_vec_c_flag(struct mptcp_sock *msk, msk->pm.extra_subflows++; i++; =20 - if (msk->pm.extra_subflows >=3D limit_extra_subflows) + if (msk->pm.extra_subflows >=3D limit_extra_subflows || + i =3D=3D locals_size) break; } =20 @@ -620,13 +628,14 @@ fill_local_address_any(struct mptcp_sock *msk, struct= mptcp_addr_info *remote, */ static unsigned int fill_local_addresses_vec(struct mptcp_sock *msk, struct mptcp_addr_info *r= emote, - struct mptcp_pm_local *locals) + struct mptcp_pm_local *locals, int locals_size) { bool c_flag_case =3D remote->id && mptcp_pm_add_addr_c_flag_case(msk); =20 /* If there is at least one MPTCP endpoint with a fullmesh flag */ if (mptcp_pm_get_endp_fullmesh_max(msk)) return fill_local_addresses_vec_fullmesh(msk, remote, locals, + locals_size, c_flag_case); =20 /* If there is at least one MPTCP endpoint with a laminar flag */ @@ -637,7 +646,8 @@ fill_local_addresses_vec(struct mptcp_sock *msk, struct= mptcp_addr_info *remote, * limits are used -- accepting no ADD_ADDR -- and use subflow endpoints */ if (c_flag_case) - return fill_local_addresses_vec_c_flag(msk, remote, locals); + return fill_local_addresses_vec_c_flag(msk, remote, locals, + locals_size); =20 /* No special case: fill in the single 'IPADDRANY' local address */ return fill_local_address_any(msk, remote, &locals[0]); @@ -672,7 +682,7 @@ static void mptcp_pm_nl_add_addr_received(struct mptcp_= sock *msk) /* connect to the specified remote address, using whatever * local address the routing configuration will pick. */ - nr =3D fill_local_addresses_vec(msk, &remote, locals); + nr =3D fill_local_addresses_vec(msk, &remote, locals, ARRAY_SIZE(locals)); if (nr =3D=3D 0) return; =20 --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BB7703D75C5 for ; Mon, 13 Apr 2026 14:12:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089535; cv=none; b=p9MTQoQnDW/nNasPBHA9krWoJXMRdSQTxWJm18ZO5cO+ItupV7Kv7cjPc8VdxLsnyfB9YDDgwLuazYfbghDSrvkfO6kdQXYazGa3equwNZfe6u/fAYb4gBDc/ajPq6tv77+/PQ9No/jOrdHDkHY3O0bUdCNlAmOizYnN8M42poM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089535; c=relaxed/simple; bh=geg3i+AZ83UdjmswHRjfvGyLJA3VdBH2mrx+q6p2fj4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XsH7fpLTbomOxn5ap1jTdaAatW7MKc0gtpSlVFT/a1bbGVVaOS/iNiQsEvxTTrZywzVjTZWINo1Cgnf6pHpBhnFdOmJzBX8o8gGCFDGUkYO/6FCcaw7VqaI+7n53e1vl6KNlTVMEbzbYcGb5Gnrivsac+e0w5lXh5mrKdqjzhmo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Vczmbyk1; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Vczmbyk1" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 406DFC2BCAF; Mon, 13 Apr 2026 14:12:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089535; bh=geg3i+AZ83UdjmswHRjfvGyLJA3VdBH2mrx+q6p2fj4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Vczmbyk19VtJO/cXqVwQyFG0mSrRtZYsnkiTD8dFhK4ecpSNYZWf6eE+8yT5rFVTk 8tpKEBU2Jfg2gjbM4ncB4zmlnQ1WSCPrgQ4xI3i6Q8uscDP2BywjwWKen4t4ZlBEat mxk0iN7yfiNzeCvuhviEXVgUabtAQJN1uB5vfpedLRgFC7h6QLezdvdBHbxpGJuEKd 3zOn5IruLHgdRSazrMVjwNPZa2meNBBm1OxqLq82EyHa7o8Qbw/E1kT+EH2hcyWwda nVZyuJdnxUX/stRKdNtEeukzHJ/KorZB/YaI8lRD526JrK0BAOlnV3WhXQNeX2xJjM SyeRceOwPpYEQ== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:11:58 +0200 Subject: [PATCH mptcp-net v3 12/19] mptcp: pm: in-kernel: increase all limits to 64 Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-12-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2212; i=matttbe@kernel.org; h=from:subject:message-id; bh=geg3i+AZ83UdjmswHRjfvGyLJA3VdBH2mrx+q6p2fj4=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/Nzg8/DDu3DtzWukDwifuNDdbrHvmeiMk/suruNz4 gq4MuXz/45SFgYxLgZZMUUW6bbI/JnPq3hLvPwsYOawMoEMYeDiFICJ6PYzMpyvOPIt6LUv943s K/u2pmk9kljFekH96LsrzMnvPrYLGjgz/LNcVJ3677pf8KvfAkHLTj7jFzp6ZMWjBK5FIp9K+VL avzEDAA== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 This means switching the maximum from 8 to 64 for the number of subflows and accepted ADD_ADDR. The previous limit of 8 subflows makes sense in most cases. Using more subflows will very likely *not* improve the situation, and could even decrease the performances. But there are no technical limitations nor performance impact to raise this limit, so let's do it: this will allow people with very specific use-cases, and researchers to easily create more subflows, and measure the performance impact by themselves. The theoretical limit is 255 -- the ID is written in a u8 on the wire -- but 64 is more than enough. With so many subflows, it will be costly to iterate over all of them when operations are done in bottom half. Note that the in-kernel PM will continue to create subflows in reply to ADD_ADDR with a single batch of maximum 8 subflows. Same when adding new "subflow" endpoints with the fullmesh flag. Increasing those batch limits would have a memory impact, and it looks fine not to cover these cases with larger batches for the moment. If more is needed later, the position of the last subflow from the list could be remembered, and the list iteration could continue later. Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/434 Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm_kernel.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index a678b1c33f56..f163d40e7375 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -30,6 +30,7 @@ struct pm_nl_pernet { }; =20 #define MPTCP_PM_ADDR_MAX 8 +#define MPTCP_PM_SUBFLOWS_MAX 64 =20 static struct pm_nl_pernet *pm_nl_get_pernet(const struct net *net) { @@ -1381,10 +1382,10 @@ static int parse_limit(struct genl_info *info, int = id, unsigned int *limit) return 0; =20 *limit =3D nla_get_u32(attr); - if (*limit > MPTCP_PM_ADDR_MAX) { + if (*limit > MPTCP_PM_SUBFLOWS_MAX) { NL_SET_ERR_MSG_ATTR_FMT(info->extack, attr, "limit greater than maximum (%u)", - MPTCP_PM_ADDR_MAX); + MPTCP_PM_SUBFLOWS_MAX); return -EINVAL; } return 0; --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 825F53D75C3 for ; Mon, 13 Apr 2026 14:12:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089536; cv=none; b=EO6DkNv+sQLQvJ2MTBSmXYlRxY52ZwtC15jIKilDkyZsQyvOJWLpX884OzcL+mk/M8vgQHuSy7wTl+sNavp4SsNdQa5sjBaYr4OwEODxBzPfx730vxpJUmJb2lEsz/jI4DtlWZUoVbgkRD/x2eulm18i5B+vICMq27B7x2GKWtw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089536; c=relaxed/simple; bh=V+qTh1H+zvXazMYLs/1iysESXTfvfHvnFRBnUfIXOtY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AIytJP4wa8yOAsW0obF7zq22sJWV+ak9hUn/qhwP6gXgl2tUBMHm2X3hxEgGrKIQIqq4F0yVJ9rY4DMtdH32GhFSj8D//25co7HJLEzs643oyWhhLQTYb99U3gSlTrCqROwbWO5vRnjxWdvlKDaZSfVHMVzd2OQj4EXdRhkMNEk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=oCesNe5+; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="oCesNe5+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 07252C4AF0C; Mon, 13 Apr 2026 14:12:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089536; bh=V+qTh1H+zvXazMYLs/1iysESXTfvfHvnFRBnUfIXOtY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=oCesNe5+G3z7qLkcEEX63SirAh7JnsF1YroRU8wQAiHt94kfMx3qiebLAsuOzqntk dZMbkikFDn25cxJubu9PfrcpjpeK+qCpca7+jgcWbu4n4Xoj36ycCBgolCT5qbgGaR 0VQ0veoCOXpYDpgH4lL8B/lxNuB2Cx1aJoD0UWpZZ1dy5bawvMkYSy0koZ9uLNK0j3 LYVcVk/PjHCHNR+uUeKkWM5VoIEZzBy+SD1t3o+HQmOyXmBDG/VsdEszwZA9qhFgoh KHFKd5lj2rEbpWv5O950UTiWEfJX0irNTdAD+zjI8u4etI3bTdKv2mC5Vdl4mlkI/5 vVtVGLNubSPgA== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:11:59 +0200 Subject: [PATCH mptcp-net v3 13/19] mptcp: pm: kernel: allow flushing more than 8 endpoints Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-13-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3202; i=matttbe@kernel.org; h=from:subject:message-id; bh=V+qTh1H+zvXazMYLs/1iysESXTfvfHvnFRBnUfIXOtY=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/NyYGBCddcIgY/Fq5cUcMxVURAUj0jP6viUbX1vbp KZ3+fHSjlIWBjEuBlkxRRbptsj8mc+reEu8/Cxg5rAygQxh4OIUgImsv8jwP8nb9+tygWAeZr7S vCqtF14xkW+N1+6tmXnIKnHrya4L3Az/sw86bVlxZZ3YugOzLe7dPa33Wk6ZacKdhgSn8xdPPvL NYgUA X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 The mptcp_rm_list structure contains an array of IDs of 8 entries: to be able to send a RM_ADDR with 8 IDs. This limitation was OK so far because there could maximum 8 endpoints. But this is going to change in the next commit. To cope with that, if one of the arrays is full, the iteration stops, the lists are processed, then the iteration continues where it previously stopped. Note that if there are many endpoints to remove, and multiple RM_ADDR to send, it might be more likely that some of these RM_ADDRs are dropped or lost. This is a known limitation: RM_ADDR are not retransmitted in MPTCPv1. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm_kernel.c | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index f163d40e7375..1480bb7473b4 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -1224,19 +1224,30 @@ int mptcp_pm_nl_del_addr_doit(struct sk_buff *skb, = struct genl_info *info) } =20 static void mptcp_pm_flush_addrs_and_subflows(struct mptcp_sock *msk, - struct list_head *rm_list) + struct list_head *rm_list, + struct mptcp_pm_addr_entry *entry) { - struct mptcp_rm_list alist =3D { .nr =3D 0 }, slist =3D { .nr =3D 0 }; - struct mptcp_pm_addr_entry *entry; + struct mptcp_rm_list alist, slist; + bool more; =20 - list_for_each_entry(entry, rm_list, list) { - if (slist.nr < MPTCP_RM_IDS_MAX && - mptcp_lookup_subflow_by_saddr(&msk->conn_list, &entry->addr)) +again: + alist.nr =3D 0; + slist.nr =3D 0; + more =3D false; + + entry =3D list_prepare_entry(entry, rm_list, list); + list_for_each_entry_continue(entry, rm_list, list) { + if (mptcp_lookup_subflow_by_saddr(&msk->conn_list, &entry->addr)) slist.ids[slist.nr++] =3D mptcp_endp_get_local_id(msk, &entry->addr); =20 - if (alist.nr < MPTCP_RM_IDS_MAX && - mptcp_remove_anno_list_by_saddr(msk, &entry->addr)) + if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr)) alist.ids[alist.nr++] =3D mptcp_endp_get_local_id(msk, &entry->addr); + + if (slist.nr =3D=3D MPTCP_RM_IDS_MAX || + alist.nr =3D=3D MPTCP_RM_IDS_MAX) { + more =3D !list_is_last(&entry->list, rm_list); + break; + } } =20 spin_lock_bh(&msk->pm.lock); @@ -1247,9 +1258,14 @@ static void mptcp_pm_flush_addrs_and_subflows(struct= mptcp_sock *msk, if (slist.nr) mptcp_pm_rm_subflow(msk, &slist); /* Reset counters: maybe some subflows have been removed before */ - bitmap_fill(msk->pm.id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); - msk->pm.local_addr_used =3D 0; + if (!more) { + bitmap_fill(msk->pm.id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); + msk->pm.local_addr_used =3D 0; + } spin_unlock_bh(&msk->pm.lock); + + if (more) + goto again; } =20 static void mptcp_nl_flush_addrs_list(struct net *net, @@ -1266,7 +1282,7 @@ static void mptcp_nl_flush_addrs_list(struct net *net, =20 if (!mptcp_pm_is_userspace(msk)) { lock_sock(sk); - mptcp_pm_flush_addrs_and_subflows(msk, rm_list); + mptcp_pm_flush_addrs_and_subflows(msk, rm_list, NULL); release_sock(sk); } =20 --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 49A903806AA for ; Mon, 13 Apr 2026 14:12:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089537; cv=none; b=gqXkvsazrpO9JbemB2Ferssr3WnlLAXWQ1BQ/gtaEqnrS0ta+3uDoLPW8ZKRSIzroGUeL9eHeMvmYkdL/P8WUgH+ee63lO+zGahaZcrCxCxmDuyOmnKt4rwICWqA5eq67XP6NB69sAe3vzb9L0FXSV1Np1V6ugG8nuWIrHrMo9w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089537; c=relaxed/simple; bh=FzoQpH+/1rJAZNWER5wf3XVojQhw8DWII+Nl045Pjg4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YAjMw6ivum6xIdyq5+KaJnN2WhWKUTH3zRYrOL18w/DU41YkaYJUYZA5g/3SsheY390az7vTVHvXPm2H2MhM5Ddhm19SGSbRwcNrHkGfcAacunPfQ0H6VVUFfbBCr9banFot4UwoOVkcfCNSpnswfk+nQZ3OEqrX41St8n9/yZE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fd656njF; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="fd656njF" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C2768C2BCAF; Mon, 13 Apr 2026 14:12:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089537; bh=FzoQpH+/1rJAZNWER5wf3XVojQhw8DWII+Nl045Pjg4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=fd656njFzHf+b/TzAqfx1QoEU6tK48NKjs+hajuwoywHb8aNJ0vEkrjIiuneWkOpH Xj2i7XHO4FbM+90rJTRTWq2/ju7VIy/rdW2HK0gLUlsDXhok/6ePUeZ4spQFejAmom 2XWnD0dHnNNFMxxsSpM2atPBjYmUY8TfiDwtmCtfzrl6/DLBIeqLpGa1LCVnn/6+Mq Pe55gPSYhC5H9hqpg0Bv7SL8bmVP0LSXy1NaeFLOX44Kze9pPbe41FxPRIXKGu70/Q Bq9bCDidPdlv4xylGiAuAi7uNNyqp2Kax/82WApG0zGfilwX5k1a2PJ07RuP+VzytS krLADEeHUz1AQ== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:12:00 +0200 Subject: [PATCH mptcp-net v3 14/19] mptcp: pm: in-kernel: increase endpoints limit Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-14-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1182; i=matttbe@kernel.org; h=from:subject:message-id; bh=FzoQpH+/1rJAZNWER5wf3XVojQhw8DWII+Nl045Pjg4=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/NzYEqzT9S7xqs6sOuV9R+Za3vK/cWp1fIiXwPLFJ 17tCzqp3lHKwiDGxSArpsgi3RaZP/N5FW+Jl58FzBxWJpAhDFycAjARNyOGf1ZaOxPeyPUdWDVP bcGGOXHrdHeIrz/NIu204l3XMmv+w7YM/+N37X+Us1DWOXXT0aJ5G2vK5vlF3/Ver94TxbKrK7e HgxkA X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 The endpoints are managed in a list which was limited to 8 entries. This limit can be too small in some cases: by having the same limit as the number of subflows, it might not allow creating all expected subflows when having a mix of v4 and v6 addresses that can all use MPTCP on v4/v6 only networks. While increasing the limit above the new subflows one, why not using the technical limit: 254. Indeed, the endpoint will each have an ID that will be used on the wire, limited to u8, and the ID 0 is reserved to the initial subflow. Signed-off-by: Matthieu Baerts (NGI0) --- 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 1480bb7473b4..c75a2c29bcf2 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -746,7 +746,7 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_= nl_pernet *pernet, */ if (pernet->next_id =3D=3D MPTCP_PM_MAX_ADDR_ID) pernet->next_id =3D 1; - if (pernet->endpoints >=3D MPTCP_PM_ADDR_MAX) { + if (pernet->endpoints =3D=3D MPTCP_PM_MAX_ADDR_ID) { ret =3D -ERANGE; goto out; } --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 12EF83D6CD2 for ; Mon, 13 Apr 2026 14:12:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089538; cv=none; b=bLj2SLdZwN2piZYVcRE9JuEHzAcFTP/Q3FUpgkexPakgO8aH+RjgDcPBQdOkIMNwlWfVh4eRUfsU5BHm1bcA+APTZQA4y8K98gu4QIfkzFT1kQkKsvu7oGo4D7veDb4XtydKHTyBR4VWLrReX2ZhkRYgAZ/jz8RyUEqYVoRXEHM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089538; c=relaxed/simple; bh=k+RpxqRdGerfGFAGy1z4N+ND2xXyRKGbPOpBhMvR2Mc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KChKptP7rVJ3U6ZFuIZRVUuD1K+ow2uRivUoTf28QwK3XrIyyHJHVvXpgRMcdFfdzixDBiEBFAi0m3Fv6TR1N3eqgbbD+wKgW6fXuSn+Pj0PZTNlBG8hwB7+g64CN54AfUpYjEZAYZUB3kdL51ARBByHjS5LmEzA7awDGzxHUmc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rf1ORehF; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="rf1ORehF" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8950BC2BCB7; Mon, 13 Apr 2026 14:12:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089537; bh=k+RpxqRdGerfGFAGy1z4N+ND2xXyRKGbPOpBhMvR2Mc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=rf1ORehFNLKbJYz+4GTH8bo4RJdy04ZiIKCcOwLRmXQ3d8YBt5VDB7qhY2fNSh+gX aJ2tHyGukfehCx/OjNRvnWC44B+1GxZnyrThyfQT6KmNYxkkYBwK+VMT0M5nOCRs0J ERQzV02eBiynUTIpU2JMNLU26VAw1o/qKPF5d8+o5SGNFcc+Gqktg1c7Wg0tw8xRWJ yyXaDvF6oVueobzDDFjoacg8W41YjU+vJI2s2VjNRieZts13Gl5VExrbpzavVuDgIu nBjH+H0qHA5xkWb0625//UIvD+oWUQceRwRAQ89bVR0kxqNIYQfkeHrJGhJjEepa73 ZJ0dRlf5jrUBg== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:12:01 +0200 Subject: [PATCH mptcp-net v3 15/19] selftests: mptcp: join: allow changing ifaces nr per test Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-15-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1877; i=matttbe@kernel.org; h=from:subject:message-id; bh=k+RpxqRdGerfGFAGy1z4N+ND2xXyRKGbPOpBhMvR2Mc=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/Nxk5LFMnut+x4pfXieLD8lt8Mr/+9L5UEH3Kf4Xl kfO/TwR0FHKwiDGxSArpsgi3RaZP/N5FW+Jl58FzBxWJpAhDFycAjCRDg+Gf8qFaRe2KTnPX95j 9qX65O0jKxfe43u4+Mbyx4lz1ebI/oliZJi9zuP2a8eULdVNJUeLNE2PmK/+tGiasnCNwxX9Nfv 9i1kA X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 By default, 4 network interfaces are created per subtest in a dedicated net namespace. Each netns has a dedicated pair of v4 and v6 addresses. Future tests will need more. Simply always creating more network interfaces per test will increase the execution time for all other tests, for no other benefits. So now it is possible to change this number only when needed, by setting ifaces_nr when calling 'reset', e.g. ifaces_nr=3D8 reset "Subtest title" Note that it might also be interesting to decrease the default value to 2 to reduce the setup time, especially when a debug kernel config is being used. Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index beec41f6662a..28da9df797ae 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -63,6 +63,7 @@ unset fastclose unset fullmesh unset speed unset bind_addr +unset ifaces_nr unset join_syn_rej unset join_csum_ns1 unset join_csum_ns2 @@ -146,7 +147,7 @@ init_partial() # ns1eth4 ns2eth4 =20 local i - for i in $(seq 1 4); do + for i in $(seq 1 "${ifaces_nr:-4}"); do ip link add ns1eth$i netns "$ns1" type veth peer name ns2eth$i netns "$n= s2" ip -net "$ns1" addr add 10.0.$i.1/24 dev ns1eth$i ip -net "$ns1" addr add dead:beef:$i::1/64 dev ns1eth$i nodad @@ -165,7 +166,7 @@ init_partial() init_shapers() { local i - for i in $(seq 1 4); do + for i in $(seq 1 "${ifaces_nr:-4}"); do tc -n $ns1 qdisc add dev ns1eth$i root netem rate 20mbit delay 1ms tc -n $ns2 qdisc add dev ns2eth$i root netem rate 20mbit delay 1ms done --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CB7413D75C3 for ; Mon, 13 Apr 2026 14:12:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089538; cv=none; b=P8dFFbqpESfzrjnD9PasBLiDlNWupPc9odpItpwub/e5VRgp0FwSJV0nNBD17yuMRQ/tDJ1c0x65zTbSqAQZ+LAbrkSJtFn537Grc3ErclwMC/2Be3snvjnNM21v9WseJ5DDEHt+xsAKTBgT78fdjQbelHpUlqARnFMSy3zsV78= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089538; c=relaxed/simple; bh=+qaBdb9rEAmToN4IiTNcZrtY6yqx3a4Lvoh95OjNc1Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=naPAk8hGu/xytYVXtDRvdcZxkW4hu7BWETs0MBX6X+hv9FkfuUOx46AR+PLmCqWJuO88Fg02kIbUz+DTQJIAQreD5MQaFaLM9z9ePU1Na9gt75mh1tDziCQCNgXf+3bWgG24Nqdw066Obp9A3W2nedN8rtg5wReOsSLvDDfVsQo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=syGrLJEv; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="syGrLJEv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 50635C2BCB6; Mon, 13 Apr 2026 14:12:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089538; bh=+qaBdb9rEAmToN4IiTNcZrtY6yqx3a4Lvoh95OjNc1Y=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=syGrLJEvv8uXO076uWMXl2eO3+bOLvXtJaVTAaP23QmMP+r05dsCGjO+SwZ158KJU yXfMpZJ9tW/bwJi4ctA325xUl5/G/u70E6j5l3V3wfxXwt8zoFQkI8zfQNcWtoz3zj CS3baqkhDml7hAY0JovRGSmYcpdDjnYXHR1+TU5l0f2zXXuYvqSZTchjyz/RksePxy rVrvjZnfS9Mg7QX2W7Lek+0kmU0d4GCwuRnSS5TYH5ErW6SVoy5UwkrCTA6bZiXa7W F38OELprs59zhQdVkenuF8yMStqP+ZA8SOTgo98wK6CVpMAx210ce5Q8p5aVIS/tOd px6wKj5aXLGgg== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:12:02 +0200 Subject: [PATCH mptcp-net v3 16/19] selftests: mptcp: join: validate 8x8 subflows Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-16-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2160; i=matttbe@kernel.org; h=from:subject:message-id; bh=+qaBdb9rEAmToN4IiTNcZrtY6yqx3a4Lvoh95OjNc1Y=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/Nxs5h2eeaP2lLxz3mLfbW9tJVP+qTfmT2Zx3Bef8 GR+t5prRykLgxgXg6yYIot0W2T+zOdVvCVefhYwc1iZQIYwcHEKwETezmFkOFj+s3nq9BOKkf3P 5jr+e8L/p0bCRDn7Dd9Te97+qDopaYb/rr3X9OXfPPqXsiHVzrFw45SCaXJfd1ixScecSXCTNDB iAgA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 The limits have been recently increased, it is required to validate that having 64 subflows is allowed. Here, both the client and the server have 8 network interfaces. The server has 8 endpoints marked as 'signal' to announce all its v4 addresses. The client also has 8 endpoints, but marked as 'subflow' and 'fullmesh' in order to create 8 subflows to each address announced by the server. This means 63 additional subflows will be created after the initial one. If it is not possible to increase the limits to 64, it means an older kernel version is being used, and the test is skipped. Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 28 +++++++++++++++++++++= ++++ 1 file changed, 28 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 28da9df797ae..c6bb345d056b 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -513,6 +513,19 @@ reset_with_tcp_filter() fi } =20 +# For kernel supporting limits above 8 +# $1: title ; $2,4: addrs limit ns1,2 ; $3,5: subflows limit ns1,2 +reset_with_high_limits() +{ + reset "${1}" || return 1 + + if ! pm_nl_set_limits "${ns1}" "${2}" "${3}" 2>/dev/null || + ! pm_nl_set_limits "${ns2}" "${4}" "${5}" 2>/dev/null; then + mark_as_skipped "unable to set the limits to ${*:2}" + return 1 + fi +} + # $1: err msg fail_test() { @@ -3670,6 +3683,21 @@ fullmesh_tests() chk_prio_nr 0 1 1 0 chk_rm_nr 0 1 fi + + # fullmesh in 8x8 to create 63 additional subflows + if ifaces_nr=3D8 reset_with_high_limits "fullmesh 8x8" 64 64 64 64; then + # higher chance to lose ADD_ADDR: allow retransmissions + ip netns exec $ns1 sysctl -q net.mptcp.add_addr_timeout=3D1 + local i + for i in $(seq 1 8); do + pm_nl_add_endpoint $ns2 10.0.$i.2 flags subflow,fullmesh + pm_nl_add_endpoint $ns1 10.0.$i.1 flags signal + done + speed=3Dslow \ + run_tests $ns1 $ns2 10.0.1.1 + chk_join_nr 63 63 63 + fi + } =20 fastclose_tests() --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D92B23CBE63 for ; Mon, 13 Apr 2026 14:12:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089539; cv=none; b=WJ2EnSodXoKauuA7B14tqX3T2TyI3Uw6qnm+EeRwIOvZc3D+E+qog5C/cgiy3TeBDe8INorR0Z9ZBNPMRu2MqsSOFHgfTj/imA634iJEL2IjTvCnGmDELOtUt226h07WkJ+CjlMswmGsT/k0CyD+KQMc8OfvKw8lp0t4A2yMWVw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089539; c=relaxed/simple; bh=8PZLLeOwVPMc3bpT7xW7wYZklUFV3vxacK3H8M3nvfg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Abo1Uh8GdSYw9+9defCYYhQb0UVIgliqhwPspnLrU4E2uO7FvJA/rK2Gj1/v0ceXl+UfcRusR6V1MXG6qcZp+SvS2XL/mNUHmCWsxV3mYuHsiVy/16SCA5QNnl9stFquPUBAxeeRlJYDU958l0xlnblJ/93Ec7JdWlJe3UJGFx8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=caqrhBaq; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="caqrhBaq" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 17637C2BCC4; Mon, 13 Apr 2026 14:12:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089539; bh=8PZLLeOwVPMc3bpT7xW7wYZklUFV3vxacK3H8M3nvfg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=caqrhBaq+qJ/OfOchEAc+6/1hoATyO/F+RLVqUJ+1W8MnlGHl+2Tzi+kTYjnsfsMS nzXHQ+x7l9t6jV6etkLYUwcUfaxQgt73HcfqiucxU5hdkKEHuJcFmz/Cv/ht9sxVBG 5lTaQOi8xsn3mzEd9lHIg0Q0Q9oULr1d3H9lHuKVSHEndojNniydk+IV0Om9ooVyME OdxzuOAWbubk3FK2JZ3tnac4/EeicroThJTPSvoskQcnRG4K7xdJvT34ETKFJnj/A+ LRAWV57Xp+UzzkK4H9NO89bllIjMJOROpA89pOOK2Z2gepnSM5UZeeTq/jA7ykuabO ORkVbleVPQ/Gw== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:12:03 +0200 Subject: [PATCH mptcp-net v3 17/19] selftests: mptcp: pm: validate new limits Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-17-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3660; i=matttbe@kernel.org; h=from:subject:message-id; bh=8PZLLeOwVPMc3bpT7xW7wYZklUFV3vxacK3H8M3nvfg=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/NzCuyVjZcXr2KaaL5nPxU57n/0r+jD03U7BRdpPL Y2iWFw5O0pZGMS4GGTFFFmk2yLzZz6v4i3x8rOAmcPKBDKEgYtTACbC0s/I0KDnUXh7l+WVTmH3 R05lGbGzkv7N3L51RYPp36N6bW+euTD89/rV/FPQpKHnrdRspZ/zZohGcClzX5phYBHO7+O03Ww nCwA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 These limits have been recently updated, from 8 to: - 64 for the subflows and accepted add_addr - 255 for the MPTCP endpoints These modifications validate the new limits, but are also compatible with the previous ones, to be able to continue to validate stable kernel using the last version of the selftests. That's why new variables are now used instead of hard-coded values. Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/pm_netlink.sh | 52 +++++++++++++++------= ---- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/pm_netlink.sh b/tools/testin= g/selftests/net/mptcp/pm_netlink.sh index d844ee687a29..1ce5903c89c0 100755 --- a/tools/testing/selftests/net/mptcp/pm_netlink.sh +++ b/tools/testing/selftests/net/mptcp/pm_netlink.sh @@ -66,6 +66,15 @@ get_limits() { fi } =20 +get_limits_nb() { + if mptcp_lib_is_ip_mptcp; then + ip -n "${ns1}" mptcp limits | awk '{ print $2" "$4 }' + else + ip netns exec "${ns1}" ./pm_nl_ctl limits | \ + awk '{ printf "%s ", $2 }' + fi +} + format_endpoints() { mptcp_lib_pm_nl_format_endpoints "${@}" } @@ -162,6 +171,7 @@ check "get_endpoint 2" "" "simple del addr" check "show_endpoints" \ "$(format_endpoints "1,10.0.1.1" \ "3,10.0.1.3,signal backup")" "dump addrs after del" +add_endpoint 10.0.1.2 id 2 =20 add_endpoint 10.0.1.3 2>/dev/null check "get_endpoint 4" "" "duplicate addr" @@ -169,25 +179,25 @@ check "get_endpoint 4" "" "duplicate addr" add_endpoint 10.0.1.4 flags signal check "get_endpoint 4" "$(format_endpoints "4,10.0.1.4,signal")" "id addr = increment" =20 -for i in $(seq 5 9); do - add_endpoint "10.0.1.${i}" flags signal >/dev/null 2>&1 -done -check "get_endpoint 9" "$(format_endpoints "9,10.0.1.9,signal")" "hard add= r limit" -check "get_endpoint 10" "" "above hard addr limit" +read -r -a default_limits_nb <<< "$(get_limits_nb)" +# limits have been increased: from 8 to 64 for subflows/add_addr & 255 for= endp +if mptcp_lib_expect_all_features || set_limits 9 9 2>/dev/null; then + max_endp=3D255 + max_limits=3D64 +else + max_endp=3D8 + max_limits=3D8 +fi +set_limits "${default_limits_nb[@]}" =20 -del_endpoint 9 -for i in $(seq 10 255); do - add_endpoint 10.0.0.9 id "${i}" - del_endpoint "${i}" +for i in $(seq 5 ${max_endp}); do + add_endpoint "10.0.0.${i}" id "${i}" done -check "show_endpoints" \ - "$(format_endpoints "1,10.0.1.1" \ - "3,10.0.1.3,signal backup" \ - "4,10.0.1.4,signal" \ - "5,10.0.1.5,signal" \ - "6,10.0.1.6,signal" \ - "7,10.0.1.7,signal" \ - "8,10.0.1.8,signal")" "id limit" +check "get_endpoint ${max_endp}" \ + "$(format_endpoints "${max_endp},10.0.0.${max_endp}")" "id limit" + +check "add_endpoint '10.0.1.1' &>/dev/null && echo 'no error'" "" \ + "above hard addr limit" =20 flush_endpoint check "show_endpoints" "" "flush addrs" @@ -200,15 +210,15 @@ if ! mptcp_lib_is_ip_mptcp; then flush_endpoint fi =20 -set_limits 9 1 2>/dev/null +set_limits $((max_limits + 1)) 1 2>/dev/null check "get_limits" "${default_limits}" "rcv addrs above hard limit" =20 -set_limits 1 9 2>/dev/null +set_limits 1 $((max_limits + 1)) 2>/dev/null check "get_limits" "${default_limits}" "subflows above hard limit" =20 -set_limits 8 8 +set_limits ${max_limits} ${max_limits} flush_endpoint ## to make sure it doesn't affect the limits -check "get_limits" "$(format_limits 8 8)" "set limits" +check "get_limits" "$(format_limits ${max_limits} ${max_limits})" "set lim= its" =20 flush_endpoint add_endpoint 10.0.1.1 --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5B5C73D75C3 for ; Mon, 13 Apr 2026 14:12:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089540; cv=none; b=YRFS99KVw5vBw4u1i4ToyhxtB9QVVPL3RpgwNDwap8+GZt2rOSMIDjtduJz3ECqhSkqakBmHIjcrrvHwHqnNnD0ArsWDAb3kI0kL3wB9AqPtrv2rAflVRl1BIiMGK4yBGshlMLMOOKTgF92RabOYLKrX2j54n6PS3M0rx1WweWs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089540; c=relaxed/simple; bh=N19jazivXTMDBQM5jY7wG5Ec0mUGbrDn/0Y2kORbl90=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cxGDHhGNgynwtMzSG4JOVfqhQaHDLPnOL9d2HIyv1crPHV3DmZU8mpaud+3eBVfbDI457TPW4dtTgqBNdOnNRNnbZ/C6qh5XRwWnp+rkh2DnwaOBiGGrSKnxx5e+Aj8RgjVT4LiMRYY8f383H7Kd8B+VKvaYsWbOffRW682qHG0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=El3byyYd; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="El3byyYd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D275FC2BCAF; Mon, 13 Apr 2026 14:12:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089540; bh=N19jazivXTMDBQM5jY7wG5Ec0mUGbrDn/0Y2kORbl90=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=El3byyYddgtbUehpdbmztDafj0I6YX2u2G1Iw6TnQlhNBN1i7jsj5VcfDuF5utVca /GaLdbGhEu08KjAc8IYhedI+rpwQ8W/856+1N6PNWCPJIZ9uzmpH2HohzEFEASjsHK V2nHVlkofDoYJ0Rqnf2rt0LJQ1mFTeuGdKbaPBrPbwZYwCJLEdlFF99cREfC98UJTs SwP9nBjnYcjRdC6/d1ZrbClagBn5XiooH/bao24u+o7qF+lF43JmLG/OL2NuGI+FW6 dvqoTzXqVv9PDzLaql2iM4D0QwtRdlJVcScNuFLw9mIp2eFs7ScKz4iMRxCZeWNtLd mQIKvM12zRuuQ== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:12:04 +0200 Subject: [PATCH mptcp-net v3 18/19] selftests: mptcp: pm: use simpler send/recv forms Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-18-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1778; i=matttbe@kernel.org; h=from:subject:message-id; bh=N19jazivXTMDBQM5jY7wG5Ec0mUGbrDn/0Y2kORbl90=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/NzCp6r4JGbXeS0+sTTv7CifAFc96/vz3aR5NLJMu g/v6fjeUcrCIMbFICumyCLdFpk/83kVb4mXnwXMHFYmkCEMXJwCMJFDUxkZ+tuaq3id/U6mTV6Y ECUwTebHuw+aRfa7KkM5J97quMO0leGfCdf9JikN6+c3f0jXeLoaCvEvXPxU+f29/7HnawvXW8l wAwA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Instead of sendto() and recvfrom() which the NL address that was already provided before. Just simpler and easier to read without the to/from variants. While at it, fix a checkpatch warning by removing multiple assignments. Signed-off-by: Matthieu Baerts (NGI0) --- v2: fix already present checkpatch warning. --- tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c b/tools/testing/= selftests/net/mptcp/pm_nl_ctl.c index 99eecccbf0c8..78180da1efcc 100644 --- a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c +++ b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c @@ -217,8 +217,6 @@ static int capture_events(int fd, int event_group) /* do a netlink command and, if max > 0, fetch the reply ; nh's size >1024= B */ static int do_nl_req(int fd, struct nlmsghdr *nh, int len, int max) { - struct sockaddr_nl nladdr =3D { .nl_family =3D AF_NETLINK }; - socklen_t addr_len; void *data =3D nh; int rem, ret; int err =3D 0; @@ -230,15 +228,15 @@ static int do_nl_req(int fd, struct nlmsghdr *nh, int= len, int max) } =20 nh->nlmsg_len =3D len; - ret =3D sendto(fd, data, len, 0, (void *)&nladdr, sizeof(nladdr)); + ret =3D send(fd, data, len, 0); if (ret !=3D len) error(1, errno, "send netlink: %uB !=3D %uB\n", ret, len); =20 - addr_len =3D sizeof(nladdr); - rem =3D ret =3D recvfrom(fd, data, max, 0, (void *)&nladdr, &addr_len); + ret =3D recv(fd, data, max, 0); if (ret < 0) error(1, errno, "recv netlink: %uB\n", ret); =20 + rem =3D ret; /* Beware: the NLMSG_NEXT macro updates the 'rem' argument */ for (; NLMSG_OK(nh, rem); nh =3D NLMSG_NEXT(nh, rem)) { if (nh->nlmsg_type =3D=3D NLMSG_DONE) --=20 2.53.0 From nobody Tue May 5 11:22:27 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4343B3806AA for ; Mon, 13 Apr 2026 14:12:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089541; cv=none; b=SGdyTZJo3TAb/hVpWWtAJ8sBPzVyr91U7sBCNmUGv3LfNvsN8e6BaofZ0BU0UYS3iGeNPlprc++6/GKaFmfgNlouHLrOnaNcB7ne++Ha+CZ7IiXVEdU44eZ0bA83Q4Qkv2dAKq7ela5BFIfmiXvOyJ+QSNWaNyZDHKmy8qJKZ9A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776089541; c=relaxed/simple; bh=KH9JamGt9FKgWaJeYjGM8CwBfKzIRBZ7iGkM73xz0GQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DrTRKuI7BAPz+1YlNMsKF9B1B3sS1by5fN0WwVmZpJ5R4Rlu56Qv06/WaLfcZwXZkjJbMd2BVW3T8PA97eavf7H6vU9iOhqAnKIJxca2A6lQh57m0Y+JaQSfFuXOMBXFv0Ju4/KH5iulS31js0fVo2L45B2eho/Q6TB6Ys7HJ1o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qzyhP/8O; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qzyhP/8O" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 99C5AC2BCB7; Mon, 13 Apr 2026 14:12:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776089541; bh=KH9JamGt9FKgWaJeYjGM8CwBfKzIRBZ7iGkM73xz0GQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=qzyhP/8OEyFZ7ISOwFRI3hix9Oq+eRR2VTlL9p11VbbpeEHz5+TYqFjXTxsw6UNvK yskD81EhXzvN86/aDBTW0oGWOctJ50/qKCQaYgWhHTlhKmbXcypgvDBtbvM6AG0jTi 1yXsoL8sLFOLoPw0FjWI2x7tc2ZlKZDXSruy30T1tgPOdL8vXbS0J+ODtDMG1EJoh3 UKOEPxprdQJUxd3dRjELNWSPs+KKrVd2b+Jygz38Vg64XR+vj84HM1chDea5YTbNh/ R2Le1ik1csi7E6uQF9VgR3p1nD7WDhgyp5xk8fzm3tINkUIzGnzNPOMOXBxJPe8VQd IlNNPLfCwEAUA== From: "Matthieu Baerts (NGI0)" Date: Mon, 13 Apr 2026 16:12:05 +0200 Subject: [PATCH mptcp-net v3 19/19] mptcp: pm: clearer ADD_ADDR related helpers names Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260413-mptcp-inc-limits-v3-19-dd36c9360432@kernel.org> References: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> In-Reply-To: <20260413-mptcp-inc-limits-v3-0-dd36c9360432@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=16695; i=matttbe@kernel.org; h=from:subject:message-id; bh=KH9JamGt9FKgWaJeYjGM8CwBfKzIRBZ7iGkM73xz0GQ=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLv/NzKY3q+dNXdb4qKF08UJSuKvTA68jzs4wnfGYwNR jtMfxYKdJSyMIhxMciKKbJIt0Xmz3xexVvi5WcBM4eVCWQIAxenAEzkSwDDf3/BXo4LKf087JF3 n8WkRP+oMbpzekJ9uezdcqYZ7/mPfWL4790ZVHVBzPPJoimsZ8Ind2+uu3nNNGBK7cxX2U6re76 e5AUA X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Here is a suggestion, and if it is OK, I will split this in multiple commits: it is not the first time the 'add' and 'anno' names to describe ADD_ADDR related functions are confusing. Eric already pointed that in [1]. I started by renaming only the internal helper names, then while at it, I tried to uniform everything linked to ADD_ADDR. WDYT? Link: https://lore.kernel.org/20251117100745.1913963-1-edumazet@google.com = [1] Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/options.c | 2 +- net/mptcp/pm.c | 133 ++++++++++++++++++++++++-------------------= ---- net/mptcp/pm_kernel.c | 20 +++---- net/mptcp/pm_userspace.c | 6 +-- net/mptcp/protocol.h | 19 +++---- net/mptcp/subflow.c | 4 +- 6 files changed, 93 insertions(+), 91 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 4cc583fdc7a9..8282e666167d 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1211,7 +1211,7 @@ bool mptcp_incoming_options(struct sock *sk, struct s= k_buff *skb) MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ADDADDR); } else { mptcp_pm_add_addr_echoed(msk, &mp_opt.addr); - mptcp_pm_del_add_timer(msk, &mp_opt.addr, true); + mptcp_pm_add_addr_del_timer(msk, &mp_opt.addr, true); MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ECHOADD); } =20 diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 17f6ccc22941..e28d08ef5335 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -12,12 +12,12 @@ =20 #define ADD_ADDR_RETRANS_MAX 3 =20 -struct mptcp_pm_add_entry { +struct mptcp_pm_add_addr { struct list_head list; struct mptcp_addr_info addr; u8 retrans_times; bool timer_done; - struct timer_list add_timer; + struct timer_list timer; struct mptcp_sock *sock; struct rcu_head rcu; }; @@ -115,14 +115,14 @@ static bool mptcp_pm_is_init_remote_addr(struct mptcp= _sock *msk, return mptcp_addresses_equal(&mpc_remote, remote, remote->port); } =20 -bool mptcp_lookup_subflow_by_saddr(const struct list_head *list, - const struct mptcp_addr_info *saddr) +bool mptcp_pm_subflow_lookup_by_saddr(struct mptcp_sock *msk, + const struct mptcp_addr_info *saddr) { struct mptcp_subflow_context *subflow; struct mptcp_addr_info cur; struct sock_common *skc; =20 - list_for_each_entry(subflow, list, node) { + mptcp_for_each_subflow(msk, subflow) { skc =3D (struct sock_common *)mptcp_subflow_tcp_sock(subflow); =20 mptcp_local_address(skc, &cur); @@ -133,38 +133,39 @@ bool mptcp_lookup_subflow_by_saddr(const struct list_= head *list, return false; } =20 -static struct mptcp_pm_add_entry * -mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk, - const struct mptcp_addr_info *addr) +static struct mptcp_pm_add_addr * +mptcp_pm_add_addr_lookup_by_addr(const struct mptcp_sock *msk, + const struct mptcp_addr_info *addr) { - struct mptcp_pm_add_entry *entry; + struct mptcp_pm_add_addr *add_addr; =20 lockdep_assert_held(&msk->pm.lock); =20 - list_for_each_entry(entry, &msk->pm.anno_list, list) { - if (mptcp_addresses_equal(&entry->addr, addr, true)) - return entry; + list_for_each_entry(add_addr, &msk->pm.anno_list, list) { + if (mptcp_addresses_equal(&add_addr->addr, addr, true)) + return add_addr; } =20 return NULL; } =20 -bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr) +bool mptcp_pm_add_addr_remove(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr) { - struct mptcp_pm_add_entry *entry; + struct mptcp_pm_add_addr *add_addr; bool ret; =20 - entry =3D mptcp_pm_del_add_timer(msk, addr, false); - ret =3D entry; - kfree_rcu(entry, rcu); + add_addr =3D mptcp_pm_add_addr_del_timer(msk, addr, false); + ret =3D add_addr; + kfree_rcu(add_addr, rcu); =20 return ret; } =20 -bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *msk, const struct sock= *sk) +bool mptcp_pm_add_addr_lookup_by_sk(struct mptcp_sock *msk, + const struct sock *sk) { - struct mptcp_pm_add_entry *entry; + struct mptcp_pm_add_addr *entry; struct mptcp_addr_info saddr; bool ret =3D false; =20 @@ -335,11 +336,11 @@ static unsigned int mptcp_adjust_add_addr_timeout(str= uct mptcp_sock *msk) return max_stale && max_stale < rto ? max_stale : rto; } =20 -static void mptcp_pm_add_timer(struct timer_list *timer) +static void mptcp_pm_add_addr_timer(struct timer_list *timer) { - struct mptcp_pm_add_entry *entry =3D timer_container_of(entry, timer, - add_timer); - struct mptcp_sock *msk =3D entry->sock; + struct mptcp_pm_add_addr *add_addr =3D timer_container_of(add_addr, timer, + timer); + struct mptcp_sock *msk =3D add_addr->sock; struct sock *sk =3D (struct sock *)msk; unsigned int timeout =3D 0; =20 @@ -362,20 +363,20 @@ static void mptcp_pm_add_timer(struct timer_list *tim= er) spin_lock_bh(&msk->pm.lock); =20 if (!mptcp_pm_should_add_signal_addr(msk)) { - pr_debug("retransmit ADD_ADDR id=3D%d\n", entry->addr.id); - mptcp_pm_announce_addr(msk, &entry->addr, false); + pr_debug("retransmit ADD_ADDR id=3D%d\n", add_addr->addr.id); + mptcp_pm_announce_addr(msk, &add_addr->addr, false); mptcp_pm_add_addr_send_ack(msk); - entry->retrans_times++; + add_addr->retrans_times++; } =20 - if (entry->retrans_times < ADD_ADDR_RETRANS_MAX) - timeout <<=3D entry->retrans_times; + if (add_addr->retrans_times < ADD_ADDR_RETRANS_MAX) + timeout <<=3D add_addr->retrans_times; else timeout =3D 0; =20 spin_unlock_bh(&msk->pm.lock); =20 - if (entry->retrans_times =3D=3D ADD_ADDR_RETRANS_MAX) + if (add_addr->retrans_times =3D=3D ADD_ADDR_RETRANS_MAX) mptcp_pm_subflow_established(msk); =20 out: @@ -383,84 +384,83 @@ static void mptcp_pm_add_timer(struct timer_list *tim= er) sk_reset_timer(sk, timer, jiffies + timeout); else /* if sock_put calls sk_free: avoid waiting for this timer */ - entry->timer_done =3D true; + add_addr->timer_done =3D true; bh_unlock_sock(sk); sock_put(sk); } =20 -struct mptcp_pm_add_entry * -mptcp_pm_del_add_timer(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr, bool check_id) +struct mptcp_pm_add_addr * +mptcp_pm_add_addr_del_timer(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr, bool check_id) { - struct mptcp_pm_add_entry *entry; + struct mptcp_pm_add_addr *add_addr; struct sock *sk =3D (struct sock *)msk; bool stop_timer =3D false; =20 rcu_read_lock(); =20 spin_lock_bh(&msk->pm.lock); - entry =3D mptcp_lookup_anno_list_by_saddr(msk, addr); - if (entry && (!check_id || entry->addr.id =3D=3D addr->id)) { - entry->retrans_times =3D ADD_ADDR_RETRANS_MAX; + add_addr =3D mptcp_pm_add_addr_lookup_by_addr(msk, addr); + if (add_addr && (!check_id || add_addr->addr.id =3D=3D addr->id)) { + add_addr->retrans_times =3D ADD_ADDR_RETRANS_MAX; stop_timer =3D true; } - if (!check_id && entry) - list_del(&entry->list); + if (!check_id && add_addr) + list_del(&add_addr->list); spin_unlock_bh(&msk->pm.lock); =20 /* Note: entry might have been removed by another thread. * We hold rcu_read_lock() to ensure it is not freed under us. */ if (stop_timer) - sk_stop_timer_sync(sk, &entry->add_timer); + sk_stop_timer_sync(sk, &add_addr->timer); =20 rcu_read_unlock(); - return entry; + return add_addr; } =20 -bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr) +bool mptcp_pm_add_addr_alloc(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr) { - struct mptcp_pm_add_entry *add_entry =3D NULL; + struct mptcp_pm_add_addr *add_addr =3D NULL; struct sock *sk =3D (struct sock *)msk; unsigned int timeout; =20 lockdep_assert_held(&msk->pm.lock); =20 - add_entry =3D mptcp_lookup_anno_list_by_saddr(msk, addr); - - if (add_entry) { + add_addr =3D mptcp_pm_add_addr_lookup_by_addr(msk, addr); + if (add_addr) { if (WARN_ON_ONCE(mptcp_pm_is_kernel(msk))) return false; =20 goto reset_timer; } =20 - add_entry =3D kmalloc_obj(*add_entry, GFP_ATOMIC); - if (!add_entry) + add_addr =3D kmalloc_obj(*add_addr, GFP_ATOMIC); + if (!add_addr) return false; =20 - list_add(&add_entry->list, &msk->pm.anno_list); + list_add(&add_addr->list, &msk->pm.anno_list); =20 - add_entry->addr =3D *addr; - add_entry->sock =3D msk; - add_entry->retrans_times =3D 0; - add_entry->timer_done =3D false; + add_addr->addr =3D *addr; + add_addr->sock =3D msk; + add_addr->retrans_times =3D 0; + add_addr->timer_done =3D false; =20 - timer_setup(&add_entry->add_timer, mptcp_pm_add_timer, 0); + timer_setup(&add_addr->timer, mptcp_pm_add_addr_timer, 0); reset_timer: timeout =3D mptcp_adjust_add_addr_timeout(msk); if (timeout) - sk_reset_timer(sk, &add_entry->add_timer, jiffies + timeout); + sk_reset_timer(sk, &add_addr->timer, jiffies + timeout); else - add_entry->timer_done =3D true; + add_addr->timer_done =3D true; =20 return true; } =20 -static void mptcp_pm_free_anno_list(struct mptcp_sock *msk) +static void mptcp_pm_free_add_addr_list(struct mptcp_sock *msk) { - struct mptcp_pm_add_entry *entry, *tmp; + struct mptcp_pm_add_addr *add_addr, *tmp; struct sock *sk =3D (struct sock *)msk; LIST_HEAD(free_list); =20 @@ -470,10 +470,10 @@ static void mptcp_pm_free_anno_list(struct mptcp_sock= *msk) list_splice_init(&msk->pm.anno_list, &free_list); spin_unlock_bh(&msk->pm.lock); =20 - list_for_each_entry_safe(entry, tmp, &free_list, list) { - if (!entry->timer_done) - sk_stop_timer_sync(sk, &entry->add_timer); - kfree_rcu(entry, rcu); + list_for_each_entry_safe(add_addr, tmp, &free_list, list) { + if (!add_addr->timer_done) + sk_stop_timer_sync(sk, &add_addr->timer); + kfree_rcu(add_addr, rcu); } } =20 @@ -727,7 +727,8 @@ void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, =20 spin_lock_bh(&pm->lock); =20 - if (mptcp_lookup_anno_list_by_saddr(msk, addr) && READ_ONCE(pm->work_pend= ing)) + if (mptcp_pm_add_addr_lookup_by_addr(msk, addr) && + READ_ONCE(pm->work_pending)) mptcp_pm_schedule_work(msk, MPTCP_PM_SUBFLOW_ESTABLISHED); =20 spin_unlock_bh(&pm->lock); @@ -1096,7 +1097,7 @@ static void mptcp_pm_ops_release(struct mptcp_sock *m= sk) =20 void mptcp_pm_destroy(struct mptcp_sock *msk) { - mptcp_pm_free_anno_list(msk); + mptcp_pm_free_add_addr_list(msk); mptcp_pm_ops_release(msk); } =20 diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index c75a2c29bcf2..174a760e7a23 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -374,7 +374,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(stru= ct mptcp_sock *msk) /* If the alloc fails, we are on memory pressure, not worth * continuing, and trying to create subflows. */ - if (!mptcp_pm_alloc_anno_list(msk, &local.addr)) + if (!mptcp_pm_add_addr_alloc(msk, &local.addr)) return; =20 __clear_bit(endp_id, msk->pm.id_avail_bitmap); @@ -1054,16 +1054,16 @@ int mptcp_pm_nl_add_addr_doit(struct sk_buff *skb, = struct genl_info *info) return ret; } =20 -static void mptcp_pm_remove_anno_addr(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr, - bool force) +static void mptcp_pm_remove_add_addr(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr, + bool force) { struct mptcp_rm_list list =3D { .nr =3D 0 }; bool announced; =20 list.ids[list.nr++] =3D mptcp_endp_get_local_id(msk, addr); =20 - announced =3D mptcp_remove_anno_list_by_saddr(msk, addr); + announced =3D mptcp_pm_add_addr_remove(msk, addr); if (announced || force) { spin_lock_bh(&msk->pm.lock); if (announced) @@ -1099,9 +1099,9 @@ static int mptcp_nl_remove_subflow_and_signal_addr(st= ruct net *net, goto next; =20 lock_sock(sk); - remove_subflow =3D mptcp_lookup_subflow_by_saddr(&msk->conn_list, addr); - mptcp_pm_remove_anno_addr(msk, addr, remove_subflow && - !(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT)); + remove_subflow =3D mptcp_pm_subflow_lookup_by_saddr(msk, addr); + mptcp_pm_remove_add_addr(msk, addr, remove_subflow && + !(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT)); =20 list.ids[0] =3D mptcp_endp_get_local_id(msk, addr); =20 @@ -1237,10 +1237,10 @@ static void mptcp_pm_flush_addrs_and_subflows(struc= t mptcp_sock *msk, =20 entry =3D list_prepare_entry(entry, rm_list, list); list_for_each_entry_continue(entry, rm_list, list) { - if (mptcp_lookup_subflow_by_saddr(&msk->conn_list, &entry->addr)) + if (mptcp_pm_subflow_lookup_by_saddr(msk, &entry->addr)) slist.ids[slist.nr++] =3D mptcp_endp_get_local_id(msk, &entry->addr); =20 - if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr)) + if (mptcp_pm_add_addr_remove(msk, &entry->addr)) alist.ids[alist.nr++] =3D mptcp_endp_get_local_id(msk, &entry->addr); =20 if (slist.nr =3D=3D MPTCP_RM_IDS_MAX || diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index d838e8ea65fd..704154de85ca 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -228,7 +228,7 @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, stru= ct genl_info *info) lock_sock(sk); spin_lock_bh(&msk->pm.lock); =20 - if (mptcp_pm_alloc_anno_list(msk, &addr_val.addr)) { + if (mptcp_pm_add_addr_alloc(msk, &addr_val.addr)) { msk->pm.add_addr_signaled++; mptcp_pm_announce_addr(msk, &addr_val.addr, false); mptcp_pm_addr_send_ack(msk); @@ -281,9 +281,9 @@ void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk, int anno_nr =3D 0; =20 /* only delete if either announced or matching a subflow */ - if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr)) + if (mptcp_pm_add_addr_remove(msk, &entry->addr)) anno_nr++; - else if (!mptcp_lookup_subflow_by_saddr(&msk->conn_list, &entry->addr)) + else if (!mptcp_pm_subflow_lookup_by_saddr(msk, &entry->addr)) return; =20 alist.ids[alist.nr++] =3D entry->addr.id; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 661600f8b573..8ad60edf3419 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1132,16 +1132,17 @@ int mptcp_pm_mp_prio_send_ack(struct mptcp_sock *ms= k, struct mptcp_addr_info *addr, struct mptcp_addr_info *rem, u8 bkup); -bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk, +bool mptcp_pm_add_addr_alloc(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr); +struct mptcp_pm_add_addr * +mptcp_pm_add_addr_del_timer(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr, bool check_id); +bool mptcp_pm_add_addr_remove(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); -bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *msk, const struct sock= *sk); -struct mptcp_pm_add_entry * -mptcp_pm_del_add_timer(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr, bool check_id); -bool mptcp_lookup_subflow_by_saddr(const struct list_head *list, - const struct mptcp_addr_info *saddr); -bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr); +bool mptcp_pm_add_addr_lookup_by_sk(struct mptcp_sock *msk, + const struct sock *sk); +bool mptcp_pm_subflow_lookup_by_saddr(struct mptcp_sock *msk, + const struct mptcp_addr_info *saddr); int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local, struct genl_info *info); int mptcp_userspace_pm_set_flags(struct mptcp_pm_addr_entry *local, diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index e2cb9d23e4a0..836dcdc3a620 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -235,7 +235,7 @@ static int subflow_check_req(struct request_sock *req, pr_debug("syn inet_sport=3D%d %d\n", ntohs(inet_sk(sk_listener)->inet_sport), ntohs(inet_sk((struct sock *)subflow_req->msk)->inet_sport)); - if (!mptcp_pm_sport_in_anno_list(subflow_req->msk, sk_listener)) { + if (!mptcp_pm_add_addr_lookup_by_sk(subflow_req->msk, sk_listener)) { SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_MISMATCHPORTSYNRX); subflow_add_reset_reason(skb, MPTCP_RST_EPROHIBIT); return -EPERM; @@ -926,7 +926,7 @@ static struct sock *subflow_syn_recv_sock(const struct = sock *sk, pr_debug("ack inet_sport=3D%d %d\n", ntohs(inet_sk(sk)->inet_sport), ntohs(inet_sk((struct sock *)owner)->inet_sport)); - if (!mptcp_pm_sport_in_anno_list(owner, sk)) { + if (!mptcp_pm_add_addr_lookup_by_sk(owner, sk)) { SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_MISMATCHPORTACKRX); subflow_add_reset_reason(skb, MPTCP_RST_EPROHIBIT); goto dispose_child; --=20 2.53.0