From nobody Mon May 25 18:11:39 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 4979234D389 for ; Tue, 19 May 2026 05:51: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=1779169877; cv=none; b=aogNiEAA9jV+TLpOZI/krFIatq+xy9WA6rtPYxVFQgJ4mqDQptbi9AwJSx1u/LfnYuwDcaaBAS/HhmXRbaXQIHYAGmbzy7Q441R0UJqQLBv123sMssw1W2aC4IIiMdTsYQ6mW7hx6ARJbvrluxAA2F5fQLii4lPWBVNoDyBVZTo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779169877; c=relaxed/simple; bh=n4GKkhlcFdAsynPMvsd4dz62FjPXn4HCDMmHYQbI9OY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WetbUCwF4029sICIuNR8Tx7DmrrN37Ht6lcrgNdIncpi/X4OavqqE6qKoO0pBVOmwwIRrJu6Hr1sn7B7aKl0CpGOpDTF1SD58CqO3/FppqmQuQ8TB6odrEofqWnOvPhoSD/7hWgCvEhRMbh3hceCne+oZg0b7nPIboNee6/vSHM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jX9MWURb; 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="jX9MWURb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6D90FC2BCB3; Tue, 19 May 2026 05:51:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779169877; bh=n4GKkhlcFdAsynPMvsd4dz62FjPXn4HCDMmHYQbI9OY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=jX9MWURbZy/KdKx7H/Fo9N8n2VjfxrRe0JZZ2QXjeGl0CAs+5jiB0vtwIyOYwiJwC lK0FkBkAP/OvsIRTFV3XMduYKkmEu4j7U2hf2/vmWF9f1NCM8Wz9pyeIFWmNHmBu7m 6IvWDJl/lrwx++pQgTpHh/c+ejJ8+JUgpmQORxHcUuarIicWfjdxbLAx932q11PjNw GGkLquJCvGP0ySmvYApMti7r9GWZuShry5MWSvcCC0NrrNMs4Nzf+kV90tUsGWHm/C fByPCVk7L3hIn/Z73oUpnE+EAvIr23aMe9LJgh2zZb+CLPaR6QHfyzQ9YNWTuSEIcY nn6YdCFuu1ZZA== From: "Matthieu Baerts (NGI0)" Date: Tue, 19 May 2026 15:51:10 +1000 Subject: [PATCH mptcp-net mptcp-next v2 01/15] mptcp: pm: avoid sleeping while holding rcu_read_lock 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: <20260519-mptcp-add-addr6-port-ts-v2-1-3b36a51e6a86@kernel.org> References: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> In-Reply-To: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2030; i=matttbe@kernel.org; h=from:subject:message-id; bh=n4GKkhlcFdAsynPMvsd4dz62FjPXn4HCDMmHYQbI9OY=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqC/pSrj7Vvm0WBjG4H9g4W5UCGF8OIjpVzh+4V yFzKIQF+7+JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagv6UgAKCRD2t4JPQmmg c/mLEACXXisk1S1WzDbczB+eT9p/bBjEewL3/zXLR5wdFk81ypq2KBigXJ2xCoF+tc/uwqx4Oq4 5kwv/w3vazLYr7Huzv7T6KEcMAfpmOzq5LKfenqA14tfuwXMRGybW+eoBMq+zzwLhBxF3MneSaC rX9Zq5tD8pQvZIEvJQx+jyP4gldd/MaeScE5+Ma7DO/mYzY3iVMmdJkZibzrMA16kOMn027uqMU uqzDJYVM2Eig9J8qyCzLlk8KoydXPHepD992xmawxATEOCYqCiMIBdbfqCNGMgXP1fV862kNNht 2t6+GdRV+T0PpZrIr9TVsqiQwq7uo9XMPTd0wnnaHARmQcNmslboILHjFbyR9wcJMbx3JY+n8Ys rgQydJ6vKV9nXaL1pWyFDPgchBdL/h5qgouCG6MZMC+TArDzVu5bZBq+zhansLtTf9bd2uis8DP gPtqKTxuXph1P/ju+o/bEo17+JURU3SkNZoJhNqMHm4vyTWUUsCnmcWlqk6eH6tghOx+8sVk95z ZsbiPmBwo92C6D5HyWlrdi+p2U02qj9puQVJjdcUZ8sFHo7vzcFM3D2f+pFg+4Ksar+niapTzLO ZiObwd7WG7rhbLFqj0mqsXGjpSc2v5vg7d3Jhxdh3n6p90pY8lFjaWNWIsky7x/PCCEsMMYPdU9 hhezcpl7ii09q3g== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 sk_stop_timer_sync() calls del_timer_sync(), which spin-waits for the timer callback to complete on non-RT kernels. But on PREEMPT_RT, it can sleep. Sleeping inside an RCU read-side critical section might trigger a lockdep splat. Instead, keep a reference to the timer, under rcu_read_lock, and call sk_stop_timer*() without the RCU lock. While at it, apply the reversed Xmas order when declaring variables. Fixes: 426358d9be7c ("mptcp: fix a race in mptcp_pm_del_add_timer()") Signed-off-by: Matthieu Baerts (NGI0) --- For -net. --- net/mptcp/pm.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index b460b153dc0f..ba58d057d040 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -401,9 +401,9 @@ 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_entry *entry; struct sock *sk =3D (struct sock *)msk; - bool stop_timer =3D false; + struct mptcp_pm_add_entry *entry; + struct timer_list *timer =3D NULL; =20 rcu_read_lock(); =20 @@ -411,7 +411,7 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk, 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; - stop_timer =3D true; + timer =3D &entry->add_timer; } if (!check_id && entry) list_del(&entry->list); @@ -420,14 +420,15 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk, /* 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) { + rcu_read_unlock(); + + if (timer) { if (check_id) - sk_stop_timer(sk, &entry->add_timer); + sk_stop_timer(sk, timer); else - sk_stop_timer_sync(sk, &entry->add_timer); + sk_stop_timer_sync(sk, timer); } =20 - rcu_read_unlock(); return entry; } =20 --=20 2.53.0 From nobody Mon May 25 18:11:39 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 6BB922DF68 for ; Tue, 19 May 2026 05:51: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=1779169878; cv=none; b=QwK4r0J7pgW7EcnXbNgwFHdkiawfcaIGimWTNFQcbglcToztOgRPrpIddlq4/nvJcD2DYcU6gQ1fpYHVsyW8/TTgi/YSxA3UETJjlWtnqI8BkNVd3fpJWrkwm2GWO8lNkxO5rBGukYx6bXcpXC1bS8sOdoRQ35WtGuBh/j4Hm+w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779169878; c=relaxed/simple; bh=1V/0E2Fp6bqGFvlNXIDG5IseSYm9DVjOBS+MuA0YryQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=U9k2LpzOjvf/MXIig7lI1CLwpaFGR9M7eesPnOwoTr5i32igoAgtg51TvE4ztp5bejLijo5IGFCfEXlafEWlQKNrVpTvio2wgTjlsc0r3DjRcFaUbA9yIrgH22UQoCMC8sqatHgSxT1K4yfuE04BzWXqy2/RGYjkVD8BNqtsAi8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=EYlm+1m1; 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="EYlm+1m1" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 91048C2BCB3; Tue, 19 May 2026 05:51:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779169878; bh=1V/0E2Fp6bqGFvlNXIDG5IseSYm9DVjOBS+MuA0YryQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=EYlm+1m1vpKbwRlTMAJzp+LyUNbUHJn+VWOQmyjQ51YbGmvJvuc0UBZu8G1x7fiO4 k7O+EI+bApY7G7AWioktgV3TqvPXdGeGk3JevRQXI2tYcaKTs+wKpSSnxvOpubNhns OqUXadUR561i6m+r1AoisRyZhT5jMy5akBqcik8J/GtMk3Qi7rAqkS4FceRF69Yy83 MvEg6Ib0ZPd7WxLs04ILn/e+XSNLQL47+jSX6ISJHeovHaxdM5DBQRKYINH9xbJrKh UOAZC1cr6jFiCxUUtyN8g61sRUu9wBWEJg52Ki2lx8kOpLxQdaAsNq67B46tqM/SbF rG2Bx2e2pniNA== From: "Matthieu Baerts (NGI0)" Date: Tue, 19 May 2026 15:51:11 +1000 Subject: [PATCH mptcp-next v2 02/15] mptcp: options: ADD_ADDR size can be negative 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: <20260519-mptcp-add-addr6-port-ts-v2-2-3b36a51e6a86@kernel.org> References: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> In-Reply-To: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1442; i=matttbe@kernel.org; h=from:subject:message-id; bh=1V/0E2Fp6bqGFvlNXIDG5IseSYm9DVjOBS+MuA0YryQ=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqC/pS37ijuFpb098tGmRLIADHl+ZKIL3c+YW/9 Pwqdcxpj0KJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagv6UgAKCRD2t4JPQmmg c/JfD/4wt8qiJy6hRhHYHHWwI3INmtlKBlIJfFLcLz9cn951bM2ze1IWlUFiqVWTNFUiLiVx+92 c1h/Pt/L4v3+yCYByjUQJnFOZKXhP6f1gNXr7MiHgAcAmm0zfASkdEZsh0J3dvrlp0I1/eFy/VG 325GtLyYJzkX8F8+An0Llx9A4BpQbrfTyO8vQ3kfEubahEsOsJCGhtqkIO9hlxrbfCevyZRafR+ ux8zUC8Socl733o0l+dsyyrWXaKYEql/GohyMydOBV1YG4dCiC+ktayt0nEDXKfGjHxeV4sBsda JhqKZmsu73txzbzQRG32WnpemYPEmuWfcoZ6eUbRtm6s6WSAzSIC6X0gs5N6/ko+uAjv5mN04S1 f+Ezb9Mxg3RY+O7lNUKhBoGXh6G9qDzwpUFmL04CMCBD/qlpKDheJIQVsu6JTyyOvA4JBfkJ2rP hmie5p69/1Sh/TjDbFWIunuJsz+bmfl76tBPIpP9dfl4CYIL1/6Y3WsoI8Sv33l6niXorObmJrD M4QwPsKU449kQf0qxDmdwGRDImsR+lQPRm55qIXm/0PIiS/LkuU6JMlUT713MRyQKv7hxpSXKbF 4g5UrD5qGMgyiMunhBk0H/w4+HkMu4PX+OP7IPX3w18E9ZS6Y2iEguuV3ZpyTcsr3v7Bn4vYfpF 778fXQZxAAQoY7A== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Use a signed int for the returned size, because if other options are dropped, the size can be negative, e.g. to send an echo ADD_ADDR with a v4 address, and no port. The behaviour is not changed, because it was working as expected with an overflow. But it is clearer like this, and it will help later on. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/options.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 4cc583fdc7a9..966f6a867287 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -651,8 +651,8 @@ static u64 add_addr_generate_hmac(u64 key1, u64 key2, return get_unaligned_be64(&hmac[SHA256_DIGEST_SIZE - sizeof(u64)]); } =20 -static bool mptcp_established_options_add_addr(struct sock *sk, struct sk_= buff *skb, - unsigned int *size, +static bool mptcp_established_options_add_addr(struct sock *sk, + struct sk_buff *skb, int *size, unsigned int remaining, struct mptcp_out_options *opts) { @@ -842,9 +842,9 @@ bool mptcp_established_options(struct sock *sk, struct = sk_buff *skb, { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); - unsigned int opt_size =3D 0; bool snd_data_fin; bool ret =3D false; + int opt_size =3D 0; =20 opts->suboptions =3D 0; =20 --=20 2.53.0 From nobody Mon May 25 18:11:39 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 A36412D978A for ; Tue, 19 May 2026 05:51: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=1779169879; cv=none; b=uJsnJGSdiooZmcx/KZvkFc0Ku6orDCWHS0tDTu6BuHsxSDbB7gp5HlwCMC21E1iUT+qYhhvyVCd+8/fv7pviIEOv6iI2emodwJYnoK3sQ+dQCx2YAZm8I0QCNKv/zbwpWxM77FThXOuBUQlbThhT/1MEmNHfAZxQUwRIXKQuC6I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779169879; c=relaxed/simple; bh=SPSbe6DhnL5SRcm7ZL1UbtbiCe0VWqK+AlzpNlRTqyg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PqwAivhK4NODAH6e2dxhIS+4T7u7hBiXmhA7qWhSvfDU8i11YzA+y5UUWvzBkfMIpqWvryzUUGeb0VZ2PjKWbXu3sZPykwlbgoEwn3ZyYDL6vrWOdsTxBUVvkJ/W4a0ZaU26vj4p5q5E+LAW0U1xxGiqRkqFvsLfeNdBzwfwQ7k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=q62LNY7C; 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="q62LNY7C" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B6C36C2BCB3; Tue, 19 May 2026 05:51:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779169879; bh=SPSbe6DhnL5SRcm7ZL1UbtbiCe0VWqK+AlzpNlRTqyg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=q62LNY7CCGSdQaEQBtQ9Deov/AnidJaY1v7oE1MPj4TDjWAma6bDfFPKzoxafarYF Zd+ENUv2P+9KVr7pi4FLBeceY3aHy2lCUQBgSvWa4gj7vNXT6msK1APumWmWT5m7kw sdbeyOGOL6XkCX8aMb86nhRCVJUuTV7VqdEIVr+QrgW4UztrM4aw7+7wn1Buay2iMz 2FFjVJ5Yi1cBCsKDYZNi+fWv2fEil5mt6TCqUiNzcINDoKIWO/4IIj/QrFvIQw8DQ9 NfKUNvRSmqvHGInganlkWZXQxTHdxfZTKNOLHDaTI1DDHvos8xpg6xR7mJTRRV2bdL +n8sU+j8tOkhw== From: "Matthieu Baerts (NGI0)" Date: Tue, 19 May 2026 15:51:12 +1000 Subject: [PATCH mptcp-next v2 03/15] mptcp: pm: avoid computing rm_addr size twice 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: <20260519-mptcp-add-addr6-port-ts-v2-3-3b36a51e6a86@kernel.org> References: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> In-Reply-To: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3708; i=matttbe@kernel.org; h=from:subject:message-id; bh=SPSbe6DhnL5SRcm7ZL1UbtbiCe0VWqK+AlzpNlRTqyg=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqC/pS9QuybSrDuHeQkJ0Q/k7M9hwWYFpY9bZiH cxdNwnhzGCJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagv6UgAKCRD2t4JPQmmg c8VBD/9SdPQ29/WNYtob3MXdbs91iWkWwWfczM8y/H6M5eTil3VtAjAF11lE8UDn+7CYIKngaGI m/TS1aWS65yWyCJ4AkYK7geg2BLROPbi1KZyoa0DupaSKVCs77SEvpJ4T/7FCdX1EUyHlIW5Gop JK9kcV5DcyxdY3tGpuBSJV3o2GVJ7P52EI/XNfBfOBI91PbI2dtkJ8I7h6Bp6yLIC439tOyNtEX rlWqphJLj5hkGjjNzpkAJfLTt/sRzDP6cuJ2b8hQHIV5Hlbh5cyWtt6HjHsuGz6vtXEGfHf5WiW HcCm7pW3zpb17m9t48OxyAI5NXHo6kKp0pmDpGOSZ3S+p+ZUWAzvBDLeOjRVkxnCd6pFOv3Pbop o5AIJM8nUlNZLlvQzpJU2PzUIh8ThCKq7I5P96mSmu3K4aLfuEgvg7ytHTea2+U/1u0IUCfzb5E U3i0VfrUbRdf9P9FRrAbVcpgPocekPGHnW2LvKEtBSXPYJvjq5JgyjFEGeCPMpz69DIx9+ivrdM Ql0HGmsemmo3JomjjUJ2M6JLsXuRnvfMjvZx9N871IsjzUBWfMh+ATW1Oz9+jZFGwI7KenUonlW DL1diss3McvNMaoKN60hCX9vq+6x9fqkVwMWq0KlBSsvkymyptCwEXIbWRalthAJh+pfYBnHjSH 05kUrl40MKjbryg== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 mptcp_rm_addr_len helper was called twice: in mptcp_pm_rm_addr_signal, then just after in mptcp_established_options_rm_addr. Both to check the remaining space. The second call is not needed: if there is not enough space, mptcp_pm_rm_addr_signal will return false, and the caller, mptcp_established_options_rm_addr, will do the same without re-checking the size again. Instead, mptcp_pm_rm_addr_signal can directly set the size. While at it, move mptcp_rm_addr_len to pm.c, as it is now only used there, once. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/options.c | 11 ++--------- net/mptcp/pm.c | 11 ++++++++++- net/mptcp/protocol.h | 10 +--------- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 966f6a867287..231010aaf163 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -723,19 +723,12 @@ static bool mptcp_established_options_rm_addr(struct = sock *sk, struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); struct mptcp_rm_list rm_list; - int i, len; + int i; =20 if (!mptcp_pm_should_rm_signal(msk) || - !(mptcp_pm_rm_addr_signal(msk, remaining, &rm_list))) + !(mptcp_pm_rm_addr_signal(msk, remaining, &rm_list, size))) return false; =20 - len =3D mptcp_rm_addr_len(&rm_list); - if (len < 0) - return false; - if (remaining < len) - return false; - - *size =3D len; opts->suboptions |=3D OPTION_MPTCP_RM_ADDR; opts->rm_list =3D rm_list; =20 diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index ba58d057d040..c51e57effbdb 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -961,8 +961,16 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, = const struct sk_buff *skb, return ret; } =20 +static int mptcp_rm_addr_len(const struct mptcp_rm_list *rm_list) +{ + if (rm_list->nr =3D=3D 0 || rm_list->nr > MPTCP_RM_IDS_MAX) + return -EINVAL; + + return TCPOLEN_MPTCP_RM_ADDR_BASE + roundup(rm_list->nr - 1, 4) + 1; +} + bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, - struct mptcp_rm_list *rm_list) + struct mptcp_rm_list *rm_list, unsigned int *size) { int ret =3D false, len; u8 rm_addr; @@ -982,6 +990,7 @@ bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, un= signed int remaining, if (remaining < len) goto out_unlock; =20 + *size =3D len; *rm_list =3D msk->pm.rm_list_tx; WRITE_ONCE(msk->pm.addr_signal, rm_addr); ret =3D true; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 661600f8b573..6f3c73ad4284 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1224,20 +1224,12 @@ static inline unsigned int mptcp_add_addr_len(int f= amily, bool echo, bool port) return len; } =20 -static inline int mptcp_rm_addr_len(const struct mptcp_rm_list *rm_list) -{ - if (rm_list->nr =3D=3D 0 || rm_list->nr > MPTCP_RM_IDS_MAX) - return -EINVAL; - - return TCPOLEN_MPTCP_RM_ADDR_BASE + roundup(rm_list->nr - 1, 4) + 1; -} - bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, unsigned int opt_size, unsigned int remaining, struct mptcp_addr_info *addr, bool *echo, bool *drop_other_suboptions); bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, - struct mptcp_rm_list *rm_list); + struct mptcp_rm_list *rm_list, unsigned int *len); int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc); int mptcp_pm_nl_dump_addr(struct sk_buff *msg, --=20 2.53.0 From nobody Mon May 25 18:11:39 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 D1D072D978A for ; Tue, 19 May 2026 05:51: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=1779169880; cv=none; b=uvmPl/d7kNsQcZkHs2AEKiunzVcUOLP50TwBVgILMaDSDYBB99UaiFUfYev+K5KrmL0vgKAwvTofjH6VqaQAN/qOyOwGUCE5WyokEKJAXe1buF9x+C1RI3iN2MAlyR3LSQEtBdMhLQCZlC3uPJYzI79mVfnpOEERNwo53/o7Svc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779169880; c=relaxed/simple; bh=JB8b+297YemDz1jE51xtP5O1BhzJqag6MKhooi7Z8Sk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RdOD/NKTzlXdYAjnyo6juBIu3i92UjDk/OoKPjg8RhNmw2TU0wItg8eQnLc0aAca/KnJCtd1mYilK9u+0Cgew7CvoIY8LHO/gzHv823+I4XmwHpp3StR/QA8lYdncujSoPFPreoZCWArpmzWIawETMgF1rf4jc6lIiEnBor8VJA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=p42qYTNi; 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="p42qYTNi" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EB460C2BCC6; Tue, 19 May 2026 05:51:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779169880; bh=JB8b+297YemDz1jE51xtP5O1BhzJqag6MKhooi7Z8Sk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=p42qYTNi6X/N6iw8+UcKqeyQCYXNFhgD8A67APi9rEf2lfXYgPEuMAVTextSwvpdG e7Guu5u6YH4gQCcsqprkD6SBMHeoGXQF+spjnoQP+epNXG5vFKSuE8N9MOXV+3Cn4o aA9P1i/e8VZhiV6Tu40tWV7LuyVRtTo3RKPge8qFRFfzyl44V1JxMIrM0vW0UB7DMt gox1sFyacD3GPjEG2MfYRBKBtj9SfX0gFDGdLeseWkPi1HokXHIRDVcdgsDNhur0sn PwAQAwfVhMGTdkcfZngMKfOWs8TvEeWRWUHubS9+r+7lVpw2VsD8ubkYyuhtBXjVPS +x+358pCLwDqw== From: "Matthieu Baerts (NGI0)" Date: Tue, 19 May 2026 15:51:13 +1000 Subject: [PATCH mptcp-next v2 04/15] mptcp: pm: avoid computing add_addr size twice 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: <20260519-mptcp-add-addr6-port-ts-v2-4-3b36a51e6a86@kernel.org> References: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> In-Reply-To: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5802; i=matttbe@kernel.org; h=from:subject:message-id; bh=JB8b+297YemDz1jE51xtP5O1BhzJqag6MKhooi7Z8Sk=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqC/pSw5MSuuNu4zYKreXEBgXlXwWVSSHKD4aG3 jtridTM47SJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagv6UgAKCRD2t4JPQmmg c0C2D/95fhBorAs6iMtrExPrEJlf9p6eus7GK+aYps6AgbOMBy7dePKbwFz4WswfLiqeV0LZEIP TGpeCdGkFaMx1KzlAmgjBnroaFGIKzGFfEoV2XXkKVUKlRi5pCVQ4Liym3ODlXshu/FeS16mfFq TR9hT7iRlVgTVtHQi/BKHINfoU8a8ch6PoeH97OrJ1IVw/fP0MJ5RnJcUcJct2xBQ44Zae8pBOE mwsJT3O1hmlVi56PLTwNWMSVDx/kxafgalZ0li/oCGolX9oUEZu5aYPTwcxtsBX3EHDoWUoGWwr bZHv3hgUmWEgW+UFD9AIcnNX17UCl5g1qVeQjrQ8piHAkoevfXj6uorZDekFsdtE5vDgmsV84EX Irv5+CvVxN0F84PkL5V0kFfNuneOrJwNOfn/rQ+2l5HH3H2PhcwtVWF6V8+LqMOHE6QYpYHze/M cvGvTGkwLJbkwiPMJj9LNhbCvu9BW3h3RTNqw/XY2pYBSjYCS2rInQa6nOEuXKafh4QTwCrChmH Z50ybZyKsbXT5bLsY4bbT5jtJLXtDTszRd4g7X9CXtYuSgiPHDfS33i0WizOneM1ItU0vxGKEgq PA0jWAPTk7UMYH6eFiaN+R2m+Va5jgs0rqrkMNG/qc5z1R3IA6u/jwD7eY0zLWnSyM/6dySAyD/ ljkOtKzQTOh9wQw== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 mptcp_add_addr_len helper was called twice: in mptcp_pm_add_addr_signal, then just after in mptcp_established_options_add_addr. Both to check the remaining space. The second call is not needed: if there is not enough space, mptcp_pm_add_addr_signal will return false, and the caller, mptcp_established_options_add_addr, will do the same without re-checking the size again. Instead, mptcp_pm_add_addr_signal can directly set the size. Note that the returned size can be negative when other suboptions are dropped, e.g. to send an echo ADD_ADDR with a v4 address, and no port. While at it, move mptcp_add_addr_len to pm.c, as it is now only used from there, once, and use a bool for 'ret' in mptcp_pm_add_addr_signal. Signed-off-by: Matthieu Baerts (NGI0) --- v2: reset size in mptcp_pm_add_addr_signal if other options are dropped. --- net/mptcp/options.c | 16 +++------------- net/mptcp/pm.c | 26 ++++++++++++++++++++++---- net/mptcp/protocol.h | 17 +---------------- 3 files changed, 26 insertions(+), 33 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 231010aaf163..c6d57997110d 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -659,34 +659,25 @@ static bool mptcp_established_options_add_addr(struct= sock *sk, struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); bool drop_other_suboptions =3D false; - unsigned int opt_size =3D *size; struct mptcp_addr_info addr; bool echo; - int len; =20 /* add addr will strip the existing options, be sure to avoid breaking * MPC/MPJ handshakes */ if (!mptcp_pm_should_add_signal(msk) || (opts->suboptions & (OPTION_MPTCP_MPJ_ACK | OPTION_MPTCP_MPC_ACK)) || - !mptcp_pm_add_addr_signal(msk, skb, opt_size, remaining, &addr, - &echo, &drop_other_suboptions)) + !mptcp_pm_add_addr_signal(msk, skb, size, remaining, &addr, &echo, + &drop_other_suboptions)) return false; =20 /* * Later on, mptcp_write_options() will enforce mutually exclusion with * DSS, bail out if such option is set and we can't drop it. */ - if (drop_other_suboptions) - remaining +=3D opt_size; - else if (opts->suboptions & OPTION_MPTCP_DSS) + if (!drop_other_suboptions && opts->suboptions & OPTION_MPTCP_DSS) return false; =20 - len =3D mptcp_add_addr_len(addr.family, echo, !!addr.port); - if (remaining < len) - return false; - - *size =3D len; if (drop_other_suboptions) { pr_debug("drop other suboptions\n"); opts->suboptions =3D 0; @@ -697,7 +688,6 @@ static bool mptcp_established_options_add_addr(struct s= ock *sk, * options */ opts->ahmac =3D 0; - *size -=3D opt_size; } opts->addr =3D addr; opts->suboptions |=3D OPTION_MPTCP_ADD_ADDR; diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index c51e57effbdb..dac76113f79b 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -888,14 +888,30 @@ void mptcp_pm_mp_fail_received(struct sock *sk, u64 f= ail_seq) } } =20 +static unsigned int mptcp_add_addr_len(int family, bool echo, bool port) +{ + u8 len =3D TCPOLEN_MPTCP_ADD_ADDR_BASE; + + if (family =3D=3D AF_INET6) + len =3D TCPOLEN_MPTCP_ADD_ADDR6_BASE; + if (!echo) + len +=3D MPTCPOPT_THMAC_LEN; + /* account for 2 trailing 'nop' options */ + if (port) + len +=3D TCPOLEN_MPTCP_PORT_LEN + TCPOLEN_MPTCP_PORT_ALIGN; + + return len; +} + bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, - unsigned int opt_size, unsigned int remaining, + int *size, int remaining, struct mptcp_addr_info *addr, bool *echo, bool *drop_other_suboptions) { bool skip_add_addr =3D false; - int ret =3D false; + bool ret =3D false; u8 add_addr; + int len =3D 0; u8 family; bool port; =20 @@ -910,7 +926,7 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, * if any, will be carried by the 'original' TCP ack */ if (skb && skb_is_tcp_pure_ack(skb)) { - remaining +=3D opt_size; + len -=3D *size; *drop_other_suboptions =3D true; } =20 @@ -927,7 +943,8 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, family =3D msk->pm.local.family; } =20 - if (remaining < mptcp_add_addr_len(family, *echo, port)) { + len +=3D mptcp_add_addr_len(family, *echo, port); + if (len > remaining) { struct net *net =3D sock_net((struct sock *)msk); =20 if (!*drop_other_suboptions) @@ -943,6 +960,7 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, } =20 ret =3D true; + *size =3D len; =20 drop_signal_mark: WRITE_ONCE(msk->pm.addr_signal, add_addr); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 6f3c73ad4284..6fb5caeebc35 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1209,23 +1209,8 @@ static inline bool mptcp_pm_is_kernel(const struct m= ptcp_sock *msk) return READ_ONCE(msk->pm.pm_type) =3D=3D MPTCP_PM_TYPE_KERNEL; } =20 -static inline unsigned int mptcp_add_addr_len(int family, bool echo, bool = port) -{ - u8 len =3D TCPOLEN_MPTCP_ADD_ADDR_BASE; - - if (family =3D=3D AF_INET6) - len =3D TCPOLEN_MPTCP_ADD_ADDR6_BASE; - if (!echo) - len +=3D MPTCPOPT_THMAC_LEN; - /* account for 2 trailing 'nop' options */ - if (port) - len +=3D TCPOLEN_MPTCP_PORT_LEN + TCPOLEN_MPTCP_PORT_ALIGN; - - return len; -} - bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, - unsigned int opt_size, unsigned int remaining, + int *size, int remaining, struct mptcp_addr_info *addr, bool *echo, bool *drop_other_suboptions); bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, --=20 2.53.0 From nobody Mon May 25 18:11:39 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 D74FF2D978A for ; Tue, 19 May 2026 05:51: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=1779169881; cv=none; b=dwWV3swpYrAl+P5plGpXCHlizRFC2ovBtuJfXlED8WugXB6K9TlW1G3bKkNPQKKyXTmoMyHz+suiJJCkH4Q0vGfLhyexh7Ysdy+jGH/galvf6r4UhoKuzxv9U84Drs9lCZhrRFK7YcQXZt0U16r8VyH66kVtwMw818lY/bbezkU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779169881; c=relaxed/simple; bh=Lfapml52c4YxQaCIFzES2KyoPMvS4GYxDPJ6FVcELjc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=S7JMm+4oExQyE56zs8rmCkuofY3IYxHy6RfOdM4mT1+vNYk7sUa8q64NGhfQLQhRTYh9z5IZirp3kejxQ+t36iGePG0OC734XkVEl0w5KldgsuCmN5Vv1Nr4JwdexUiiIMZonGigI9lt77eiDZwevaXQgjNNXdqWl2GmHVetM/E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=r141b9ET; 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="r141b9ET" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 26C13C2BCC6; Tue, 19 May 2026 05:51:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779169881; bh=Lfapml52c4YxQaCIFzES2KyoPMvS4GYxDPJ6FVcELjc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=r141b9ETBdj3cm9UHDcP9mieWj+MPMOednVootqlnMBDLGBN7UBK6C785mkNwHfYU ZufXC8CUK4E96713LGW26do7PTeBuPVdPbc1vRXVQPhUw+LfhZaMqIjH7SsavogK+b BviDImSWVhERl03Z2i1LL4jaH/r2Hc6I5cL+gfOndGeak/2oJxZlH84i3Gwx2mZ/fR 8NyNloC37mM7IaU3Wzp4X2WQipXdfaeB4pPkDW9fwPxktR4e0Sal3OBA/JrL0xPcSc CTXemegT4xR+nW4s/hqRG3J5VjHAmS1VutpTRemXWZ7UAIBA5opoc/7OSCbNHj7ED2 NSZl6EOq0TIeA== From: "Matthieu Baerts (NGI0)" Date: Tue, 19 May 2026 15:51:14 +1000 Subject: [PATCH mptcp-next v2 05/15] mptcp: introduce add_addr_v6_port_drop_ts sysctl knob 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: <20260519-mptcp-add-addr6-port-ts-v2-5-3b36a51e6a86@kernel.org> References: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> In-Reply-To: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5509; i=matttbe@kernel.org; h=from:subject:message-id; bh=Lfapml52c4YxQaCIFzES2KyoPMvS4GYxDPJ6FVcELjc=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqC/pSZfCHvpxEL3OwqCw4qgjCKUw3zk8RHQ1nL k5cw/ekaHuJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagv6UgAKCRD2t4JPQmmg c1MfEAC7u0Z/Dk6Va2ezh1Q5EZ9V/sKQ+pOgAYu8frop5XBVYkijuV5RIkVZhk9JWDqCxJtpv7r Csg0fperHpA/tuc7GZALLLSd/bFD9gaf26CdR+m8f6Atfv9LCDVJRTk5LWQhZrnYOscmGTyRMKL +nGPTIDEhkFlHyR+PFtyzezhD5EjHdd55QuDg1K6nd9WACsWGiK4rZnR8FN/j3cycfGBS3UwT2w r9s94OUonB7kDxzjrld+Eg3vKuKadCOi9VvGMtVewvGYJ4c72jUPi2fPhHUkcqnZZgMk1rSQWCR MLNkPFAgcVV6JpoIaqyX0qZ0EmamNRV89LAVO1kr7lrGMyBWgCfQkoHkU80JkjXieI0wEhuC/h0 xABOXnMw3HzTJkG9FgKyFGlXFF25s1sKOnHdpvtpp4IWBA08FcdZMofnRnB1hvMjwbWeLh8VteS FiIXDRZ/Aej/qxLqCjLKB9Bq8uFQweTH8I2gq+JZ713WoeVpFYueLMLiGKsyMSME3P5lV1yUiYQ ALsPsX1Q5LcXBmmD1wEBzaRSTbbga8jQmNiQd372kGPozaYMwo1g2XXjCObqQZdIvvZdQhrpO/T LsbBtX/XXPE0qrl82QQHdwepJKW1pRbgEzvSQEXnIwYJDA0Qh7S5bGi3y9P20d5D7AN9mjYChXV BD6AxbjAUpfA2jA== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 This sysctl is going to be used in the next commits to drop TCP timestamps option, to be able to send an ADD_ADDR with a v6 IP address and a port number. It is enabled by default. This knob is explicitly disabled in the MPTCP Join selftest, with the "signal addr list progresses after tx drop" subtest, to continue verifying the previous behaviour where the ADD_ADDR is not sent due to a lack of space. While at it, move syn_retrans_before_tcp_fallback down from struct mptcp_pernet, to avoid creating another 3 bytes hole. Signed-off-by: Matthieu Baerts (NGI0) --- v2: split (Paolo) + fix new sysctl name in selftests. --- Documentation/networking/mptcp-sysctl.rst | 13 +++++++++++++ net/mptcp/ctrl.c | 18 +++++++++++++++++- net/mptcp/protocol.h | 1 + tools/testing/selftests/net/mptcp/mptcp_join.sh | 1 + 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/Documentation/networking/mptcp-sysctl.rst b/Documentation/netw= orking/mptcp-sysctl.rst index 1eb6af26b4a7..b9b5f58e0625 100644 --- a/Documentation/networking/mptcp-sysctl.rst +++ b/Documentation/networking/mptcp-sysctl.rst @@ -21,6 +21,19 @@ add_addr_timeout - INTEGER (seconds) =20 Default: 120 =20 +add_addr_v6_port_drop_ts - BOOLEAN + Control whether preparing an ADD_ADDR with an IPv6 address and a port + should drop the TCP timestamps option to have enough option space to + send the signal. + + If there is not enough option space, and the TCP timestamps option + cannot be dropped, the signal cannot be sent. Note that dropping the TCP + timestamps option for one packet of the connection could disrupt some + middleboxes: even if it should be unlikely, they could drop the packet + or block the connection. This is a per-namespace sysctl. + + Default: 1 (enabled) + allow_join_initial_addr_port - BOOLEAN Allow peers to send join requests to the IP address and port number used by the initial subflow if the value is 1. This controls a flag that is diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c index d96130e49942..c94a192f4118 100644 --- a/net/mptcp/ctrl.c +++ b/net/mptcp/ctrl.c @@ -32,12 +32,13 @@ struct mptcp_pernet { unsigned int close_timeout; unsigned int stale_loss_cnt; atomic_t active_disable_times; - u8 syn_retrans_before_tcp_fallback; unsigned long active_disable_stamp; + u8 syn_retrans_before_tcp_fallback; u8 mptcp_enabled; u8 checksum_enabled; u8 allow_join_initial_addr_port; u8 pm_type; + u8 add_addr_v6_port_drop_ts; char scheduler[MPTCP_SCHED_NAME_MAX]; char path_manager[MPTCP_PM_NAME_MAX]; }; @@ -94,6 +95,11 @@ const char *mptcp_get_scheduler(const struct net *net) return mptcp_get_pernet(net)->scheduler; } =20 +unsigned int mptcp_add_addr_v6_port_drop_ts(const struct net *net) +{ + return mptcp_get_pernet(net)->add_addr_v6_port_drop_ts; +} + static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet) { pernet->mptcp_enabled =3D 1; @@ -108,6 +114,7 @@ static void mptcp_pernet_set_defaults(struct mptcp_pern= et *pernet) pernet->pm_type =3D MPTCP_PM_TYPE_KERNEL; strscpy(pernet->scheduler, "default", sizeof(pernet->scheduler)); strscpy(pernet->path_manager, "kernel", sizeof(pernet->path_manager)); + pernet->add_addr_v6_port_drop_ts =3D 1; } =20 #ifdef CONFIG_SYSCTL @@ -362,6 +369,14 @@ static struct ctl_table mptcp_sysctl_table[] =3D { .mode =3D 0444, .proc_handler =3D proc_available_path_managers, }, + { + .procname =3D "add_addr_v6_port_drop_ts", + .maxlen =3D sizeof(u8), + .mode =3D 0644, + .proc_handler =3D proc_dou8vec_minmax, + .extra1 =3D SYSCTL_ZERO, + .extra2 =3D SYSCTL_ONE + }, }; =20 static int mptcp_pernet_new_table(struct net *net, struct mptcp_pernet *pe= rnet) @@ -389,6 +404,7 @@ static int mptcp_pernet_new_table(struct net *net, stru= ct mptcp_pernet *pernet) table[10].data =3D &pernet->syn_retrans_before_tcp_fallback; table[11].data =3D &pernet->path_manager; /* table[12] is for available_path_managers which is read-only info */ + table[13].data =3D &pernet->add_addr_v6_port_drop_ts; =20 hdr =3D register_net_sysctl_sz(net, MPTCP_SYSCTL_PATH, table, ARRAY_SIZE(mptcp_sysctl_table)); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 6fb5caeebc35..2d6c8b1829cd 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -799,6 +799,7 @@ unsigned int mptcp_close_timeout(const struct sock *sk); int mptcp_get_pm_type(const struct net *net); const char *mptcp_get_path_manager(const struct net *net); const char *mptcp_get_scheduler(const struct net *net); +unsigned int mptcp_add_addr_v6_port_drop_ts(const struct net *net); =20 void mptcp_active_disable(struct sock *sk); bool mptcp_active_should_disable(struct sock *ssk); diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 5d4d0f127f79..23b17957686a 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -3313,6 +3313,7 @@ add_addr_ports_tests() if reset "signal addr list progresses after tx drop"; then pm_nl_set_limits $ns1 0 2 pm_nl_set_limits $ns2 1 0 + ip netns exec $ns1 sysctl -q net.mptcp.add_addr_v6_port_drop_ts=3D0 2>/d= ev/null || true ip netns exec $ns1 sysctl -q net.ipv4.tcp_timestamps=3D1 ip netns exec $ns2 sysctl -q net.ipv4.tcp_timestamps=3D1 =20 --=20 2.53.0 From nobody Mon May 25 18:11:39 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 5698B2D978A for ; Tue, 19 May 2026 05:51:23 +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=1779169883; cv=none; b=jW/GFdPA/he2UKtfVTghbeH+fUu4u9VoQW346GROIKBLS4Bsa+3kNPMrYruCCQl+BDx0aN77g8F73rJf0RsAkko7hy9+xNuk7C7vK+imlNBbkdxABXhtGZsicj+Z/5Lt+QtVrvbtRYy0Z3ne/IxsRIFLpFfSIP29BEE/PZjyyk8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779169883; c=relaxed/simple; bh=cZ5cBcTJwHjrp4DCzMPwlvilxKz8vNvwH0IKzxgXWS8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lP0H+jLWJkoKYKKk/dNpFTMWCaypqQ2uuhRW58ObjQsWir6t/zLn0RFVsC0FjSpLoEBSyv/OnnB7vdW0UBS2GAfAAlj4MRQkkL0Pc9vHlBpXXc22cJsizYIyTs3q//fqOLAo8xm9WvnRI32AuVAchjk4jGBkf/bARnigcLh6RjA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=S7KZOTu7; 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="S7KZOTu7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 42D7CC2BCB3; Tue, 19 May 2026 05:51:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779169882; bh=cZ5cBcTJwHjrp4DCzMPwlvilxKz8vNvwH0IKzxgXWS8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=S7KZOTu7cRGYmdkx7xT7fqPGvJboDRjQYrY4aQjwC4v7fcGUeu/EFo1g4Jpv3NPzl 3nTasNre9SJAaKBMtKKuDTGVHalo0FDxKlW9o3lg/19WyciE1fED8E48ZD9oY7i4rf PTfuUlZfUQGPilM6ztjnGljsOI0QK7FWCdYlbtNWBvJf3CBlczUKe71NuhlfatGbSi YgL7OapVOoeDaiXeKIbFk0Ys/MJukT74a7er5Wfz7tqVya11EbB3lnlw3yspON6USC pLXWSd/ox8y2NPeF4EFa2Jf6VgFGe/94E9v996D8x6m9Ha4WJHoyHFLvpdLRPBgyB6 IRIMfP+2Cj2CQ== From: "Matthieu Baerts (NGI0)" Date: Tue, 19 May 2026 15:51:15 +1000 Subject: [PATCH mptcp-next v2 06/15] mptcp: pm: drop TCP TS with ADD_ADDRv6 + port 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: <20260519-mptcp-add-addr6-port-ts-v2-6-3b36a51e6a86@kernel.org> References: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> In-Reply-To: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7289; i=matttbe@kernel.org; h=from:subject:message-id; bh=cZ5cBcTJwHjrp4DCzMPwlvilxKz8vNvwH0IKzxgXWS8=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqC/pS2Avm/n5TLt5UZPly7nbalPNytNQqKncem IhQ5MfODH+JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagv6UgAKCRD2t4JPQmmg c9dxD/9FkX7z+uptKd3O1MP5vMR4a1n6OqEbhZKrgfG7yZnIgQTWRDGCTZf30iamV2ZkvL4v6/Z W8pA+DXrEyXrVUXEf6U0SsYbvyvtpgdDvlLFl550x8UxEoHxdmKtuVtZNRPL09mwyfHHLLaWGze qfEcB6IeggjbSlZZO+TyMwLjESI7VCAt9QhVU0v7MeWb4QqY06sCVYvfbjrOXreoQEsCJWgPT7T TMiUV8QTojZuZn6DVpPpCWDHaMzRQFNKFzfLkGd8eOW0WhcIA1X1HTQ7CG/e9TmR8HN0ufMr5sd oauLVn+Vl1DV5pyQojhTIqNnSnFi3zGjoRBhYFpFrEa3+huWQgd1/13EyqEFw0huQjsUJCjXSFK fYEy+CPrizzp/YqEuxwyuL/8vbMEcZT5J+ss12PvBmJN7+sSEnrx3eOnuLeJbFJ77nlPp1dhFsz cP5A6hkrthnSmczdGNBzdNxaWAELiflmJTbR6XDHoHmwx/b6uYfe5LAiSFQXOTSM61hRoeFE5IJ KQwKvfgX1BDAcQOySLUhcK+Ek8nEmRUVvRYl7vzFG1npwsBQF3BxtDs6SGkE4QL0vvgRmWQC/2Y 4Kj0V48y4cJZD0lmTz0MpQ3U8LEy/DFtM8lUFaF2BmFzXnqY8+79lg3zuA4xEQWhJ5sFV7qCG8M 0OciHlmV0LLk8Bg== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 With TCP-timestamps (padded) taking 12 bytes and ADD_ADDR IPv6 + port taking 30 bytes, the 40-byte limit for the TCP options is reached. In this case, it is then not possible to send the signal. To be able to send this ADD_ADDR, the TCP timestamps option can now be dropped. A new parameter is passed from tcp_established_options to the MPTCP side to indicate if the TCP TS option is used, and if it should be dropped. This is controlled by a new net.mptcp.add_addr_v6_port_drop_ts sysctl knob, enabled by default. It is important to keep in mind that dropping the TCP timestamps option for one packet of the connection could eventually disrupt some middleboxes: even if it should be unlikely, they could drop the packet or even block the connection. That's why this new feature can be controlled by a sysctl knob. Note that it would be technically possible to squeeze both options into the header if the ADD_ADDR is first written, and then the TCP timestamps without the NOPs preceding it. But this means more modifications on TCP side, plus some middleboxes could still be disrupted by that. Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/448 Signed-off-by: Matthieu Baerts (NGI0) --- v2: split + fix reverse Xmas tree order + change label (Paolo) --- include/net/mptcp.h | 3 ++- net/ipv4/tcp_output.c | 6 +++++- net/mptcp/options.c | 11 ++++++++--- net/mptcp/pm.c | 12 +++++++++++- net/mptcp/protocol.h | 2 +- 5 files changed, 27 insertions(+), 7 deletions(-) diff --git a/include/net/mptcp.h b/include/net/mptcp.h index 4cf59e83c1c5..b14e98b60958 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -157,7 +157,7 @@ bool mptcp_synack_options(const struct request_sock *re= q, unsigned int *size, struct mptcp_out_options *opts); bool mptcp_established_options(struct sock *sk, struct sk_buff *skb, unsigned int *size, unsigned int remaining, - struct mptcp_out_options *opts); + bool *drop_ts, struct mptcp_out_options *opts); bool mptcp_incoming_options(struct sock *sk, struct sk_buff *skb); =20 void mptcp_write_options(struct tcphdr *th, __be32 *ptr, struct tcp_sock *= tp, @@ -276,6 +276,7 @@ static inline bool mptcp_established_options(struct soc= k *sk, struct sk_buff *skb, unsigned int *size, unsigned int remaining, + bool *drop_ts, struct mptcp_out_options *opts) { return false; diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 47647a99e324..f5552928303b 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -1181,12 +1181,16 @@ static unsigned int tcp_established_options(struct = sock *sk, struct sk_buff *skb */ if (sk_is_mptcp(sk)) { unsigned int remaining =3D MAX_TCP_OPTION_SPACE - size; + bool drop_ts =3D opts->options & OPTION_TS; unsigned int opt_size =3D 0; =20 if (mptcp_established_options(sk, skb, &opt_size, remaining, - &opts->mptcp)) { + &drop_ts, &opts->mptcp)) { opts->options |=3D OPTION_MPTCP; size +=3D opt_size; + + if (drop_ts) + opts->options &=3D ~OPTION_TS; } } =20 diff --git a/net/mptcp/options.c b/net/mptcp/options.c index c6d57997110d..a0e675cac4e5 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -654,6 +654,7 @@ static u64 add_addr_generate_hmac(u64 key1, u64 key2, static bool mptcp_established_options_add_addr(struct sock *sk, struct sk_buff *skb, int *size, unsigned int remaining, + bool *drop_ts, struct mptcp_out_options *opts) { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); @@ -668,7 +669,7 @@ static bool mptcp_established_options_add_addr(struct s= ock *sk, if (!mptcp_pm_should_add_signal(msk) || (opts->suboptions & (OPTION_MPTCP_MPJ_ACK | OPTION_MPTCP_MPC_ACK)) || !mptcp_pm_add_addr_signal(msk, skb, size, remaining, &addr, &echo, - &drop_other_suboptions)) + &drop_other_suboptions, drop_ts)) return false; =20 /* @@ -821,15 +822,17 @@ static bool mptcp_established_options_mp_fail(struct = sock *sk, =20 bool mptcp_established_options(struct sock *sk, struct sk_buff *skb, unsigned int *size, unsigned int remaining, - struct mptcp_out_options *opts) + bool *drop_ts, struct mptcp_out_options *opts) { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); + bool has_ts =3D *drop_ts; bool snd_data_fin; bool ret =3D false; int opt_size =3D 0; =20 opts->suboptions =3D 0; + *drop_ts =3D false; =20 /* Force later mptcp_write_options(), but do not use any actual * option space. @@ -874,10 +877,12 @@ bool mptcp_established_options(struct sock *sk, struc= t sk_buff *skb, =20 *size +=3D opt_size; remaining -=3D opt_size; - if (mptcp_established_options_add_addr(sk, skb, &opt_size, remaining, opt= s)) { + if (mptcp_established_options_add_addr(sk, skb, &opt_size, remaining, + &has_ts, opts)) { *size +=3D opt_size; remaining -=3D opt_size; ret =3D true; + *drop_ts =3D has_ts; } else if (mptcp_established_options_rm_addr(sk, &opt_size, remaining, op= ts)) { *size +=3D opt_size; remaining -=3D opt_size; diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index dac76113f79b..5e6a32fc583b 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -906,7 +906,7 @@ static unsigned int mptcp_add_addr_len(int family, bool= echo, bool port) bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, int *size, int remaining, struct mptcp_addr_info *addr, bool *echo, - bool *drop_other_suboptions) + bool *drop_other_suboptions, bool *drop_ts) { bool skip_add_addr =3D false; bool ret =3D false; @@ -950,6 +950,13 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, = const struct sk_buff *skb, if (!*drop_other_suboptions) goto out_unlock; =20 + if (*drop_ts && mptcp_add_addr_v6_port_drop_ts(net)) { + /* OK without TCP Timestamps? */ + len -=3D TCPOLEN_TSTAMP_ALIGNED; + if (len <=3D remaining) + goto enough_space; + } + if (*echo) { MPTCP_INC_STATS(net, MPTCP_MIB_ECHOADDTXDROP); } else { @@ -959,6 +966,9 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, goto drop_signal_mark; } =20 + *drop_ts =3D false; + +enough_space: ret =3D true; *size =3D len; =20 diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 2d6c8b1829cd..6323b5195b3f 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1213,7 +1213,7 @@ static inline bool mptcp_pm_is_kernel(const struct mp= tcp_sock *msk) bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, int *size, int remaining, struct mptcp_addr_info *addr, bool *echo, - bool *drop_other_suboptions); + bool *drop_other_suboptions, bool *drop_ts); bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, struct mptcp_rm_list *rm_list, unsigned int *len); int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); --=20 2.53.0 From nobody Mon May 25 18:11:39 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 6044934D910 for ; Tue, 19 May 2026 05:51:24 +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=1779169884; cv=none; b=BdzWCSDqsWDSblzkiwQG4dESyjgx5LObWlFUE4vyubEU83CB8pmyHPWW4BfDFwtoyuHF4dzpXobUBKAosgLKNSni35LsCqhSNRuXBiVOiETMoXgooumxzxYDMd91EYbt7IQxk4dHDLdVnU1ZwbbUHDllvNHdqxeo1JKT30jvLu0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779169884; c=relaxed/simple; bh=QFJQTxhkD2AgZ9YctJ1WtjN2BjqjUAK9Ui/9GaTBWQo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rIoCNd+QnaJ+K76mtBBGcDcDK98pJO+LFRWV3y6OG6QcRHCLqsU57RDrpnvEznPDGYMzT7EvbhqFd3zzo/tigxAP2wU2aW9S3TbzXiUcO33VLP99H1JnQR1iUmO7WPelhhG3XbY1WHbO5T3kKuUTbs2fOwT4J2veXN7Tu9forYI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VgE5lJHi; 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="VgE5lJHi" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 714DBC2BCC6; Tue, 19 May 2026 05:51:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779169884; bh=QFJQTxhkD2AgZ9YctJ1WtjN2BjqjUAK9Ui/9GaTBWQo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=VgE5lJHitZXcztH3ydZ62ibAyC97/AtIw3D9Y44nqaSNCrZrMb9uQ2EftzAv00qo5 S0UF4ak86xCSZJJVDi/ynRqLQgohNXmwZAQ5FmyCUYuYVgNz3ewvJUu+I/XmdQar4v oRWKNfUR+25fahhPstkyWrLvmqzrgnT4xue99fYTctObR31xNKRPT7YRo+yv217SPi Kar10RQZRtlG6Lr6Bg9flhZvFMCdOtYyp4yAnDyy46NJ9pnwa5zcGJJv0RjOUYsjr3 dEkHxjnZYj0X3u1ZJZeNNmna3ZQIKMak/8/T98yGyzopTwxbCKrn956rfumlZhDvYT PgS2M1eOnZ7cQ== From: "Matthieu Baerts (NGI0)" Date: Tue, 19 May 2026 15:51:16 +1000 Subject: [PATCH mptcp-next v2 07/15] selftests: mptcp: validate ADD_ADDRv6 + TS + port 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: <20260519-mptcp-add-addr6-port-ts-v2-7-3b36a51e6a86@kernel.org> References: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> In-Reply-To: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1566; i=matttbe@kernel.org; h=from:subject:message-id; bh=QFJQTxhkD2AgZ9YctJ1WtjN2BjqjUAK9Ui/9GaTBWQo=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqC/pS38ScJbpb/wKVIwQ79EcE5d/eEfmf1vUqk 5Ut+ADllMqJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagv6UgAKCRD2t4JPQmmg cySoEACNXEIcfXnmKBWX3kLbJL7xX4WTPRab16LZ0Lxtq0rXkJwxQqbQr4PwKVYq3YMOK6Lvqas nCd+8vQ+kcQQSeJA8jJzvQo01NxA75g48JQm1QZJYqJaoqf0HoYvVFl4Hq+Jcpkaqve+t8bWDxl suXDHofkNgnfQAhnd+nHWRH2GMR76OihE+56VFntaMp1ZYoVd/+mZoK+5/3+IMlDDUiHjxl6uqD +EvTi/Ky2vE9skP/XHM8q1RDrg4U95+eGblEiJETG8OU7i1zeNLLK30BTCqYwDmu4mid/coRt5E vFQ69ZXCO2ODCWRx94X0TZwBHermRdMgK3Anf6UCcRlONtycmCA8FUXn8nTku6f6v2GqJtO6Bzu 004aw5BqX25eGQE+f3bbWVUazZgVvdNuTPhLptmgnzcT5Pho+h1MDZfacM362q/ZtJh0CYYJYCy 0XXyiKCp9m2rh0AXhABNZ+FW+xEpEhuobij7/1b8oDtc6hY50438mR0b+wJpjHNVDdTJ55oPG0Z 44QOTQP2w2zb3ly9MSGLkE/xbHXsa3vFEW3ENy/ZAQUppTDJvxtiDE1KGF9qrQi4clswwwrlzzu pW0YdJmuNYDArSyWBXRPUyNiP6Na+h971EqdpqvSo6YVBKzVXe9JJCckGFmRsJusDeEfB7p5vux rmi5COEnJirTvMg== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 This validates the feature added by parent commit, where it is now possible to send an ADD_ADDR with a v6 IP address and a port number, while the connection is using TCP Timestamps. This test is simply a copy of the previous one: "signal address with port", but using IPv6 addresses. This test is only executed if the add_addr_v6_port_drop_ts sysctl knob is available. If not, it means the kernel doesn't support this feature. Signed-off-by: Matthieu Baerts (NGI0) --- v2: switch back to IPv6 for the main connection to use a v6 socket. --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 23b17957686a..d491c3e964d6 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -3214,6 +3214,17 @@ add_addr_ports_tests() chk_add_nr 1 1 1 fi =20 + # signal address v6 with port + if reset "signal address v6 with port" && + continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/add_addr_v6_port_d= rop_ts'; then + pm_nl_set_limits $ns1 0 1 + pm_nl_set_limits $ns2 1 1 + pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal port 10100 + run_tests $ns1 $ns2 dead:beef:1::1 + chk_join_nr 1 1 1 + chk_add_nr 1 1 1 + fi + # subflow and signal with port if reset "subflow and signal with port"; then pm_nl_add_endpoint $ns1 10.0.2.1 flags signal port 10100 --=20 2.53.0 From nobody Mon May 25 18:11:39 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 5A45C34D910 for ; Tue, 19 May 2026 05:51:25 +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=1779169885; cv=none; b=cTdvKdY7Dsqyid3wWRC3lGJT8BcT9jO5AYV26qq+XoLbRhLcXmtcMQ8DrZQR+Jn7BTVgux9shiBXHGWsvkZZFP0MDl+1wcQQqCSBz4vom7ixP/5MNd0bo29DQCdKXKBHWGuWgQtS+95jvxwaJxuLdsQs1Mx2qI8ZpfGxaEoQe4k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779169885; c=relaxed/simple; bh=mRUZ8fUJ0RdPTACYZ38omEzQSXZElas6fU7vIj+n7VU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=osfZrzp7VnVyXlXS0QkJ7Qrv+7sqj26hCi+OueqrEuOyklYn+VlRACaqPx0T67Yy/+XI6FINoO6d8KLt7WrBl+mbPLW131XLW3kozwaaqdmHLvJNkPn1Oq/vTwZKVcndaHoJVgGZrM0MO9fDkiswVk/MIDWmKcHN1vkfFsElOxE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VrBvIA/V; 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="VrBvIA/V" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 95D64C2BCC6; Tue, 19 May 2026 05:51:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779169885; bh=mRUZ8fUJ0RdPTACYZ38omEzQSXZElas6fU7vIj+n7VU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=VrBvIA/VJ4EcYQSRWip/mNYV3wPeqmnlv43bG5EtDBTy7pVRnHXeQP8KIw8ayUNRG 9PgAK69wWc+3TUlZ+XgpoZ182bAdtiEX3tbWtgfD0bWYQhjk36LqgZa9Lse7YMhDHn ykiqdV8Ir6Rd0sUQ+Hx0oQorSajhp9Jdc2da8sxs54YmnGfWWgHK6TPCG3Zn3U6wcM lx7NOExgib/Lpz0ECDQduByu9pYczGsFZg/YkfMu77TMBLvm4IWRfklZueESBZ47NJ Uk1Keid7Ar4mUtwXoMPCZWKlC92M1CtYxUEH/1Ft5gI7Q1QftsCYetUg2lVw53YgTd 6QB6T5nWjJ7vg== From: "Matthieu Baerts (NGI0)" Date: Tue, 19 May 2026 15:51:17 +1000 Subject: [PATCH mptcp-next v2 08/15] selftests: mptcp: always check sent/dropped ADD_ADDRs 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: <20260519-mptcp-add-addr6-port-ts-v2-8-3b36a51e6a86@kernel.org> References: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> In-Reply-To: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4863; i=matttbe@kernel.org; h=from:subject:message-id; bh=mRUZ8fUJ0RdPTACYZ38omEzQSXZElas6fU7vIj+n7VU=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqC/pS+F7/B+q2KVIX5dZHd5A60YzmNuMVOgdAr JRV9oNP85KJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagv6UgAKCRD2t4JPQmmg c+c3D/9tDNw7W+HKYFstr2I+tfgwGRi5K8Hz2E7+Gye8B3XLmBpfKJK59bbQyl98jcbgkkug+dZ 8DIPtV2ai9uAMUZT0OvPTtoclCCdefxGGMoKvJCpBQnSiNUdpliR/hD9ozajPMkpBxPKkaFu2XU Ib00y6GZuZ+E1HjNvRuC/AAyFMUGw6Vq0ECz0gc/NaiJMTC/rTd/GixMo5vd3fmYxhPiYrrfSQS EoA6lN9hPtD8uOVcFlFwfM6jkxCSxKwemyZctujlWTEkNOekA6RgRnIsNPcqMcqIyqEL5YSiZ4v QwvBc1y1Dd/YOIczT1A4e+nibegb7sMRJSujT7eCBXqvxj3VTPVZBYlpB6mjjXZfPjPbY6QLvEe OLa5ajaOo4DJ+5n5IvP9N9iu7GbLbtYPqTv7wqDgI0LZKfxEAUPxl/KXwvSD1lx+AbL9FdQcmli FL4LKs8MbsMNdwngu0XhEWKgT3bzEJMoLAFX4UoNXRi0D9g2l64Xw2nLwirWWgrLVTPBuwEUSeD JiK1k0GofJEa+7bOnh48IzdDIJmh44r7mJjO00OtS+giSLXCdwtV5kh0ybMIKZpCveAad4F9piD i4x5MNdbGdcE6NZpMlFk71Mew7w1bUj4dpwycpnGiPv9q68oXyktmTpCmao1efa/i9w1+s4ngdY 4hKJLbixRjibSZQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Before, they were only checked on demand, but it seems better to check them each time received ADD_ADDRs are checked. Errors are only reported when the counter exists, and the value is not the expected one. This is similar to what is done in chk_join_nr: it reduces the output, and avoids a lot of 'skip' when validating older kernels. Also here, some tests need to adapt the default expected counters, e.g. when ADD_ADDR echo are dropped on the reception side, or it is not possible to send an ADD_ADDR due to the limited option space. Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 71 ++++++++++-----------= ---- 1 file changed, 27 insertions(+), 44 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index d491c3e964d6..82c0f7df3be2 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -87,6 +87,10 @@ unset fb_mpc_data unset fb_md5_sig unset fb_dss =20 +unset add_addr_tx_nr +unset add_addr_echo_tx_nr +unset add_addr_drop_tx_nr + # generated using "nfbpf_compile '(ip && (ip[54] & 0xf0) =3D=3D 0x30) || # (ip6 && (ip6[74] & 0xf0) =3D=3D 0x30)'" CBPF_MPTCP_SUBOPTION_ADD_ADDR=3D"14, @@ -1710,6 +1714,9 @@ chk_add_nr() local ack_nr=3D$port_nr local mis_syn_nr=3D0 local mis_ack_nr=3D0 + local add_tx_nr=3D${add_addr_tx_nr:-${add_nr}} + local echo_tx_nr=3D${add_addr_echo_tx_nr:-${echo_nr}} + local drop_tx_nr=3D${add_addr_drop_tx_nr:-0} local ns_tx=3D$ns1 local ns_rx=3D$ns2 local tx=3D"" @@ -1811,50 +1818,25 @@ chk_add_nr() print_ok fi fi -} =20 -chk_add_tx_nr() -{ - local add_tx_nr=3D$1 - local echo_tx_nr=3D$2 - local count - - print_check "add addr tx" - count=3D$(mptcp_lib_get_counter ${ns1} "MPTcpExtAddAddrTx") - if [ -z "$count" ]; then - print_skip + count=3D$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtAddAddrTx") # Tolerate more ADD_ADDR then expected (if any), due to retransmissions - elif [ "$count" !=3D "$add_tx_nr" ] && - { [ "$add_tx_nr" -eq 0 ] || [ "$count" -lt "$add_tx_nr" ]; }; then + if [ -n "$count" ] && [ "$count" !=3D "$add_tx_nr" ] && + { [ "$add_tx_nr" -eq 0 ] || [ "$count" -lt "$add_tx_nr" ]; }; then + print_check "add addr tx" fail_test "got $count ADD_ADDR[s] TX, expected $add_tx_nr" - else - print_ok fi =20 - print_check "add addr echo tx" - count=3D$(mptcp_lib_get_counter ${ns2} "MPTcpExtEchoAddTx") - if [ -z "$count" ]; then - print_skip - elif [ "$count" !=3D "$echo_tx_nr" ]; then + count=3D$(mptcp_lib_get_counter ${ns_rx} "MPTcpExtEchoAddTx") + if [ -n "$count" ] && [ "$count" !=3D "$echo_tx_nr" ]; then + print_check "add addr echo tx" fail_test "got $count ADD_ADDR echo[s] TX, expected $echo_tx_nr" - else - print_ok fi -} =20 -chk_add_drop_tx_nr() -{ - local drop_tx_nr=3D$1 - local count - - print_check "add addr tx drop" - count=3D$(mptcp_lib_get_counter ${ns1} "MPTcpExtAddAddrTxDrop") - if [ -z "$count" ]; then - print_skip - elif [ "$count" !=3D "$drop_tx_nr" ]; then + count=3D$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtAddAddrTxDrop") + if [ -n "$count" ] && [ "$count" !=3D "$drop_tx_nr" ]; then + print_check "add addr tx drop" fail_test "got $count ADD_ADDR drop[s] TX, expected $drop_tx_nr" - else - print_ok fi } =20 @@ -2267,7 +2249,6 @@ signal_address_tests() pm_nl_add_endpoint $ns1 10.0.2.1 flags signal run_tests $ns1 $ns2 10.0.1.1 chk_join_nr 0 0 0 - chk_add_tx_nr 1 1 chk_add_nr 1 1 fi =20 @@ -2545,8 +2526,8 @@ add_addr_timeout_tests() speed=3Dslow \ run_tests $ns1 $ns2 10.0.1.1 chk_join_nr 1 1 1 - chk_add_tx_nr 4 4 - chk_add_nr 4 0 + add_addr_echo_tx_nr=3D4 \ + chk_add_nr 4 0 fi =20 # add_addr timeout IPv6 @@ -2557,7 +2538,8 @@ add_addr_timeout_tests() speed=3Dslow \ run_tests $ns1 $ns2 dead:beef:1::1 chk_join_nr 1 1 1 - chk_add_nr 4 0 + add_addr_echo_tx_nr=3D4 \ + chk_add_nr 4 0 fi =20 # signal addresses timeout @@ -2569,7 +2551,8 @@ add_addr_timeout_tests() speed=3D10 \ run_tests $ns1 $ns2 10.0.1.1 chk_join_nr 2 2 2 - chk_add_nr 8 0 + add_addr_echo_tx_nr=3D8 \ + chk_add_nr 8 0 fi =20 # signal invalid addresses timeout @@ -2582,7 +2565,8 @@ add_addr_timeout_tests() run_tests $ns1 $ns2 10.0.1.1 join_syn_tx=3D2 \ chk_join_nr 1 1 1 - chk_add_nr 8 0 + add_addr_echo_tx_nr=3D7 \ + chk_add_nr 8 0 fi } =20 @@ -3331,9 +3315,8 @@ add_addr_ports_tests() pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal port 10100 pm_nl_add_endpoint $ns1 dead:beef:3::1 flags signal run_tests $ns1 $ns2 dead:beef:1::1 - chk_add_drop_tx_nr 1 - chk_add_tx_nr 1 1 - chk_add_nr 1 1 0 + add_addr_drop_tx_nr=3D1 \ + chk_add_nr 1 1 0 fi } =20 --=20 2.53.0 From nobody Mon May 25 18:11:39 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 D21462D978A for ; Tue, 19 May 2026 05:51:26 +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=1779169886; cv=none; b=AMGH+ee6Kqrf0Qt85tFiGBH6YHAiYqGuzLRIAAsOv92rvXYOUZ5STcmxQiusObr3TApNqK3lbiBJoekOKBbXP8i/ouqU4yGqN7ekp9PwzU1pYQh99J9N3Nm5mU8CVCcqBnogv0sbp3aE8ROvj7cE6i59Ejt87c6NJZIzOUWakPw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779169886; c=relaxed/simple; bh=SvJ6UYYeQiL72yiPpAAcfIBDJekaKC6uMuZCf/+rsb8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QCG63oPj/d3tJr6Ex3tbPYgUgtJB74hFA4IzXYqkPx8f1Y0AprxZegW58CTTN4XFO5Rh5ax6ab5x+PmM2fPLPLYGqAMxPDBjwzlk3A1at83t6BZ1k37HVD/WqYiSIPSq6uaPuTZqIGL9/NKYMTR6KUqDkUZSO0ZbpQUQTcPlZ+E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=LhNbantm; 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="LhNbantm" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B9433C2BCC6; Tue, 19 May 2026 05:51:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779169886; bh=SvJ6UYYeQiL72yiPpAAcfIBDJekaKC6uMuZCf/+rsb8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=LhNbantm/EA1CbZO9YNc8D/6qG8Fj3WnoVxYX6o543Wn+4dSC5wrKx421OOHgE928 biX44QEYfNgW6/aWkrDFZ7XAyqS1gVIbOmoicgZyRxSK46phP49Wd2aH3lkRcMTxNj d3VzlP2HSLOjq0L6W0mEChwZsR7jZlujW3guEVCcAgAihjpPeXaLtYbKnlsKTm+5jG F3WIavoRA8xJoC0ah7Mfqlbft50PsR1bGcqlQJMTqRWolKLC9xSLMv7GdKlB3mmbqx VetCgOFsHD6dA76DBmLK72pSlQHzzD2LmNkJTxSmF32rSqQ/wN4N2FuDAnmbH6G/wt PhDn0iKdMNF3Q== From: "Matthieu Baerts (NGI0)" Date: Tue, 19 May 2026 15:51:18 +1000 Subject: [PATCH mptcp-next v2 09/15] mptcp: pm: use for_each_subflow helper 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: <20260519-mptcp-add-addr6-port-ts-v2-9-3b36a51e6a86@kernel.org> References: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> In-Reply-To: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4858; i=matttbe@kernel.org; h=from:subject:message-id; bh=SvJ6UYYeQiL72yiPpAAcfIBDJekaKC6uMuZCf/+rsb8=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqC/pSuROnz9W+QhMyV509DHaACy4BbZLtEzxZT Nnyn808pIWJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagv6UgAKCRD2t4JPQmmg c/M7D/0SwIPe6NUNk8hOxuSnAqmUjbk9SHoyhuRGbkkhiiErSe15SJqcyw2EmoM2V1Cq5HMjsMF I8OVl6r5+DEsGUsy2GKGy0uuetrJE3VxHE17dFgJZnr2RUIK6PR85c9lRMCz/VVboPnXC0cKqhA iv41seZ1M2Q/bXFemjayng4OoVrXMLhowvVHCghAd3XL2FHOs3pK1FIbbIEwU8RFlYKIOq56RH9 2b2tLsDx/iJ+CU8duVOHNf8VEfH3htpyfMRtNFb1Prn9n+TfixVV6oRPp21LdTN5wp7lDzaarnV d6WxDYfwLqCB3DvliUfg62WnbSkOFnzJXl9XijFRDHyhi11PimEmouC3uUzSsJxy5px+ZXGHWZN 8BEDFjU0Jd/zyTlMguiW6xNAywqAqKqLglIh0SjhfsZagj0DCTfC6wxd2VNBLj8+ichSw2Rww3B r4hrEA4nZUkNLyPicx0InMsE64hcvYA5gn+VlsZBLpOvwRFABiBLhp9u8/YcDXLIrnHKEhUxZ40 evjn3A/JmP2e1ZDP5e7Ns4VDc0Uy+P0za+YpJ8jKT72q4LR1vo8LBkrpnUmtDlsCD8JOtLRb5ta PMfaW1C/et5gZhv6S2JmISzsh0VtOmLY1KggtbhWtPqpvgpLC6PjSDACkRW0ton+lC6PsflPJ0/ 8nfiqtmazSapevw== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Similar to most places in the MPTCP code. So instead of passing the subflow list and use list_for_each_entry(subflow, list, node), pass the msk and use mptcp_for_each_subflow(msk, subflow). That's clearer and more uniform with the rest. While at it, add 'pm_' prefix for the exported one to easily identify the origin. Plus replace 'lookup' by 'has', because a bool is returned. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 6 +++--- net/mptcp/pm_kernel.c | 12 ++++++------ net/mptcp/pm_userspace.c | 2 +- net/mptcp/protocol.h | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 5e6a32fc583b..5c4ff1dce1a3 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -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_has_subflow_saddr(const 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); diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index ae28c96adb91..8436e66daab6 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -96,13 +96,13 @@ u8 mptcp_pm_get_limit_extra_subflows(const struct mptcp= _sock *msk) } EXPORT_SYMBOL_GPL(mptcp_pm_get_limit_extra_subflows); =20 -static bool lookup_subflow_by_daddr(const struct list_head *list, - const struct mptcp_addr_info *daddr) +static bool has_subflow_daddr(const struct mptcp_sock *msk, + const struct mptcp_addr_info *daddr) { struct mptcp_subflow_context *subflow; struct mptcp_addr_info cur; =20 - list_for_each_entry(subflow, list, node) { + mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); =20 if (!((1 << inet_sk_state_load(ssk)) & @@ -673,7 +673,7 @@ static void mptcp_pm_nl_add_addr_received(struct mptcp_= sock *msk) mptcp_pm_addr_send_ack(msk); mptcp_mpc_endpoint_setup(msk); =20 - if (lookup_subflow_by_daddr(&msk->conn_list, &remote)) + if (has_subflow_daddr(msk, &remote)) return; =20 /* pick id 0 port, if none is provided the remote address */ @@ -1099,7 +1099,7 @@ 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); + remove_subflow =3D mptcp_pm_has_subflow_saddr(msk, addr); mptcp_pm_remove_anno_addr(msk, addr, remove_subflow && !(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT)); =20 @@ -1237,7 +1237,7 @@ static void mptcp_pm_flush_addrs_and_subflows(struct = 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_has_subflow_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)) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index d838e8ea65fd..ff0bbd96cd09 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -283,7 +283,7 @@ void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk, /* only delete if either announced or matching a subflow */ if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr)) anno_nr++; - else if (!mptcp_lookup_subflow_by_saddr(&msk->conn_list, &entry->addr)) + else if (!mptcp_pm_has_subflow_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 6323b5195b3f..7a0f04e5b08a 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1139,8 +1139,8 @@ bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *m= sk, 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_pm_has_subflow_saddr(const struct mptcp_sock *msk, + const struct mptcp_addr_info *saddr); bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local, --=20 2.53.0 From nobody Mon May 25 18:11:39 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 A27B434D910 for ; Tue, 19 May 2026 05:51:27 +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=1779169887; cv=none; b=uspKFHsyOC9K+PYv/r8JtQAwQ8QwVjbvYvLn2+NWapYZy6uJZFyl6uP6XrpKrcGaUNzILnZbRBspoIT2lNFKZ2X/IJA0GbDd+1hOF/SevkgSPT7cCFUPBhFsP6BmC6c3tE994tJbcb9GxxQEiJZ3HGLXhNVVWLojeeid8Ndh67U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779169887; c=relaxed/simple; bh=uzwaf0vLhKEAxIslzA5V5Skg3N/Qi78ka8PTR3lRDEo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nKZVaFMvgyhSRyM3JicrEbpj3Hkx76cHh1piV1+eBnUTzUGMR+LCdqc6nUP4wpaXcL94jCt1CheHUXHpGEueWM8jAjPzfhHAzdqzWzaKlt2Z3J8BGuNBcMt/7gxFSm1N30IEo4UgbKzhHQdrPDssgcxSQ/CoNarmW7Q1hxJT3/c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mwPb11d5; 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="mwPb11d5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DA3A1C2BCB3; Tue, 19 May 2026 05:51:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779169887; bh=uzwaf0vLhKEAxIslzA5V5Skg3N/Qi78ka8PTR3lRDEo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=mwPb11d5g8kEc6FRLYkPk3UYeUFzSy3J+/84+KHiyqfCEHuEl4wVqZUQw0qcOiCOf jYHDqU6q3VNbtTOZ2E4LvPBo2gyRMeZAnntsYzZJJ36F9RfRFhcBevMnsmloFH3iKa 2KUq6QGTAR59CXATmJtD7vgS64ypcW+c/mZCP3f5MU+bVP6XHHdmcnmdysxS1KPha2 Lt1TSf/s3wdqWQAh2cFoL+Pi/uVm34udSPhZwzxyjCer00rWv1SSKxkgZcptcrFsKI i5ikOUI7GcTwJifW+UOAEamyE6sqzwY6watekhxOHe/mT+R+Wnfk82hAn9f62qyv/i TSCjTGfW/VF+g== From: "Matthieu Baerts (NGI0)" Date: Tue, 19 May 2026 15:51:19 +1000 Subject: [PATCH mptcp-next v2 10/15] mptcp: pm: rename add_entry structure to add_addr 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: <20260519-mptcp-add-addr6-port-ts-v2-10-3b36a51e6a86@kernel.org> References: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> In-Reply-To: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3971; i=matttbe@kernel.org; h=from:subject:message-id; bh=uzwaf0vLhKEAxIslzA5V5Skg3N/Qi78ka8PTR3lRDEo=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqC/pS5Y8TTOWO/DKI+BzFHM8qjtj8t/1/r2gwU BO6aa82kGuJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagv6UgAKCRD2t4JPQmmg czFjD/4uCuy4YAKSULiRDf5HnkrYMPbiFmAuY5FoFPVODSCcx6sX3NPjGo1kS/edhsy5z7SJ3iM JEo2oeF7p2ey/IGoPLUCkMtsS3BjnGqsm+rKEeCGLFsUQSuXJouFzAzOqBLtqyRtRHzh9NUhKO8 0Tn1ZRdyaFxU8r+aHzp2bYRmyprTk3NPDxgGNVsgEjegPYfAM6GZy3iRe93P5cOKPM24mU5ZuVo 5eCOUo++sky/0I67/I5ReiiBAFrwE8itPnYl/hvQ+XnsJdNFYgHL3W9HFF2sgjPmEj+5wf6Ixm5 Ck+xM2rSsOEm2t37egclX+yS5SSm1FXnMM2tkxcgic3jcNfefBFBQwPsX4MTMWrBOHhbim6zvhH CtswbUjhjHYna85fyGAV46YDjzZm5FmVbkiBIhXy6YIt7zsEJTF6Btj/XrR3It86KTKVXmK6Fum Ty/iwRkikrQDLGKlg8GxBfsNuYMVQPc4uGa1samQCEm8IBU5n79qBtkl6oNtEx97kHY63VUlQgl SsL21l/67FJTe+UV30oUwh3Am7GBm6uX2ueycCe/nksl03eoc423zDdBwLZQab8DimummlD0kYq JilFD5x027Wspj3OOldSGqlnSst+JB5UePXeU/pi2lOReJBoFKCPE9lkHzB2WrriM2Ft1M1JFi9 H5PnTLWOnF4KQJg== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Using only the 'add' prefix is confusing: does it refer to a generic added entry or address, or specifically to ADD_ADDRs. Using add_addr removes this confusion. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 22 +++++++++++----------- net/mptcp/protocol.h | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 5c4ff1dce1a3..8ced3c740dea 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -12,7 +12,7 @@ =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; @@ -133,11 +133,11 @@ bool mptcp_pm_has_subflow_saddr(const struct mptcp_so= ck *msk, return false; } =20 -static struct mptcp_pm_add_entry * +static struct mptcp_pm_add_addr * mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk, const struct mptcp_addr_info *addr) { - struct mptcp_pm_add_entry *entry; + struct mptcp_pm_add_addr *entry; =20 lockdep_assert_held(&msk->pm.lock); =20 @@ -152,7 +152,7 @@ mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock= *msk, bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk, const struct mptcp_addr_info *addr) { - struct mptcp_pm_add_entry *entry; + struct mptcp_pm_add_addr *entry; bool ret; =20 entry =3D mptcp_pm_del_add_timer(msk, addr, false); @@ -164,7 +164,7 @@ bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock = *msk, =20 bool mptcp_pm_sport_in_anno_list(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 @@ -340,8 +340,8 @@ static unsigned int mptcp_adjust_add_addr_timeout(struc= t mptcp_sock *msk) =20 static void mptcp_pm_add_timer(struct timer_list *timer) { - struct mptcp_pm_add_entry *entry =3D timer_container_of(entry, timer, - add_timer); + struct mptcp_pm_add_addr *entry =3D timer_container_of(entry, timer, + add_timer); struct mptcp_sock *msk =3D entry->sock; struct sock *sk =3D (struct sock *)msk; unsigned int timeout =3D 0; @@ -397,12 +397,12 @@ static void mptcp_pm_add_timer(struct timer_list *tim= er) sock_put(sk); } =20 -struct mptcp_pm_add_entry * +struct mptcp_pm_add_addr * mptcp_pm_del_add_timer(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, bool check_id) { struct sock *sk =3D (struct sock *)msk; - struct mptcp_pm_add_entry *entry; + struct mptcp_pm_add_addr *entry; struct timer_list *timer =3D NULL; =20 rcu_read_lock(); @@ -435,7 +435,7 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk, bool mptcp_pm_alloc_anno_list(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_entry =3D NULL; struct sock *sk =3D (struct sock *)msk; unsigned int timeout; =20 @@ -472,7 +472,7 @@ bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk, =20 static void mptcp_pm_free_anno_list(struct mptcp_sock *msk) { - struct mptcp_pm_add_entry *entry, *tmp; + struct mptcp_pm_add_addr *entry, *tmp; struct sock *sk =3D (struct sock *)msk; LIST_HEAD(free_list); =20 diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 7a0f04e5b08a..59603bb1308e 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1136,7 +1136,7 @@ int mptcp_pm_mp_prio_send_ack(struct mptcp_sock *msk, bool mptcp_pm_alloc_anno_list(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 * +struct mptcp_pm_add_addr * mptcp_pm_del_add_timer(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, bool check_id); bool mptcp_pm_has_subflow_saddr(const struct mptcp_sock *msk, --=20 2.53.0 From nobody Mon May 25 18:11:39 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 0262934E754 for ; Tue, 19 May 2026 05:51:28 +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=1779169889; cv=none; b=li02VCSLRTo8WWzM3wZUhnIZ0+kezieprbqxvmS3wTerMibDhqn9GLy9I46oEkHbiptFRrA4E0QkJpjvnSIxMR0DoWD1XOMQqYcn+/TR/d3EBQhNgdSoxSpBuk9U+5eXeCtkfHZWXaovaTA1IrbhszFB3m2QeIK5jbVqID+7mvg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779169889; c=relaxed/simple; bh=0wPNaOVNWM0gIUb+qQdUO/ogORaDfT05mubLxYN8bOc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Q/epanje0TYRZ/OTJjOiM8ZeTJxo5C49MH5AWF+A4r1S+GsdjUUYBsGPN/HG7dWP0g6hMiqp3kIIJ5IaOH45YX9MrFT05sTU6dO25/LZtJX6nfwTzV+q254+P1eUVro0Z+NZN9e93sEhUBkg4VddSMQ+kHXP/zUTEq53j+8X+3Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=UDbIjDhw; 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="UDbIjDhw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 083D2C2BCC9; Tue, 19 May 2026 05:51:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779169888; bh=0wPNaOVNWM0gIUb+qQdUO/ogORaDfT05mubLxYN8bOc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=UDbIjDhwk5bCsOtv3qdwvBoA+BeU5IXZOJjLw7e//ytWXeEcmPeTq5PLJwuEo4L7q MLbolNFMBb+8rcejRZlZYeF5OFIwjNefYeu7thYM0C3kP73ANYs0O60vlfLh/5BRCa g/ZS/K7lL/sO70VX7/ZKxJcEHK8DIFfqscHEf/Snx9beWfYY+AGCqitCOnhvc/Z5SZ LYZDpq5G24tgKQCC+N58cLD6z+qQ95JiusY+qvwTk46GQDgD/GZkwG4iss0phIMi4e iWLBtS6DgxYJ7O/TtWy6rEov6H3Lilgn3KvaeutNbY86pkPxa5a4iCvDeB/WuHPdoN auiELylqbZNBg== From: "Matthieu Baerts (NGI0)" Date: Tue, 19 May 2026 15:51:20 +1000 Subject: [PATCH mptcp-next v2 11/15] mptcp: pm: uniform announced addresses helpers 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: <20260519-mptcp-add-addr6-port-ts-v2-11-3b36a51e6a86@kernel.org> References: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> In-Reply-To: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=12026; i=matttbe@kernel.org; h=from:subject:message-id; bh=0wPNaOVNWM0gIUb+qQdUO/ogORaDfT05mubLxYN8bOc=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqC/pSm9tH3Pv6jBdZvFGtN+LZXwH+m3cY5L0cG Nko3ZJ8BvqJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagv6UgAKCRD2t4JPQmmg c77ND/4tz/cIDflz6wcKV1jcqZ4MBGpS+2F3KI1g5pOfF4PHtvWqpWa5PpCOgLNO3BbcGcGuqx5 EqHCkTx+RC0WnMIrHtDp3Xmzna6FYhrSnkPZyo+3iS5ZpA+jC4OuO5d1KoeIk/gGvSc4yFppFcs vQIA+BJLzXysoyGY773UeQ5WivglbmqEBuSGMR9tMOlpLxgmY9hvyZVwv5bXMkpFieCxsjBvkTo DubBDDzHIpMtHBOSRdA8WLL5JFOIbWGqiom7YV60if5dLEY5o97VBhNToPqmpSxOUvnNSuvX9V7 zdqZZbPOIux/NWEm78tdHSWbeGc6vB22ckdpavm9Lwvg72gbhA85CPp67c632HxAC1yzbG6lmF/ 2LRnfqgSrk7XY4BwVceQAl8qsinLpPEKrgOOp+iwsLR8x/GNvVWyU/jk0iWjA0jf5b0kHS64AQz IhRqDvMpQlBn1llxWk/pHLRbL3YGNOJ8TASgsH8V+UQC3hYQs4Ja/oH4KPI0mlqkQ73fAVMQGmp TebypFcdaRcNF9TUlEaZOUmAWQOFvHhd0iwOh1+I0p4M+bHIMu9AMdwrtrIkmH1/UarI6Ffz/IH 2EFm7kOfdNt6GZ75kfh1/DVJikI0pzBsBDqJtBSy4iTTsv96sFaojzFOTWM14V3minxqc3iABgI T0drjbYPokpd+XA== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Similar to the previous commit, only using the 'add' or 'anno' prefixes is confusing -- generally associated to the action of adding something, or the Latin name for "year" -- and lack of uniformity. This has been causing issues in the past, e.g. del_add_timer seemed to suggest the goal is to delete a previously added timer. Instead, use the mptcp_pm_announced_ prefix. While at it, slightly improves some helpers: - mptcp_lookup_anno_list_by_saddr: no need to specify what is used to do the lookup: mptcp_pm_announced_lookup. - mptcp_pm_sport_in_anno_list: it doesn't just compare the port, but the whole address linked to the sublow: mptcp_pm_announced_has_ssk. - mptcp_pm_alloc_anno_list: it allocates one item of the list, not a whole list: mptcp_pm_announced_alloc. Signed-off-by: Matthieu Baerts (NGI0) --- v2: also update comment mentioning mptcp_pm_announced_del_timer. --- net/mptcp/options.c | 2 +- net/mptcp/pm.c | 35 +++++++++++++++++------------------ net/mptcp/pm_kernel.c | 10 +++++----- net/mptcp/pm_userspace.c | 4 ++-- net/mptcp/protocol.h | 12 ++++++------ net/mptcp/subflow.c | 4 ++-- 6 files changed, 33 insertions(+), 34 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index a0e675cac4e5..f50642f0ec27 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1199,7 +1199,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_announced_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 8ced3c740dea..580cf953cf92 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -134,8 +134,8 @@ bool mptcp_pm_has_subflow_saddr(const struct mptcp_sock= *msk, } =20 static struct mptcp_pm_add_addr * -mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk, - const struct mptcp_addr_info *addr) +mptcp_pm_announced_lookup(const struct mptcp_sock *msk, + const struct mptcp_addr_info *addr) { struct mptcp_pm_add_addr *entry; =20 @@ -149,26 +149,26 @@ mptcp_lookup_anno_list_by_saddr(const struct mptcp_so= ck *msk, return NULL; } =20 -bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr) +bool mptcp_pm_announced_remove(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr) { struct mptcp_pm_add_addr *entry; bool ret; =20 - entry =3D mptcp_pm_del_add_timer(msk, addr, false); + entry =3D mptcp_pm_announced_del_timer(msk, addr, false); ret =3D entry; kfree_rcu(entry, rcu); =20 return ret; } =20 -bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *msk, const struct sock= *sk) +bool mptcp_pm_announced_has_ssk(struct mptcp_sock *msk, const struct sock = *ssk) { struct mptcp_pm_add_addr *entry; struct mptcp_addr_info saddr; bool ret =3D false; =20 - mptcp_local_address((struct sock_common *)sk, &saddr); + mptcp_local_address((struct sock_common *)ssk, &saddr); =20 spin_lock_bh(&msk->pm.lock); list_for_each_entry(entry, &msk->pm.anno_list, list) { @@ -364,7 +364,7 @@ static void mptcp_pm_add_timer(struct timer_list *timer) =20 spin_lock_bh(&msk->pm.lock); =20 - /* The cancel path (mptcp_pm_del_add_timer()) can race with this + /* The cancel path (mptcp_pm_announced_del_timer()) can race with this * callback. Once cancel updates retrans_times to MAX, suppress further * retransmissions here. If this callback acquires pm.lock first, one * final transmit attempt is still possible. @@ -398,8 +398,8 @@ static void mptcp_pm_add_timer(struct timer_list *timer) } =20 struct mptcp_pm_add_addr * -mptcp_pm_del_add_timer(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr, bool check_id) +mptcp_pm_announced_del_timer(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr, bool check_id) { struct sock *sk =3D (struct sock *)msk; struct mptcp_pm_add_addr *entry; @@ -408,7 +408,7 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk, rcu_read_lock(); =20 spin_lock_bh(&msk->pm.lock); - entry =3D mptcp_lookup_anno_list_by_saddr(msk, addr); + entry =3D mptcp_pm_announced_lookup(msk, addr); if (entry && (!check_id || entry->addr.id =3D=3D addr->id)) { entry->retrans_times =3D ADD_ADDR_RETRANS_MAX; timer =3D &entry->add_timer; @@ -432,7 +432,7 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk, return entry; } =20 -bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk, +bool mptcp_pm_announced_alloc(struct mptcp_sock *msk, const struct mptcp_addr_info *addr) { struct mptcp_pm_add_addr *add_entry =3D NULL; @@ -441,8 +441,7 @@ bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk, =20 lockdep_assert_held(&msk->pm.lock); =20 - add_entry =3D mptcp_lookup_anno_list_by_saddr(msk, addr); - + add_entry =3D mptcp_pm_announced_lookup(msk, addr); if (add_entry) { if (WARN_ON_ONCE(mptcp_pm_is_kernel(msk))) return false; @@ -470,7 +469,7 @@ bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk, return true; } =20 -static void mptcp_pm_free_anno_list(struct mptcp_sock *msk) +static void mptcp_pm_free_announced_list(struct mptcp_sock *msk) { struct mptcp_pm_add_addr *entry, *tmp; struct sock *sk =3D (struct sock *)msk; @@ -739,7 +738,7 @@ 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_announced_lookup(msk, addr) && READ_ONCE(pm->work_pending)) mptcp_pm_schedule_work(msk, MPTCP_PM_SUBFLOW_ESTABLISHED); =20 spin_unlock_bh(&pm->lock); @@ -983,7 +982,7 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, * let the PM state machine progress. */ if (skip_add_addr) { - mptcp_pm_del_add_timer(msk, addr, true); + mptcp_pm_announced_del_timer(msk, addr, true); mptcp_pm_subflow_established(msk); } return ret; @@ -1171,7 +1170,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_announced_list(msk); mptcp_pm_ops_release(msk); } =20 diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index 8436e66daab6..331f6fa99014 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_announced_alloc(msk, &local.addr)) return; =20 __clear_bit(endp_id, msk->pm.id_avail_bitmap); @@ -1054,7 +1054,7 @@ int mptcp_pm_nl_add_addr_doit(struct sk_buff *skb, st= ruct genl_info *info) return ret; } =20 -static void mptcp_pm_remove_anno_addr(struct mptcp_sock *msk, +static void mptcp_pm_remove_announced(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, bool force) { @@ -1063,7 +1063,7 @@ static void mptcp_pm_remove_anno_addr(struct mptcp_so= ck *msk, =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_announced_remove(msk, addr); if (announced || force) { spin_lock_bh(&msk->pm.lock); if (announced) @@ -1100,7 +1100,7 @@ static int mptcp_nl_remove_subflow_and_signal_addr(st= ruct net *net, =20 lock_sock(sk); remove_subflow =3D mptcp_pm_has_subflow_saddr(msk, addr); - mptcp_pm_remove_anno_addr(msk, addr, remove_subflow && + mptcp_pm_remove_announced(msk, addr, remove_subflow && !(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT)); =20 list.ids[0] =3D mptcp_endp_get_local_id(msk, addr); @@ -1240,7 +1240,7 @@ static void mptcp_pm_flush_addrs_and_subflows(struct = mptcp_sock *msk, if (mptcp_pm_has_subflow_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_announced_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 ff0bbd96cd09..8a342a65bd34 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_announced_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,7 +281,7 @@ 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_announced_remove(msk, &entry->addr)) anno_nr++; else if (!mptcp_pm_has_subflow_saddr(msk, &entry->addr)) return; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 59603bb1308e..d501cd625362 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1133,16 +1133,16 @@ 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_announced_alloc(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_addr * -mptcp_pm_del_add_timer(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr, bool check_id); +mptcp_pm_announced_del_timer(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr, bool check_id); +bool mptcp_pm_announced_remove(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr); +bool mptcp_pm_announced_has_ssk(struct mptcp_sock *msk, const struct sock = *ssk); bool mptcp_pm_has_subflow_saddr(const struct mptcp_sock *msk, const struct mptcp_addr_info *saddr); -bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr); 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 d562e149606f..8e386899ceb9 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_announced_has_ssk(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_announced_has_ssk(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 From nobody Mon May 25 18:11:39 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 EF2882D978A for ; Tue, 19 May 2026 05:51:29 +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=1779169890; cv=none; b=FKakjY/qKRdKvv5t8VXTC/bt8ywy3+58xuzjeJlK2zd6tSXNftU1mI+5MkB5N8Crt0FXETY8sNcS0OdnyR2u4a4vc6UP+z2AnSoPyvZ4pm8YKJrf5LpU2Zoh10qt3+hh+CfcXv1QXFLbcoP6aswgxtzZoYtHXYqrj0gQcSigrtI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779169890; c=relaxed/simple; bh=BUBJFOKKtYpmgaTwRUJRumpM/v3hBDO/QE/kL8Qf7j8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ANkNVGL0P3I7Nn0GYU1pQ9meN7bFd2mZC34k7+MMag91S+Lnc1AfgQamLPiYwKe+HvQZ64UcUNsYlDxwtxaZi+PkQ9MVmWHT9qrR01vg41VjOWFGdrp+H0XHkPO+Zk1/mO1qG15eWukztfsE7ZBWsfA3L2zqh8gdAZhCUZECU/I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TymwlkDf; 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="TymwlkDf" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2CDC2C2BCC6; Tue, 19 May 2026 05:51:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779169889; bh=BUBJFOKKtYpmgaTwRUJRumpM/v3hBDO/QE/kL8Qf7j8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=TymwlkDfSxj6UMYK9WtSbGmJtrP3H1tv+Uds+Ub6pMrhvpqwG33kZVNw67R3r3B87 tuKIQwDmGq8oz5x5xPtg/q72FUY+g0cKFW8iUi0CKYpky2y2C3paM+mn78+3hztCKK Zp9Qw2NyBKg4I67pmXzD9YJhd6xm32yzUCod8Xe566GR7+o6CtUWjy/jWjy79AfNgf TSHm2p3xTpuLuVFZUPD2N/L3frD9upO+YgV2Qj9n8z1S2WhI5rTvm+5Uq9bmoh8wWq k7o+ZqdWJlpoEoXuTjNz/niGirktF9x0GMyAjNJzOos6SrrUcsqHpNBag4sn8LVgSG 9G+fb3dddCgAA== From: "Matthieu Baerts (NGI0)" Date: Tue, 19 May 2026 15:51:21 +1000 Subject: [PATCH mptcp-next v2 12/15] mptcp: pm: remove add_ prefix from timer 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: <20260519-mptcp-add-addr6-port-ts-v2-12-3b36a51e6a86@kernel.org> References: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> In-Reply-To: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2718; i=matttbe@kernel.org; h=from:subject:message-id; bh=BUBJFOKKtYpmgaTwRUJRumpM/v3hBDO/QE/kL8Qf7j8=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqC/pSJsGhJBEc9/oMzAu5wej3yahcbndw60GmP bg8uIq6N02JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagv6UgAKCRD2t4JPQmmg czW0EAC8iZGP7wgOu9dehMJdNiF5b45Gp0IrcNS8/f1h5x+E8RLGuTMtB7ncQyfZ81sqJArZHMm gW91I6pt2jBauXLx7yI5wWXoMFB+uoHcpVNR2DpfeN5YPvzBQa7RU/I1suQfy0Iw7jsHZJGQrVg bTAynEF9ZmJkT8FYi8ApwMcyQb+HHW3TCciY9e+Tc5WIl9EJ+hQRKvws9LPvKVal0NNxbHRm1my n/mNoszLA9/ckzSC+C94O8hr2YdfLzIlKCN5N4oEbtcpIcYcYtN7u3IDgPuVY6Oc5MuGtNzc3ZQ w692nYNUFg73rMpd0xURu7Z1DJZkyGBrLB4fC/lZ2ZvMwv0Twyggj6hXlLs9jHiUuMwkbir1n/M 874RCOrEKamU+wTopGVwZPvoISByMv/A685Qv1deKCVaWIVTdnTrV8Snc1Sq1xCKT+IXMg2RNzo XxM1jjDd/QdDGNEJqnktCmeXlAjBPlvFoJ1xgoxMdKAFHyQL0V5lNV0oE/j4BdJKYbiEvzINFn5 L8Ofo613GqiSxLGPBqVwGhiCAyVU1NyjMfyfoh8d6wqBhJjsvPA6Ddjo9YCYsWWwl3C0Ev8sEd1 YmyBriM+fEePyFkrCnRZ1wkz29nLlDnw08M0JPYIuudUALFH6w6e1ZTh1ZWcbC7LYWjE9v0VX8w 0Ky01XAAH6WL7ww== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Similar to the two previous commits, using the 'add' prefix is confusing, also confirmed by [1]. Now that the structure has been renamed to include 'add_addr' in its name, easier to know the timer is linked to the ADD_ADDR, no need to add the confusing prefix, or an unneeded longer one. While at it, also update the ADD_ADDR timer helper to clearly specify it is linked to ADD_ADDR, and it is not there to add a new timer. Link: https://lore.kernel.org/20251117100745.1913963-1-edumazet@google.com = [1] Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 580cf953cf92..ee510071b4b4 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -17,7 +17,7 @@ struct mptcp_pm_add_addr { 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; }; @@ -338,10 +338,10 @@ static unsigned int mptcp_adjust_add_addr_timeout(str= uct mptcp_sock *msk) return 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_addr *entry =3D timer_container_of(entry, timer, - add_timer); + timer); struct mptcp_sock *msk =3D entry->sock; struct sock *sk =3D (struct sock *)msk; unsigned int timeout =3D 0; @@ -411,7 +411,7 @@ mptcp_pm_announced_del_timer(struct mptcp_sock *msk, entry =3D mptcp_pm_announced_lookup(msk, addr); if (entry && (!check_id || entry->addr.id =3D=3D addr->id)) { entry->retrans_times =3D ADD_ADDR_RETRANS_MAX; - timer =3D &entry->add_timer; + timer =3D &entry->timer; } if (!check_id && entry) list_del(&entry->list); @@ -459,12 +459,12 @@ bool mptcp_pm_announced_alloc(struct mptcp_sock *msk, add_entry->sock =3D msk; add_entry->retrans_times =3D 0; =20 - timer_setup(&add_entry->add_timer, mptcp_pm_add_timer, 0); + timer_setup(&add_entry->timer, mptcp_pm_add_addr_timer, 0); reset_timer: add_entry->timer_done =3D false; 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_entry->timer, jiffies + timeout); =20 return true; } @@ -483,7 +483,7 @@ static void mptcp_pm_free_announced_list(struct mptcp_s= ock *msk) =20 list_for_each_entry_safe(entry, tmp, &free_list, list) { if (!entry->timer_done) - sk_stop_timer_sync(sk, &entry->add_timer); + sk_stop_timer_sync(sk, &entry->timer); kfree_rcu(entry, rcu); } } --=20 2.53.0 From nobody Mon May 25 18:11:39 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 1009A34E75D for ; Tue, 19 May 2026 05:51:31 +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=1779169891; cv=none; b=ZGwFeC9Rbnc+mIy/XQrhylYjEv10kXQQQeOIQwLcnwRNBEZFVSEgLB39BMueBWeA3JNoei6AMwmLrM8uYxA9xpVr0YWfq8DYQCR5lrwWg55giL5F4mn6FsxST5oX70LfFIGKSsngUKfm74nG8D65gnauFWKPsHhhr6HWSVLXbwg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779169891; c=relaxed/simple; bh=w54jjT5OGNUmYDX+tGn5rJy2AAFV6mi/Dk4rS81wXVQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ggf5okzYHiBLWhCKsu5eXPdhlRroTWCrooESQUASXq0rnknXgOWltm3E/zkT7vu5X5Dmf5af7Pu1SBp4VH/PPp1/8Ri51d89XeY9UloqlG+HsJb/nBhgMazAAQsA/UIagNlATJ1JpNhXVtzLb4Em3uSm/LdzrAfG+rZ10mQ+KTA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Ix42293K; 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="Ix42293K" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 50601C2BCC6; Tue, 19 May 2026 05:51:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779169890; bh=w54jjT5OGNUmYDX+tGn5rJy2AAFV6mi/Dk4rS81wXVQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Ix42293KqKCUdNZvyqXBE8mDEfhdVrA4psFVFlTBg03oOguy8iW8tF3Jkpiox1cvX xLfolqjWajjpYdtdCSLNRWpIQRNWMhtloUiCDSjA/IVPjRwgyBq2K7eejgEAJ2BLyh RsAovqLfUZ7jxRQt6TE++Z493U14yIIEK4k/VLOosxD9JHWHhdWfXoyVfORX4qJ7be GdIkY4jmqlEMKACM9qVNlIZkDu2R/6srSzE7Os7EIHvJKspzWcjQGTwtp41er+JabD wnY0L/cY6WJB5yI580huW+46wa4r+3TZS6Jfphm9H19omWFQ77sJGQol9YRPYMJVYd 8UeWoNytiOBVw== From: "Matthieu Baerts (NGI0)" Date: Tue, 19 May 2026 15:51:22 +1000 Subject: [PATCH mptcp-next v2 13/15] mptcp: pm: make mptcp_pm_add_addr_send_ack static 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: <20260519-mptcp-add-addr6-port-ts-v2-13-3b36a51e6a86@kernel.org> References: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> In-Reply-To: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1805; i=matttbe@kernel.org; h=from:subject:message-id; bh=w54jjT5OGNUmYDX+tGn5rJy2AAFV6mi/Dk4rS81wXVQ=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqC/pSKaebnvTalHlBIR8gT3baJpVQ3MDmN1qfI N/P0U/4KouJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagv6UgAKCRD2t4JPQmmg c91EEADZqUgPyR+kgYfBR3DFcK8pc/hunh4rrEdonJudWZ4mLP8tAeL4A72GTfPocQ+L6XUx1Yw T/9y0HKJ8t/+Z2EUDmOAyl8sHxTF6ndBqP+V/iGaALnZyq3TWw6+yvlBxHw2TipyhMqERCCDf6t sZRvju3wjQGMdNZwrAoZq+OcJ1yZhj/wnw2dAk7fBkfeTdiZdsEdu7C+h66pqLr3bMc30fmxZ4P IkA0SWsOoUJpLDLBZJJ2mXUqPTMeoCusYtnTz+GnQMPV7yzKTg3oyBmkVidRM7MQtIgC+xce7G/ 0DuheyMojMtyjxFi2fp7dfgxqvB2+swK8/J+3rG0jH3VNF7JC7wFvxZPDDX/ZHFjXpf8anxEvYE Yd+WouMtvc5tH75RcQMRyQrwvOSBqbpM8soFXPdw0HiDKmL3eZK1cnbShVcVpu1gSHt3Z63qqwB xpoXYnwxhVae6rtXHLxZhttMQG6dQsH3Pcjp70/42T4c1RwLDLuMvmhCQoyqvDxRfZydP/+uM9H s41d2b/eyVDtV4d9RVJTYbs370syqOqH/HHA/rtLbTuysplli3CjPRcaAyg+tgt1dzRXqCCyLu1 Co8O5FhHT7jX1YF4KAzCGncPns7duJ7vt0+tUUT33yCw+amV7izt64Eu/HTawlP9YHrUo7JmheO 4SmPzZZy75eroDQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Only used in pm.c. Note that the signature is added above: it is easier than moving the code around, because this helper depends on mptcp_pm_schedule_work which is declared below. While at it, explicitly mark it as to be called while pm->lock is held. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 4 +++- net/mptcp/protocol.h | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index ee510071b4b4..c60d8fce64f2 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -226,6 +226,7 @@ static bool subflow_in_rm_list(const struct mptcp_subfl= ow_context *subflow, return false; } =20 +static void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk); static void mptcp_pm_addr_send_ack_avoid_list(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_list) @@ -744,7 +745,8 @@ void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, spin_unlock_bh(&pm->lock); } =20 -void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk) +/* To be called while pm->lock is held */ +static void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk) { if (!mptcp_pm_should_add_signal(msk)) return; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index d501cd625362..a0d2d72a5401 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1117,7 +1117,6 @@ void mptcp_pm_add_addr_received(const struct sock *ss= k, const struct mptcp_addr_info *addr); void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); -void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk); void mptcp_pm_send_ack(struct mptcp_sock *msk, struct mptcp_subflow_context *subflow, bool prio, bool backup); --=20 2.53.0 From nobody Mon May 25 18:11:39 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 3DF522D978A for ; Tue, 19 May 2026 05:51:32 +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=1779169892; cv=none; b=Y6LhxNjnjKQCUwfTAU0EAvLLKK2S9YCPI7wqP2Eg3WSSeqO9MOBwRaGr60w11QVehTkMe3C5PymHp4ecqcXZ1d+T2jbrEvgc5zSCePtbFfLAKuZrrrmKpmjyfNC33gSlFkR49Df7jwSsC0+mHFFSPd5FoRTMfW2XqvAE2EtJc3k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779169892; c=relaxed/simple; bh=KH8HigeWBtmZ2tI5nMYw+oREZqs1iEdOC3vav1hS2vA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fhuNpuIc9BkOcxVkCf8Hq+RE6INzihvdPoF7H1UwK1N4UYfuw940Af8u68JEagjKmRoYf/vPx04S37kGP/ZKygaqd/xjmRYU5AlqNwc35k7HFv/ZSLVstAjBD/4L6OsOytQ7uhmGh3GAU8fk7MXLYMTxLIxFuov5aacopMwFIUM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mas3mp1f; 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="mas3mp1f" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 719D6C2BCC6; Tue, 19 May 2026 05:51:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779169892; bh=KH8HigeWBtmZ2tI5nMYw+oREZqs1iEdOC3vav1hS2vA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=mas3mp1fYmxF6KnQUFG5ok4UoL/dud/plHG9vzEB9mxcD2XM2OKtJjz44wA4Gl2Qz +kM1m7n5zd6w4AYaU/9DGHl9Elbnh9aCBE5S53earIVt/emZ6UHXlv02snTTnnyt/q CCsZ0roRCzdD9pq8n07Wc9aSc/kLIuYh7J+bwTgHUY3j/gWMlwKXiyAas1xOYrnKFG Y85PgREWO6/yNqGQUid9TR1m0NkdaPEQO2qrQdhDRIZr9fqawqnKoLOdM1TbL3eUUN Bn+7Dl2XV9Y0LQxqjbaZNej91Z/V1QG/U1gESmm8TyQpvk/4g+CIy9FqjFq+DD1o/X JTdV8ZXnE8o3A== From: "Matthieu Baerts (NGI0)" Date: Tue, 19 May 2026 15:51:23 +1000 Subject: [PATCH mptcp-next v2 14/15] mptcp: pm: avoid using del_timer directly 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: <20260519-mptcp-add-addr6-port-ts-v2-14-3b36a51e6a86@kernel.org> References: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> In-Reply-To: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5273; i=matttbe@kernel.org; h=from:subject:message-id; bh=KH8HigeWBtmZ2tI5nMYw+oREZqs1iEdOC3vav1hS2vA=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqC/pSQsfYGJoDuEuVAUMP9m7oiwJTlJXkoWwfX PK5GF/lSYOJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagv6UgAKCRD2t4JPQmmg cyMXD/954I6oxT6D6OLkjbK1tSr+cpmRj1YKb955IW13ZZG6XrFRU8mnfj0yvkbnq8G7hTVVc1K SFNXItJ+YOaebFj/BDzY0iLTQEWmIjW0ghlTU+NDZoxZn5qf6zjArJDGyLsRo2tMGNj8Q9pOH3P hUWUYp5vH1ESluMlBYleYS9X4uZDYXFXuez//jqm8tL1CM2sl3CdmkNIUa0A6/Wm3Wm0E8it/Jz cOfeK71KW1TZtiNEnpiDktlF5itj3Lhyq3rRR3ausoLtyb11sJd4gJkjOft0tZEprdeYgGjusQr svS/Ig2ThqgqGL/B/gvkDFtl9FbDqabL3ksw22g7S7Yvckj+JDXY5HYSxwI2CwE6IyRNgvZraqU W5WlC7oLwcuaUhH3U5nFkWJ2pXr6fLpzOH7nyLlRIi1Tnv0/twxeFxi+hBo7/mT91zwzsVLKgPD fYChoG1z6dVjblePosm74rWZ3rTctyC/AqkJ0o1Xe6XHTCoJJpPiNxjGMoknhUL5u859+BZDeT0 VMds0fIPH96Y/QAy4Kdkf0/tNq0fhQk2Ya5Enb7vCUw+SkCD9KidF5AuwO918v3Zb7p8JRF69Qh ddCkRB1QklsdjpctiG6x5mtgT2mAs0Leh64lW9HU6WXfjjZ2+LgGRT2Y1T3hN9ukkEmE6Q1lgFK 75QsK+AQZHDPIFg== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 mptcp_pm_announced_del_timer() removes the matched ADD_ADDR entry (if found) from the ADD_ADDR list only if check_id is true. That's dangerous, and not clear, because it means the caller should be free the entry only in some cases, and it easy to miss that. Instead, make it static, and call it from mptcp_pm_add_addr_echoed, which is the only case where mptcp_pm_add_addr_del_timer should be called with check_id set to true. Bonus with that: a second call to mptcp_pm_add_addr_lookup_by_addr() can be avoided. Note that instead of adding the signature above to avoid a compilation issue because this helper is called before the definition of the function, the whole helper is moved above where it is first called. Its content is untouched, except the addition of the 'static' keyboard. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/options.c | 1 - net/mptcp/pm.c | 77 +++++++++++++++++++++++++++---------------------= ---- net/mptcp/protocol.h | 3 -- 3 files changed, 40 insertions(+), 41 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index f50642f0ec27..0de3ed9d6697 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1199,7 +1199,6 @@ 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_announced_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 c60d8fce64f2..25826ea0a19f 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -149,6 +149,41 @@ mptcp_pm_announced_lookup(const struct mptcp_sock *msk, return NULL; } =20 +static struct mptcp_pm_add_addr * +mptcp_pm_announced_del_timer(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr, bool check_id) +{ + struct sock *sk =3D (struct sock *)msk; + struct mptcp_pm_add_addr *entry; + struct timer_list *timer =3D NULL; + + rcu_read_lock(); + + spin_lock_bh(&msk->pm.lock); + entry =3D mptcp_pm_announced_lookup(msk, addr); + if (entry && (!check_id || entry->addr.id =3D=3D addr->id)) { + entry->retrans_times =3D ADD_ADDR_RETRANS_MAX; + timer =3D &entry->timer; + } + if (!check_id && entry) + list_del(&entry->list); + spin_unlock_bh(&msk->pm.lock); + + /* Note: entry might have been removed by another thread. + * We hold rcu_read_lock() to ensure it is not freed under us. + */ + rcu_read_unlock(); + + if (timer) { + if (check_id) + sk_stop_timer(sk, timer); + else + sk_stop_timer_sync(sk, timer); + } + + return entry; +} + bool mptcp_pm_announced_remove(struct mptcp_sock *msk, const struct mptcp_addr_info *addr) { @@ -398,41 +433,6 @@ static void mptcp_pm_add_addr_timer(struct timer_list = *timer) sock_put(sk); } =20 -struct mptcp_pm_add_addr * -mptcp_pm_announced_del_timer(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr, bool check_id) -{ - struct sock *sk =3D (struct sock *)msk; - struct mptcp_pm_add_addr *entry; - struct timer_list *timer =3D NULL; - - rcu_read_lock(); - - spin_lock_bh(&msk->pm.lock); - entry =3D mptcp_pm_announced_lookup(msk, addr); - if (entry && (!check_id || entry->addr.id =3D=3D addr->id)) { - entry->retrans_times =3D ADD_ADDR_RETRANS_MAX; - timer =3D &entry->timer; - } - if (!check_id && entry) - list_del(&entry->list); - spin_unlock_bh(&msk->pm.lock); - - /* Note: entry might have been removed by another thread. - * We hold rcu_read_lock() to ensure it is not freed under us. - */ - rcu_read_unlock(); - - if (timer) { - if (check_id) - sk_stop_timer(sk, timer); - else - sk_stop_timer_sync(sk, timer); - } - - return entry; -} - bool mptcp_pm_announced_alloc(struct mptcp_sock *msk, const struct mptcp_addr_info *addr) { @@ -731,15 +731,18 @@ void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, const struct mptcp_addr_info *addr) { struct mptcp_pm_data *pm =3D &msk->pm; + struct mptcp_pm_add_addr *entry; =20 pr_debug("msk=3D%p\n", msk); =20 - if (!READ_ONCE(pm->work_pending)) + entry =3D mptcp_pm_announced_del_timer(msk, addr, true); + + if (!entry || !READ_ONCE(pm->work_pending)) return; =20 spin_lock_bh(&pm->lock); =20 - if (mptcp_pm_announced_lookup(msk, addr) && READ_ONCE(pm->work_pending)) + if (READ_ONCE(pm->work_pending)) mptcp_pm_schedule_work(msk, MPTCP_PM_SUBFLOW_ESTABLISHED); =20 spin_unlock_bh(&pm->lock); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index a0d2d72a5401..ddb0be7f19bd 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1134,9 +1134,6 @@ int mptcp_pm_mp_prio_send_ack(struct mptcp_sock *msk, u8 bkup); bool mptcp_pm_announced_alloc(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); -struct mptcp_pm_add_addr * -mptcp_pm_announced_del_timer(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr, bool check_id); bool mptcp_pm_announced_remove(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); bool mptcp_pm_announced_has_ssk(struct mptcp_sock *msk, const struct sock = *ssk); --=20 2.53.0 From nobody Mon May 25 18:11:39 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 C11D62DF68 for ; Tue, 19 May 2026 05:51:33 +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=1779169893; cv=none; b=ldzFS3++f4+d37+bt6imDg0s9zEfr84AEF9J/FQrsS2kJ93O7WMAZE2W9EQHmPUwvaD5PS/CW7bGFzXxNVYqqmekxjyN/j7FUDArHabvl1uR7ildO+PdjFtXgJjPJdbjjaD7x/s9wkUN25YKQJ7VHRHtrGf6HrbkfIVYbxsSTn4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779169893; c=relaxed/simple; bh=LXkAqo7zKZtnbDTMAZcbhzqkvhMPS0aDuQPwdu2O99A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tW0BbklaKj1qZw7z4ER9vBG2t0t5bBPiueLWT/kHoyz1a+8klMXAbZPZl0tN/rYBpRsYLyGDdYLcD3RlIvU113DB0ulBPlA1s5l96CvfaWkqxVKd7ePaLLEwjepicFGXVoQYPZtAalp2Y8PJU9d/NEfmL+EC/DTf/I8eJLLwiz0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mQLOeP8D; 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="mQLOeP8D" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 984EAC2BCC6; Tue, 19 May 2026 05:51:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779169893; bh=LXkAqo7zKZtnbDTMAZcbhzqkvhMPS0aDuQPwdu2O99A=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=mQLOeP8DaAVd1ZicxPHiHvR9XmnQgHOgW5BK++aIQULfaQ8gb6MQfjQh92WMVZFWZ 1szrSMbDJR4JEDO0JT/EbTJe8WymnwPDpQJCY4E4ZYhd4WGMGuTuwakhwLzjEFamPl E5LNxB417WzAM9OnjvahjCQIYHjmDeBhfzfaz5XaiMVAB7Rs9JWIZEE31/BPIsRCb1 ct16QHrZQr9+nGYDu7iQ+LRewKLjnerjMV+cJsz8XedclCrx9JbqapaaBdOtobKy9d rs0TUoMMFuq5cqAd3o8VubMPzuTPwTLXSQt7i70kHOHPEbkWPSWTZdyrmkKD+28Zrj d0y0v+bu9RO3Q== From: "Matthieu Baerts (NGI0)" Date: Tue, 19 May 2026 15:51:24 +1000 Subject: [PATCH mptcp-next v2 15/15] mptcp: pm: avoid confusing check_id in del_timer 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: <20260519-mptcp-add-addr6-port-ts-v2-15-3b36a51e6a86@kernel.org> References: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> In-Reply-To: <20260519-mptcp-add-addr6-port-ts-v2-0-3b36a51e6a86@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2826; i=matttbe@kernel.org; h=from:subject:message-id; bh=LXkAqo7zKZtnbDTMAZcbhzqkvhMPS0aDuQPwdu2O99A=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqC/pS9WlP7OrvRSFp7/iXpBNn3qI6JmDxIJA/r xS6zM7R/Q6JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagv6UgAKCRD2t4JPQmmg czSYEADe0FqQ1igLvBrjwixLjfcDHQDNYi4leniw41nEsEjjel1QhxGFKRA01mZ/zwwuxYSqAkY /hR7uhI+WrLuBbqHCrGlB4MhVt3jJ0FmP0t6gG927sOEMQc+16IyEPsM8tlLYbR9s5ZcXSoGq/6 mUytkZ+0vGHXp1UqlUDatK2PkB0EKzqHuS/jJru5blFftTPjSPwHP/RyqCcMAAYfmhUp49ydcYs 5NbmR39Gn6hvL0YrPQFE3fr5Fk3jpnP86g32HIViLrK6V9vqVtpkHJ9Vw+eUwXG7wGLBlA9P/ME Tppyne3bx5TySCbZqDBdOQgiKCdq4hwZXxZYJPZxaeonjHd9ogt5nui567ahgl3+tB6N4Tr8KFN bImX6J0ip/L0jRkfwVuzld+KkXzMQuhx9OPbaHi/A82C7+l3gmEB7B7ycD5NJXlif25s2UXP//U 7nhL/au4LAdts/UWz+8VfvgrxWi0X5Oz+j708GW8CeAhotg6VkQzZo+KsTPKiyzNTKKes2QbGMF oLhAE/CEbDaOF4M4fk/vWe4NIaqeFhP+3QBdolX/SSes64/GZQqsKZSofLewp0YwW5pbWR9z1fn X9BRNIIp9hg+GuYjJOORfIQi/ip7al/dhJO6mPrr0Ceo9R2OXHkW5hu/sVTDZ/O0CR/eIkt7QLT 0WoXw+wFwE38SvA== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 We an always check the ID in mptcp_pm_announced_del_timer: this check is needed when an echo is received, but in other cases, the caller will use an entry that was previously added in the list, so they have to match too, otherwise that's not correct. After having removed this extra check, the variable is only used to know what to do with the list and the timer. Use del_list instead of check_id: clearer that the action will remove the entry from the list. Signed-off-by: Matthieu Baerts (NGI0) --- v2: fix typo (check_id -> !del_list, '!' was missing in one case) --- net/mptcp/pm.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 25826ea0a19f..3e06f3599b5a 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -151,7 +151,7 @@ mptcp_pm_announced_lookup(const struct mptcp_sock *msk, =20 static struct mptcp_pm_add_addr * mptcp_pm_announced_del_timer(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr, bool check_id) + const struct mptcp_addr_info *addr, bool del_list) { struct sock *sk =3D (struct sock *)msk; struct mptcp_pm_add_addr *entry; @@ -161,11 +161,11 @@ mptcp_pm_announced_del_timer(struct mptcp_sock *msk, =20 spin_lock_bh(&msk->pm.lock); entry =3D mptcp_pm_announced_lookup(msk, addr); - if (entry && (!check_id || entry->addr.id =3D=3D addr->id)) { + if (entry && entry->addr.id =3D=3D addr->id) { entry->retrans_times =3D ADD_ADDR_RETRANS_MAX; timer =3D &entry->timer; } - if (!check_id && entry) + if (del_list && entry) list_del(&entry->list); spin_unlock_bh(&msk->pm.lock); =20 @@ -175,7 +175,7 @@ mptcp_pm_announced_del_timer(struct mptcp_sock *msk, rcu_read_unlock(); =20 if (timer) { - if (check_id) + if (!del_list) sk_stop_timer(sk, timer); else sk_stop_timer_sync(sk, timer); @@ -190,7 +190,7 @@ bool mptcp_pm_announced_remove(struct mptcp_sock *msk, struct mptcp_pm_add_addr *entry; bool ret; =20 - entry =3D mptcp_pm_announced_del_timer(msk, addr, false); + entry =3D mptcp_pm_announced_del_timer(msk, addr, true); ret =3D entry; kfree_rcu(entry, rcu); =20 @@ -735,7 +735,7 @@ void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, =20 pr_debug("msk=3D%p\n", msk); =20 - entry =3D mptcp_pm_announced_del_timer(msk, addr, true); + entry =3D mptcp_pm_announced_del_timer(msk, addr, false); =20 if (!entry || !READ_ONCE(pm->work_pending)) return; @@ -987,7 +987,7 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, * let the PM state machine progress. */ if (skip_add_addr) { - mptcp_pm_announced_del_timer(msk, addr, true); + mptcp_pm_announced_del_timer(msk, addr, false); mptcp_pm_subflow_established(msk); } return ret; --=20 2.53.0