From nobody Mon Jun 8 06:38:56 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 03D174183D2; Fri, 5 Jun 2026 09:22:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651324; cv=none; b=B7eTX/+nb337pU+Sq3RRNjo6s2Bbl9U26hJ7W8AlgBV8mzlhrhKQq6tmlYbYMYtrwkgQOleNKRq0gvL0v/rerrlXGLb/hYjkLglaympG7eVtztRQI3sklfNkgSdZO6g9cg06k1yn0ObUjw+YwJJJ0ywBG0A1RLUPplxTAAHz8FI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651324; c=relaxed/simple; bh=2rz4qXhcGLgCnPcrtLKqQR8RZlz7VL1w/36bRANJbeA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mJ2p/lE6SH3BTyV2QgamhmAhKMM/5AezPXXrNUL7KWsgD9hp4AlQCqxjINxMxwqdJpSOrlE0n17ur3PpXJij8YQO1nVkxFw+awP98jrI/y35DwGPByrY4amGY/WGg/oVxvhEALtejpw6CUhXn/PQIkwV9qCHKAq/uwynpi6ycP4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=aKASq/Xv; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="aKASq/Xv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BBFA71F00898; Fri, 5 Jun 2026 09:21:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780651322; bh=Wtaeein1M7WCMCqc8P6wOdEgWRKe92PgEMrjQTsfYt0=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=aKASq/XvJQc4BsLE29w0D4ypvGCI5UgWnqaVgzIrwlgXk0yTqEWccyhlVUqt3EOJr 7hl+QwB2H6gDH0GQLtQrkWUSu6j+6qGkNw5mNAAIabGlFzMXLmgSpF9VmNt0xlS5RB 2HF8VH0MW8v5Q5AppcC2IGQ40QRvYDrUFl3GBPD5saI6bJrEPzlatYlc4/aFZRFG6D XGHT20g7OP+pmUND+13TnEdnWkCPgKZVJaWOAjZ/RG62xE2uvTKDyL97nhkfzrSAXK MDyhILji9G+EcfrkZ+9CR9r3lsDIMJcs0tbpFcFThKSKTna1/N3RKS/Y01GuPiI+W6 3H3xLSMxpUcdw== From: "Matthieu Baerts (NGI0)" Date: Fri, 05 Jun 2026 19:21:45 +1000 Subject: [PATCH net-next v2 01/15] mptcp: options: suboptions sizes can be negative Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260605-net-next-mptcp-add-addr6-port-ts-v2-1-758e7ca73f4d@kernel.org> References: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> In-Reply-To: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4757; i=matttbe@kernel.org; h=from:subject:message-id; bh=2rz4qXhcGLgCnPcrtLKqQR8RZlz7VL1w/36bRANJbeA=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqIpUxhd/2U0duHtrO384RTrX7yBTrHEgqui4mX DrhJhZ6R/uJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCaiKVMQAKCRD2t4JPQmmg c1/lEADjqxjZ1GUezRRkGXKCYm+rdryuuy/2H+TdVpAuCSoRAPCV2lMlIXG1YwrC91/IU71+hAy ytCCMC8l+0IzCPTixHte0fHoi1WC+dc5K77nJLQwe6FJY3sofDY1DLx4thggL9gt+3vZJhCdSI0 K01I409NYThbaMatxiXpJz4UVyuyhUKe3OMnH46cq+LV9q0A6/XL2yTLL93/8qcEemMnMirHood LVDUxzNtS5iT/Bi2PTeqZyPyG9wiu6FKI5kD49tGDzPWI4t37wGpMrimEOEgMDwWRWh6/pnyS9k YZ7iR+PgGlg93UbGflmDkl4RKx9BG0x/83rb6TWEB7IRIr7QuVp/l1GUnWL1g0bGzT4Jj0+PpK0 RPT/2+IAPmKOyEF1Y17hiHA2Dox6zh8fxrwvXeXKNugI93dLhc/5Od3IgHPHjsuIMPEiBhH4tPZ sZjQL1hOzWOmiW2BSoScejacm2IyqDWLr/Fuqc8OALFp2FT7VwS5UfKAbDnGkqfPPY7ZYogcWHZ 6+9UBByLXQePIpfAUvqaG2jBGAQ9/vJinm/rIBLO55ZtC+OFpqk3KEfG4BvR64WhdB5u7Ape61g Tclhl4gc2FbWzBrKFylgv5/f32jzDuRm3yGLECgsz9RDqj+RJ3Kjo9bY0IhgLhHoE9I7Tf46cUT 7leg5dFNV0Rl8GA== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Use a signed int for the returned size, because when 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. Even if, for the moment, only the ADD_ADDR size can be negative in some cases, a signed int is now used for all mptcp_established_options_*() helpers, not to mismatch the type, and as a question of uniformity. Reviewed-by: Mat Martineau Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/options.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 70b939f3c33d..fd972047fdf7 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -447,8 +447,7 @@ static void clear_3rdack_retransmission(struct sock *sk) } =20 static bool mptcp_established_options_mp(struct sock *sk, struct sk_buff *= skb, - bool snd_data_fin_enable, - unsigned int *size, + bool snd_data_fin_enable, int *size, struct mptcp_out_options *opts) { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); @@ -560,8 +559,7 @@ static void mptcp_write_data_fin(struct mptcp_subflow_c= ontext *subflow, } =20 static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff = *skb, - bool snd_data_fin_enable, - unsigned int *size, + bool snd_data_fin_enable, int *size, struct mptcp_out_options *opts) { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); @@ -658,8 +656,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) { @@ -706,8 +704,7 @@ static bool mptcp_established_options_add_addr(struct s= ock *sk, struct sk_buff * return true; } =20 -static bool mptcp_established_options_rm_addr(struct sock *sk, - unsigned int *size, +static bool mptcp_established_options_rm_addr(struct sock *sk, int *size, unsigned int remaining, struct mptcp_out_options *opts) { @@ -736,8 +733,7 @@ static bool mptcp_established_options_rm_addr(struct so= ck *sk, return true; } =20 -static bool mptcp_established_options_mp_prio(struct sock *sk, - unsigned int *size, +static bool mptcp_established_options_mp_prio(struct sock *sk, int *size, unsigned int remaining, struct mptcp_out_options *opts) { @@ -763,7 +759,7 @@ static bool mptcp_established_options_mp_prio(struct so= ck *sk, } =20 static noinline bool mptcp_established_options_rst(struct sock *sk, struct= sk_buff *skb, - unsigned int *size, + int *size, unsigned int remaining, struct mptcp_out_options *opts) { @@ -781,8 +777,7 @@ static noinline bool mptcp_established_options_rst(stru= ct sock *sk, struct sk_bu return true; } =20 -static bool mptcp_established_options_fastclose(struct sock *sk, - unsigned int *size, +static bool mptcp_established_options_fastclose(struct sock *sk, int *size, unsigned int remaining, struct mptcp_out_options *opts) { @@ -804,8 +799,7 @@ static bool mptcp_established_options_fastclose(struct = sock *sk, return true; } =20 -static bool mptcp_established_options_mp_fail(struct sock *sk, - unsigned int *size, +static bool mptcp_established_options_mp_fail(struct sock *sk, int *size, unsigned int remaining, struct mptcp_out_options *opts) { @@ -833,10 +827,10 @@ int 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; int total_size =3D 0; bool snd_data_fin; bool ret =3D false; + int opt_size =3D 0; =20 opts->suboptions =3D 0; =20 @@ -864,7 +858,7 @@ int mptcp_established_options(struct sock *sk, struct s= k_buff *skb, if (mptcp_established_options_mp(sk, skb, snd_data_fin, &opt_size, opts)) ret =3D true; else if (mptcp_established_options_dss(sk, skb, snd_data_fin, &opt_size, = opts)) { - unsigned int mp_fail_size; + int mp_fail_size; =20 ret =3D true; if (mptcp_established_options_mp_fail(sk, &mp_fail_size, --=20 2.53.0 From nobody Mon Jun 8 06:38:56 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 122E13F8223; Fri, 5 Jun 2026 09:22:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651327; cv=none; b=FERkNWB81aEDdHJivmsYMPdAKLJeo0H8LkPeSyuAGirOC42VMMY+Ofd+7EPyhcy4o/2j84U4ZwUDhFRvR0unSZVYgRUwBC/fHOh3mx0yUSheMJe5GqXWRCYLrwtS6Bb7NlQYdQFP52tRYSpc2ixISnLdq0PyXNiVW7V5FVBKAW4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651327; c=relaxed/simple; bh=O95PjL80jVbcASx8r6w/thnf3KEjeOrReKRvDYHFkeE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=a6qphZJasxq6EmZNkik1h+SPz27NThmMYKBgnyNDfijZqtdD8vb0LF5YeJBped2EX4pNVLFHP+ILF0Pir5nV1g+kmpFMKjrlKSQc3OMXoAb30YUTX+Bq/XR3H96M991kuti3f9nlUrjP0bONHlxo1m5uCj+vMupHZJ0w9P0KhRY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=I4lt7lFH; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="I4lt7lFH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3B7C01F00899; Fri, 5 Jun 2026 09:22:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780651326; bh=56T1/Wp9+oeRG24bDoeMn5nJmIkHH8ov/xNi4c4lv/g=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=I4lt7lFH/mo+TLfMKuQDuZ24EN7q4Jmrwy4ooJGdNrZRHAKMpQUQZz2UCqmHOawcF EyyK+ia0mS/WljV7yQHBoAz8F/XCGlgRQOrRzU5pTHUB/2DJlbM3yA6I0j+gPCdOOp qReeltePq5dcEnATZbwuNjiZSukfU+/ZzLSSmCMF9OQFVs1LwHXm+psEzZC/JoBKDf Q4ayTKRs4xFpnnfJlJG31y5h2DeLJxkz6Yh7a5XZ/K64/Uk0Et7gQNemfUOal0ohos 0BF+SDDQ6Ur+E9Pp3vbm0GfQYyurkK6IiwWYXR3mj4qQXWlDMw46hCTuHFICB+N6L2 IJIESxNE4PlfA== From: "Matthieu Baerts (NGI0)" Date: Fri, 05 Jun 2026 19:21:46 +1000 Subject: [PATCH net-next v2 02/15] mptcp: pm: avoid computing rm_addr size twice Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260605-net-next-mptcp-add-addr6-port-ts-v2-2-758e7ca73f4d@kernel.org> References: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> In-Reply-To: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3655; i=matttbe@kernel.org; h=from:subject:message-id; bh=O95PjL80jVbcASx8r6w/thnf3KEjeOrReKRvDYHFkeE=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqIpUxMu/oekM65UNu2FVAWv/JkkqZBfMxOJGWd GLbZAXKGWSJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCaiKVMQAKCRD2t4JPQmmg c+cED/0db8RlEYLjabDm1w/t5kfbKOtYv7RZs4lsKuypCfOSiMU7OAXmjnW7qR8MxhDlUlNVMCG lYBt7BjySe9g9Bme+vRzEVSIsxWTGvYACYidE6YAwfW1aaQSgwryI2HPJKktmmUxkD3VwVwFQay ixMjH7+7z7s+M+jSYyfs+YDOlhq5FTcngocIp0QvYcwQcuy/3bLeOKZBqIUXDIUiFC/eE1sMDQi EFsTUTFVQMXUrKkQe2DnZn3mUEkPGGOCR+TRV8iOLCXNzLALPqRYjyw6GHEOQuDJVc1gi1vlMQF OtLI7Nu12Rp1/5U4rze14cfOy2c1uHEEs8sDXNk/okEEGZyLvX9WWVVpvaJO+/DRFvI59GVvMDq ITLwdLUkqcnT5iy5Tzm5hb8wUGEk7nUTjLVskBo/vdvp72966m2FGPLYusQNCwkMOKD0Xla+k46 IlQIzLkOMifaHFI7HRYJ+KYHMGe0K+VYExayfWfCPV1S1cqtmys5OOU78C7ZeNhPGGl4P0GElbW metvgBLJpxxsZ6qLV8gSP1qOJp+TK3dpskwCb0PS/CyNSkNymtbl/cRyGUTZfQmeH+M9oXTh3OR LZflSX5WTGRp+E8FZpBrtIb6W6dTWQ7BqpHYY+VqlpEexaQq1zi4yBg1KDz2hmqjIOAMcxSH1LG 0MRDqUy2GxULqWg== 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. Reviewed-by: Mat Martineau 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 fd972047fdf7..e44db4768f6c 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -711,19 +711,12 @@ static bool mptcp_established_options_rm_addr(struct = sock *sk, int *size, 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 470501470fe5..4bc380c6f0e1 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -953,8 +953,16 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, = unsigned int opt_size, 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, int *size) { int ret =3D false, len; u8 rm_addr; @@ -974,6 +982,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 b93b878478d2..75c5faaf4486 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1221,19 +1221,11 @@ 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, unsigned int opt_siz= e, unsigned int remaining, struct mptcp_addr_info *addr, bool *echo); 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, int *len); int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct mptcp_pm_addr_entry *skc); --=20 2.53.0 From nobody Mon Jun 8 06:38:56 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 E515640B370; Fri, 5 Jun 2026 09:22:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651331; cv=none; b=lsPWpUN9zwpfiI12q2/H1JlyiC2ujCgpDr9UD2gxNmU6wM/0jHOspVt0FcCEIVZp0xybG51ikB8QpJXNvoJsrSdlv7xo5tWetg+1pu3vD2nHmk0IzfL7bWWHkfKzv27VDQtiEeXgfgmTSdyu2SPUK4KVS9anWqsaCq4r8/aPS/I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651331; c=relaxed/simple; bh=S3d+uMiteSKRDwWkvMIXgL4LM29Q8+Cv2kR3u0+Ktb0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=arwtkWi6ZyExBWnAJ570MGTv1FGcBgL/0DL1etM1zsW8GUvBgBIIYNw73+exBAo4tCTnZU/ghGvj5xCAXi75CDm1lbL/uKhUGG9geBrL1PDtHkdwtF7jnG3XDji0P4qKGk46ue31+GzKJnEtHS6i4SK/dyPl2lDrYy1i8TRnhFg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eU85ijGc; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="eU85ijGc" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 811021F00893; Fri, 5 Jun 2026 09:22:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780651329; bh=TZL7KcFHmVsg1q0yWV0DsQyl/nWG15jXVqWzdvKFgrs=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=eU85ijGcvbl7MbJc8qXKL8Irb0pF/oI162wliTwuwd8lfg3XGSQhVkCPAB2a9IeHO YxmXz7lx2x1CLfaYu0GZrFHqTu4rY5RbqG9ctzpgJKFKOz/hOHu2mvU6tuGi7QhPiE 2EkT8gQOZ8jPAhMAZqKAW9w4lqvnOg/H4P8FwWtNSsOa01OvMGCS1/1h0NBDC669st KXZliCQosp9HD8+6Q6V2ETwfI+ski7D0lc2EHeGcVBcZU+DV2wOQwi0DrzpDPAWsS4 fJzChehhNe+UWzcbfFgX9Y8XDyw61uuvW989lqzEgdhctepv7TiEhEnX6zGz5FMmcK 69opL2x2NzVnQ== From: "Matthieu Baerts (NGI0)" Date: Fri, 05 Jun 2026 19:21:47 +1000 Subject: [PATCH net-next v2 03/15] mptcp: pm: avoid computing add_addr size twice Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260605-net-next-mptcp-add-addr6-port-ts-v2-3-758e7ca73f4d@kernel.org> References: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> In-Reply-To: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5582; i=matttbe@kernel.org; h=from:subject:message-id; bh=S3d+uMiteSKRDwWkvMIXgL4LM29Q8+Cv2kR3u0+Ktb0=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqIpUx926VlXHP8RSl9VUgp3r+JQSKyKAh/RUX+ aKuKdc4ZHyJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCaiKVMQAKCRD2t4JPQmmg cznXEACls68MB61RD7CO1m0Y80381MMCsfB4bvWNy8oMbXkpzsNRfuX6PDMcricE5cXaVsh/0rH bLN6AGwZc6G8kklSDqcEyA9l2RyG2XlKsW1/TsWsRnFJqFVSv+X1mIUVjOdACFcGY+NfOiBar56 tmEtHz4jvrqpB4XYSmiJVVCNmID3GxG4Nb9vwqcO1c2VF/i+MLNijFcLxhmYpiK7iXAAGEDy1iR 0LzMqVmWtyu/n8ky10ZMhqaTQRVCtpzbjnPS8wjtNCokBcwjrx+2QuYE+hn/7z+ZMYZrVgjq2k+ gClTQn6Balu5Lcw43FF0RNVDUisrs07WbsyRkMqZGwDX3Wr5KHp1jgFbghIFeimHt0DqVcelPwb TrPDsS3RtsfG7gOafrBA6B4Pa89cUpTlHiXc1oBjTZFuDLg8oGxj5nc1QqoDodrDgSAY06DCfEs 3Pn9gYBEw9o6gqJ/Adj7FtT7mUyqKiCvUlaWnrHv0JMKfe4iHedk4x3Tbv1riWMVuB2cerr+w12 RpIjs70fOb1SmiNmAXf2H8UbySxXPl8gHSYYFpY5GGjiVYt4wE3rpB3AGH6IHysbNG3erRIKdSM lZkBHe6oPVqyj0NEGi2+r07Rdrs7uxuss2+GUEREXkCRJrnLw6ijEaEdMep75tMXH/1y/FhrgaU UW3klmzJ16sIT/A== 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 - use 'int' in mptcp_add_addr_len for the size, instead of having a mix - use a bool for 'ret' in mptcp_pm_add_addr_signal Reviewed-by: Mat Martineau Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/options.c | 15 ++------------- net/mptcp/pm.c | 27 ++++++++++++++++++++++----- net/mptcp/protocol.h | 18 +----------------- 3 files changed, 25 insertions(+), 35 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index e44db4768f6c..2e4b6aafbad5 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -663,10 +663,8 @@ 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); - 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 @@ -674,21 +672,12 @@ static bool mptcp_established_options_add_addr(struct= sock *sk, if (!mptcp_pm_should_add_signal(msk) || (opts->suboptions & (OPTION_MPTCP_MPJ_ACK | OPTION_MPTCP_MPC_ACK)) || !skb || !skb_is_tcp_pure_ack(skb) || - !mptcp_pm_add_addr_signal(msk, opt_size, remaining, &addr, &echo)) + !mptcp_pm_add_addr_signal(msk, size, remaining, &addr, &echo)) return false; =20 - remaining +=3D opt_size; - - len =3D mptcp_add_addr_len(addr.family, echo, !!addr.port); - if (remaining < len) - return false; - - *size =3D len; pr_debug("drop other suboptions\n"); - opts->suboptions =3D 0; - *size -=3D opt_size; + opts->suboptions =3D OPTION_MPTCP_ADD_ADDR; opts->addr =3D addr; - opts->suboptions |=3D OPTION_MPTCP_ADD_ADDR; if (!echo) { MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ADDADDRTX); opts->ahmac =3D add_addr_generate_hmac(READ_ONCE(msk->local_key), diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 4bc380c6f0e1..59dc598d343d 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -887,13 +887,28 @@ void mptcp_pm_mp_fail_received(struct sock *sk, u64 f= ail_seq) } } =20 -bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, unsigned int opt_siz= e, - unsigned int remaining, +static int mptcp_add_addr_len(int family, bool echo, bool port) +{ + int 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, int *size, int remai= ning, struct mptcp_addr_info *addr, bool *echo) { 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 @@ -907,7 +922,7 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, u= nsigned int opt_size, * plain dup-ack from TCP perspective. The other MPTCP-relevant info, * if any, will be carried by the 'original' TCP ack */ - remaining +=3D opt_size; + len -=3D *size; =20 *echo =3D mptcp_pm_should_add_signal_echo(msk); if (*echo) { @@ -922,7 +937,8 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, u= nsigned int opt_size, 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 (*echo) { @@ -935,6 +951,7 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, u= nsigned int opt_size, } =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 75c5faaf4486..4dfea209ac16 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1206,23 +1206,7 @@ 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, unsigned int opt_siz= e, - unsigned int remaining, +bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, int *size, int remai= ning, struct mptcp_addr_info *addr, bool *echo); bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, struct mptcp_rm_list *rm_list, int *len); --=20 2.53.0 From nobody Mon Jun 8 06:38:56 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 03A2440B39E; Fri, 5 Jun 2026 09:22:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651335; cv=none; b=IAoP35mcAZ1cfoJTm+SCYgLZCxAbnXHweNIXDrX/FSAsyGU1t6s7wOjj/v4it1wwHo3Wtgd/9NmC1Ssh3sAqFt1GjmAkov4p8s8OZq2gvHiPDJ/pPou976QI95sSXtJIETrFRnPlqSGmEVvxuqcann75JjD7BXx48eHYhM/rIUw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651335; c=relaxed/simple; bh=ioj31fCYdywMjCoiLQi0yNH1ROl+h6WOhuCRsAzTMXA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NwD1QEMws25Gmel71ntXeIuCDCcU+X+If/+G4E6yt0qEgWv9yoaGJE6YnOqs1vRLeU7mqqtA6y8ka2Y4vmvFied7isttDxFMdOJgAwcAoLk2Ptig3ZIk0xseWsu9j/ycny7SETIbLJZKmOcaSl6n8xqNXoD4mJQmdOB7B/2k5lM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Ow6LmtHS; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Ow6LmtHS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 03BE41F00899; Fri, 5 Jun 2026 09:22:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780651333; bh=Jn+jv4J+mnQe29rTKcMoZd4FHc4QkUXPXIUHfKBPrRY=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=Ow6LmtHShkBXW/wE6BvcYW+xmY2AVfjuRlaa5HwGNr1ZnWwtlO4fM4/MMnddOS4ma H3YnT8/LPFDWBh8sKAH9v/sFqryTwlHZztap+ThQ4ImI6qt9AJ6hNpLSLijgclJdSC 7mQnlNf1DVyhTQjUtPvo6ahRzILjNo1bA2/vL7qpnZwzOXgXFSQOwz54doq3DWP2gl 1Jbl/bhZ2C2fJ4NII8IISkHfcMoLEpy0rKclnLNL7zC23ADBRXA/a3KJ0/GmwNm1WT pbUh3sCmZ6G1ZzJAJT6SMYl3TbdCXFeugOYwEF0qVkoxtIF9POhS0HR8Vmivih9zJf JB6J3D+rBMu3Q== From: "Matthieu Baerts (NGI0)" Date: Fri, 05 Jun 2026 19:21:48 +1000 Subject: [PATCH net-next v2 04/15] mptcp: introduce add_addr_v6_port_drop_ts sysctl knob Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260605-net-next-mptcp-add-addr6-port-ts-v2-4-758e7ca73f4d@kernel.org> References: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> In-Reply-To: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" , Jonathan Corbet , Shuah Khan , linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5725; i=matttbe@kernel.org; h=from:subject:message-id; bh=ioj31fCYdywMjCoiLQi0yNH1ROl+h6WOhuCRsAzTMXA=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqIpUxItj0KhvuVum64CQpbFZptgFIjDQm+KnOy 2Tle2qXLBKJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCaiKVMQAKCRD2t4JPQmmg c3CBD/wLdb9bzclZB0PJscIqjrloR3pCPIkpmXmgv1BxfaOUZkbNN35Og7KdI/VDXRow3MTNSnK zts1g/j0eh4408lpdYo8VAyQ4UOqjl6X989nUWd8+PbBFAhwANfFyIG+9Arc74h/EOznkIfZe9B /tIz1tv7Mcqz9oFXQzW9rKi1Ngrh4euesmkJHqTPqt8ov7RwJQRvKg7hhPpBQ3bRzjbHHyRJjTn xQMNBtZbL67UlhAiRSks9cKk/jmHtqyDvm6nvRVP0BbpR9PHXWFzWgYrMOLSe9Drq79IuuF/Gd1 9EHVFnWBgyxI0j0cJ4jHiMbD2BkfjLtbT0Z53MWUnJ62pznSNAIcxm7xLjzGdUDNdhw25G6d0uo B/0fUj2wCZPMs8VgSrbvBP+8BQK3VfDHMf5cKijLGm5dqrPvUwGghUfEqWo2r8fVScI7fsptOcZ 2bJIQJ6kz9wYZzR7JMt1XEvR+ijaxDgKPIqztZRgrm1F8UtDVDRLR8T6ex6y/yXdzqi007O23Z/ /N3RG8budd+nO3s523Kb2yMkkE2i2U+GwOws1cJCfnSF/tVUDttUPi3paNq83X6FyK4J+xDKuZh Id9I6uJOgeCjKTz6ATI1KD6+I6phXLWOEn/s5A1kDDJkBd7Jc6I30/ouTCchaH/OLrJ8WDzO4eq OHDKa69Hhjgqs5w== 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. Reviewed-by: Mat Martineau Signed-off-by: Matthieu Baerts (NGI0) --- - v2: Use READ_ONCE() to read sysctl data. (Eric Dumazet) To: Jonathan Corbet To: Shuah Khan Cc: linux-doc@vger.kernel.org Cc: linux-kselftest@vger.kernel.org --- 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..63c5747f0f63 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 READ_ONCE(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 4dfea209ac16..b43dae72e7de 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -798,6 +798,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 ac8dc7051aae..70d5b26be4e0 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 Jun 8 06:38:56 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 5364C346E4E; Fri, 5 Jun 2026 09:22:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651339; cv=none; b=sCRsyUmGzMIe9F07oAhGVA+8ZBaQn2jrAFHo3AA3Z1xTeef1+UAuyeljXhx5ZOMftBEIwgu65iPra4CZggaPDt9WBzTUiQx/GCQ2eRs9DQsqP1juXW1eJ82dqOQrUPXSxeSLtkvhwiBrWDVhbUtM7iPBo8VmDNauddJcWiMzb+s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651339; c=relaxed/simple; bh=fOK/2EU3xGYR7Qct0sK97GVCqqm3QJlOv3wmiRk1M0E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=l2qqclm6TAidHSmGlK/U/faOqH4MZJnonRsCNzRAbavz2BOKXssGduGpBdpc3/a9SI9s7u7J9uDq960LvfcSfQCeFtKCeUZWOMt/1k1lnhJwUKBIL/Zaw96JeMF6wzzfau+pM+7UpEPkC7hW44EsVc0K2cJGZxUaxkuhNSJnrig= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Pw3FTNQS; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Pw3FTNQS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7C2C31F00893; Fri, 5 Jun 2026 09:22:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780651337; bh=vjABy2vl/03GhfnN5O43LspkuM5aUUA2EeS9WCr0mMw=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=Pw3FTNQS/O1JDe4aYHkQ4AufJ98af88RL0z/m1nf453R2TerDWa3r9ozKQgo9BeDE LE+Zqo6r7pDgIG/PO6epAh3G4VibAiKkctZwj4+pCXIPoW0g01XEmLOANrFZJNWB8Y Ih0QsP9Td5xj8vkI6Ragncs21jAIApyB/uuj7KMVSQnwjPrm2jpWkFCtazXBIkCmzA 7tKxvJSGdX6Ep7ESfJlX4YnlWilPM3J/AKVXdF23sEVecBCSaB5gdsMcJKhoVe2iK3 wsM9MEh197DqG+nsyJAiTApk9MDtcO9cy/xeu0N2/aZzRpxlJYjAUNiEoLZTsKYCub AA2V7VBUI4qnw== From: "Matthieu Baerts (NGI0)" Date: Fri, 05 Jun 2026 19:21:49 +1000 Subject: [PATCH net-next v2 05/15] tcp: allow mptcp to drop TS for some packets Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260605-net-next-mptcp-add-addr6-port-ts-v2-5-758e7ca73f4d@kernel.org> References: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> In-Reply-To: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" , Neal Cardwell , Kuniyuki Iwashima X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6075; i=matttbe@kernel.org; h=from:subject:message-id; bh=fOK/2EU3xGYR7Qct0sK97GVCqqm3QJlOv3wmiRk1M0E=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqIpUxUPqVcurrl1wz5a20yVgRBjZ7azfVyqaFR bcULrKwIwWJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCaiKVMQAKCRD2t4JPQmmg cy2zEAC9b/TnIqlBybcrXyWk3ww0vInnmagzviag6YXRmWmVVCF3dnfzDL4pr+nvnAkl2qqfJOM 5enaTLZ/kRGORaEZbN+2w+fsG8Vvm1hLJe6aslIQxWN5grG3+QmAhqWHavXgPQgi87gqY/jaH08 +HHEHo1smUYBXyEakKlzCjqSAZx8hCiTE85D/vb9GJXm9pvcVFpZf4DxbRVYzsnn9iqjIr6Cp8U 426NkCfg/O+icCid+lg7psYdyI4xJvIqpN+J3oEbGp9KwDMZVESfz740kXTG5rUvqcOKoPCSaAM 77d6NuqVvqRFjA2M2B2yRMtH0kKFrTUH+BNYUKlIjFQlRfHl495Em+CoSvZS/RCLWVBryblbGa/ v9X1xSRnN1wwaGkOENKL85IH+w8FOb+uZwNCNfkg1PRPzNYULhMF5dUmGa1LW2VW45bQn0MPo7o qgryTHinNgR8QCe8DhWdHrOphsDxkJdZxDNV4zATV6bABndo6GgGQfDOEONIy9uN2S0Z/NMPJCy dNXEOgq96h8nyXF72tuyyZsFih6VgPaGe8fkS943/04uTy4Te0QqZ5bclBHxxTYTyYprzS8yt8w Rm24UmGIaFrwxloFDbCSd2rE7WnPRn18JAi0ZIvxpRmTZFA1LjbIxsiC7QPhTWHCYa1I8U/lTIB B/mpMFXOalax/5Q== 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 address signal. The idea is to let MPTCP dropping the TCP-timestamps option for some specific packets, to be able to send some specific pure ACK carrying >28 bytes of MPTCP options, like with this specific ADD_ADDR. 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. The next commit implements the part on MPTCP side, but split into two patches to help TCP maintainers to identify the modifications on TCP side. This feature will be controlled by a new add_addr_v6_port_drop_ts MPTCP sysctl knob. 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 will 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. In this implementation, an unused bit is used in mptcp_out_options structure to avoid passing an address to a local variable. Reading and setting it needs CONFIG_MPTCP, so the whole block now has this #if condition: mptcp_established_options() is then no longer used without CONFIG_MPTCP. About alternatives, instead of passing a new boolean (has_ts), another option would be to pass the whole option structure (opts), but 'struct tcp_out_options' is currently defined in tcp_output.c, and it would need to be exported. Plus that means the removal of the TCP TS option would be done on the MPTCP side, and not here on the TCP side. It feels clearer to remove other TCP options from the TCP side, than hiding that from the MPTCP side. Yet an other alternative would be to pass the size already taken by the other TCP options, and have a way to drop them all when needed. But this feels better to target only the timestamps option where dropping it should be safe, even if it is currently the only option that would be set before MPTCP, when MPTCP is used. Reviewed-by: Mat Martineau Signed-off-by: Matthieu Baerts (NGI0) --- - v2: Avoid passing local variables' addresses to mptcp_established_options not to force the compiler to use a stack canary in this hot function, even for non-MPTCP flows. (Eric Dumazet) To: Neal Cardwell To: Kuniyuki Iwashima --- include/net/mptcp.h | 13 +++---------- net/ipv4/tcp_output.c | 10 +++++++++- net/mptcp/options.c | 2 +- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/include/net/mptcp.h b/include/net/mptcp.h index 24d1016a4664..71b9fc5a5796 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -72,7 +72,8 @@ struct mptcp_out_options { u8 reset_reason:4, reset_transient:1, csum_reqd:1, - allow_join_id0:1; + allow_join_id0:1, + drop_ts:1; union { struct { u64 sndr_key; @@ -153,7 +154,7 @@ bool mptcp_syn_options(struct sock *sk, const struct sk= _buff *skb, bool mptcp_synack_options(const struct request_sock *req, unsigned int *si= ze, struct mptcp_out_options *opts); int mptcp_established_options(struct sock *sk, struct sk_buff *skb, - unsigned int remaining, + unsigned int remaining, bool has_ts, struct mptcp_out_options *opts); bool mptcp_incoming_options(struct sock *sk, struct sk_buff *skb); =20 @@ -269,14 +270,6 @@ static inline bool mptcp_synack_options(const struct r= equest_sock *req, return false; } =20 -static inline int mptcp_established_options(struct sock *sk, - struct sk_buff *skb, - unsigned int remaining, - struct mptcp_out_options *opts) -{ - return -1; -} - static inline bool mptcp_incoming_options(struct sock *sk, struct sk_buff *skb) { diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index d3b8e61d3c5e..26dd751ec72a 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -1175,6 +1175,7 @@ static unsigned int tcp_established_options(struct so= ck *sk, struct sk_buff *skb size +=3D TCPOLEN_TSTAMP_ALIGNED; } =20 +#if IS_ENABLED(CONFIG_MPTCP) /* MPTCP options have precedence over SACK for the limited TCP * option space because a MPTCP connection would be forced to * fall back to regular TCP if a required multipath option is @@ -1183,15 +1184,22 @@ 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 has_ts =3D opts->options & OPTION_TS; int opt_size; =20 - opt_size =3D mptcp_established_options(sk, skb, remaining, + opts->mptcp.drop_ts =3D 0; + + opt_size =3D mptcp_established_options(sk, skb, remaining, has_ts, &opts->mptcp); if (opt_size >=3D 0) { opts->options |=3D OPTION_MPTCP; size +=3D opt_size; + + if (opts->mptcp.drop_ts) + opts->options &=3D ~OPTION_TS; } } +#endif =20 eff_sacks =3D tp->rx_opt.num_sacks + tp->rx_opt.dsack; if (unlikely(eff_sacks)) { diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 2e4b6aafbad5..95f16f9f0ce2 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -804,7 +804,7 @@ static bool mptcp_established_options_mp_fail(struct so= ck *sk, int *size, } =20 int mptcp_established_options(struct sock *sk, struct sk_buff *skb, - unsigned int remaining, + unsigned int remaining, bool has_ts, struct mptcp_out_options *opts) { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); --=20 2.53.0 From nobody Mon Jun 8 06:38:56 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 CA2B141363F; Fri, 5 Jun 2026 09:22:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651342; cv=none; b=kg6HpcViRZCvu00vkAowgHM+9oFvhrjbxUE8XSdPm75SNu+AudbUTzqq3rw4w494NOFBMuLRAooNjLaiXYVVWoaps2Nm65Qc1go2hkqAC/RR3EEafVrkwiD+HqUJ0Mi6zN+VvH2pJg5WuVkuosExVXTGrn5j9fpA/4erezOh8Ms= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651342; c=relaxed/simple; bh=pYUkzT9WMoF0Fxo9V06BkLXOTqCR+8gXIQfe1jfof90=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OSnDXP7LZ2u3oJC7yhdIhp5zt/HcRzdkJXETahkQFFzk+Dl1bMF9kJiAVMDdVwb+4a/XS4oTogCLpaZnQf36J1sz3o1GoE6f0IbwDcCCBg0ThPMBWtIsJ+gSkn0qZ44FDZl/8IAx8uWv8h9+e1ahuSuQcbz13LPGFCT/dHD4Zes= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=djvla8S6; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="djvla8S6" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6292A1F00898; Fri, 5 Jun 2026 09:22:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780651341; bh=T7CznXCwJN4JIsW2d+nYSO1H9p8u1K/xatXIxIbVb98=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=djvla8S6/eV3a6h6ONEQInQKybgpZP2HW5imvPmHA3XLeVa8/XnMIKxsuNFDmqPrE CazA45w0jM5o3/lDldOTXei6z9yXwzUd8ndHKimthl0XddaBysLuOnwEiSW07M1CyM o+t6+hqdLnvhT3biXpCRJtgbFW2qs7Cx97+PCNHibtEAOJ3g8wLTkQsyjeewLJOUXF 6xOnByK6qkso5R4rMEx/E+IPmC8ssTjl1NhsnznbourSU2ymyLeuEutjiIhTBH7FEx 9imT1tJSQl1GyQTGerjo6dQLByGXt5egEUcGCaQlO+ZjLa/Xt8dvWd+u2xzon0bs6m oacxZkPGrnHpQ== From: "Matthieu Baerts (NGI0)" Date: Fri, 05 Jun 2026 19:21:50 +1000 Subject: [PATCH net-next v2 06/15] mptcp: pm: drop TCP TS with ADD_ADDRv6 + port Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260605-net-next-mptcp-add-addr6-port-ts-v2-6-758e7ca73f4d@kernel.org> References: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> In-Reply-To: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4760; i=matttbe@kernel.org; h=from:subject:message-id; bh=pYUkzT9WMoF0Fxo9V06BkLXOTqCR+8gXIQfe1jfof90=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqIpUxH9DPglVd4x+1BOnTqXfRFGs2DP4F7ArGM LhBdllG4bCJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCaiKVMQAKCRD2t4JPQmmg c1oUD/9hulPw0qSggU+pngwpONfohasbEBgvOPYjwe+GHLVr+hFd3GrGqF/t/vsIIQ2/kfO0wxC j4H7Ewh05v1Ps8SaoY4NtkdBa/f3qtWMRIkHcIri7SIK8GX7OAraLHtsle83la6o5ysKJPFfwxB HCviTWXl7uMj4timKUOMlA1YasBAMsz+puSAxwfXqu0x0FO8J9GeWipwY9cKXIDR6zNbwFmabxD YSe1/l3GPT1J+uzSaGBD9BHiIUPWVTtTEGjEiFGMUNrMRqMjMPl4HLVtKM8V20ffvZfbo3oZAHQ uJf0AUcqpeq6IqkcqqwIxejDJXutnMvpkdKGd1MMJtWBJe5Ol5Ww/8d9DhADSqPRNwHP9FA8jr9 OKePE+yYXc7RiolxpNDV9OD5KNAJwD6+QNvE+hjQeKWZgGsR2BgIOcQdbHC32UUoVRm6hS9m8xf 7AjyAuSYmTPpQuV9gpLYaEybN1We9h/3CfmkncPfwxesYrVCKXGWSiLBzEUQP+DNLrx7RLGnTL9 cb4bjf5TD0pSSu9Sg0fXE2S8oC4tP8JnSwLVjhWh+CzFYh5QzoJflhAZNXI01glHZJ4jgUpJiUj dkHDJxTmxq/TfgMYQalqKTW88vieEQod3R1qMXCRPBwtzpOAlsnRY51ssqKPZrjIIkVMl8e/VZ9 djePge0eLx0izag== 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. This is done, when needed by setting the *drop_ts parameter from mptcp_established_options. This feature 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. Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/448 Reviewed-by: Mat Martineau Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/options.c | 9 +++++++-- net/mptcp/pm.c | 13 ++++++++++++- net/mptcp/protocol.h | 3 ++- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 95f16f9f0ce2..8d0680a588dd 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -659,11 +659,13 @@ 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 has_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); struct mptcp_addr_info addr; + bool drop_ts =3D has_ts; bool echo; =20 /* add addr will strip the existing options, be sure to avoid breaking @@ -672,11 +674,13 @@ static bool mptcp_established_options_add_addr(struct= sock *sk, if (!mptcp_pm_should_add_signal(msk) || (opts->suboptions & (OPTION_MPTCP_MPJ_ACK | OPTION_MPTCP_MPC_ACK)) || !skb || !skb_is_tcp_pure_ack(skb) || - !mptcp_pm_add_addr_signal(msk, size, remaining, &addr, &echo)) + !mptcp_pm_add_addr_signal(msk, size, remaining, &addr, &echo, + &drop_ts)) return false; =20 pr_debug("drop other suboptions\n"); opts->suboptions =3D OPTION_MPTCP_ADD_ADDR; + opts->drop_ts =3D drop_ts; opts->addr =3D addr; if (!echo) { MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ADDADDRTX); @@ -859,7 +863,8 @@ int mptcp_established_options(struct sock *sk, struct s= k_buff *skb, =20 total_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)) { total_size +=3D opt_size; remaining -=3D opt_size; ret =3D true; diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 59dc598d343d..ac7de4141738 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -903,7 +903,8 @@ static int mptcp_add_addr_len(int family, bool echo, bo= ol port) } =20 bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, int *size, int remai= ning, - struct mptcp_addr_info *addr, bool *echo) + struct mptcp_addr_info *addr, bool *echo, + bool *drop_ts) { bool skip_add_addr =3D false; bool ret =3D false; @@ -941,6 +942,13 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, = int *size, int remaining, if (len > remaining) { struct net *net =3D sock_net((struct sock *)msk); =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 { @@ -950,6 +958,9 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, i= nt *size, int remaining, 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 b43dae72e7de..e69fcb4d48af 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1208,7 +1208,8 @@ static inline bool mptcp_pm_is_kernel(const struct mp= tcp_sock *msk) } =20 bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, int *size, int remai= ning, - struct mptcp_addr_info *addr, bool *echo); + struct mptcp_addr_info *addr, bool *echo, + bool *drop_ts); bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, struct mptcp_rm_list *rm_list, int *len); int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); --=20 2.53.0 From nobody Mon Jun 8 06:38:56 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 1769F4C6F10; Fri, 5 Jun 2026 09:22:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651346; cv=none; b=a1WDhMa+Qgguvowh8AZlGPrOvloWXrKscaD3RbmIhK5XKjez/FsQhOtIJt6VbruZKh4rCGN46BcukEnyKxN4QNGKEKFbHA6oMssUyKYj3uvT1j7gjX/p8VIfRJlhTOS/VuQY15Dkz8zUJIPmP15HDZhlOiRu8LYLA5f38wNU9j4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651346; c=relaxed/simple; bh=CjXL5/8/7Hb1P8HDY6vD1OstvudZM0ZnMlfKR/jru2g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=q/hko4hSojo/QHyhWe/ncafTc6e4BjH54XCOl3MEsyn7Y4MU7stjj4LaKX5+uKLBkhf2AL03najk/KUb6mxHIBIrJe+47p/V3X9ANRN265JzN8VHz6mfQcR/BLBUxGTDVmNFoN2ssRnsCopvItACG+WcWJqRXcurIyRmFqk5pt0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=G/HiQPj4; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="G/HiQPj4" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E1CF61F00893; Fri, 5 Jun 2026 09:22:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780651345; bh=K3bZiqv764PbsLbkRIRrFv3ZqK/WkJGz8mKHhPf+RUo=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=G/HiQPj45ely+abCmjIqQC6LPBTRZmUucaLjGkpCPY1s8KMpQetXmWRVLwd3+yMnK 35yiPyHcGdCOUlcVkuLA7yH7Qu6Fng4KTLPwTWWr/sKX6ZqGBn1OsfZysqGlAL/MCS Jiu10HE5VGfFnLA5QdyD9TpRi52zRw7fzHZax+0iWlNCE1ezQTq1kg2cKvlK+GWpy0 RIgkWIx9lk5VCLNAh6fjYLP9zfLYgELhlT+YAhYDKEmkO5KILdb9gIMnlVIc72nEsv /zGulQQYt0DxBUE2vaIYnGbXVa4lFyl3EPSaKi8O/blrKnjIs/bqw4Evb6NSUJqoBN BGcoMwozzLJzQ== From: "Matthieu Baerts (NGI0)" Date: Fri, 05 Jun 2026 19:21:51 +1000 Subject: [PATCH net-next v2 07/15] selftests: mptcp: validate ADD_ADDRv6 + TS + port Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260605-net-next-mptcp-add-addr6-port-ts-v2-7-758e7ca73f4d@kernel.org> References: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> In-Reply-To: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" , Shuah Khan , linux-kselftest@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1620; i=matttbe@kernel.org; h=from:subject:message-id; bh=CjXL5/8/7Hb1P8HDY6vD1OstvudZM0ZnMlfKR/jru2g=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqIpUxM5NRLQuTAUE61b9T78riOefcRQRP0E4aS pWiAiNZ06KJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCaiKVMQAKCRD2t4JPQmmg c8pSEADfrye0bd7EMEhd9dvvuylvfymPjlCmZAF6DZlKBVN3egY2AbtF/kF4DDwctHLD8ikWyRb x0ze92mcr0Jvp2WCKFVXRC0DqSDX1Dv7leSU2Y3Rsbp+PipMch0aM4zU9bFu8sb0Kwz9rTBaL8C JCmJOPGIIyZdTBeDvhHiCZbH+qYyNxQ1wSE3hdeVuE8OT3l6FKQVMG3WfWxWe4YBFA5erBhskpI ulUVaGd3S7D1y1fTFGI8PBrvULDWuaTTgPYig2iJyDfYPqR9lk3O2sI8uSz7xoUnzm+Bcl3IRTT AgoVTxgRMaaaafzLD3vufIRQ9F35bRT6AsDHrJUibZaS3HEecio6p/nGnSjAsDUBMk84I1ubT/2 CUEfLrpqbzVNIHNB+zxCo7Jx18Z/CNUMLkqtYL943z2qUK/z2K7S6YXxKEFbjzi1Ud7EoNrPKSw pgrOlLyxfA8TokztRDTOoluE1PzB433mao+qmYX8CcXflmxxKBnBu1cPwsGQn6NKcBHGmma+M8a isuZDKUQf9GuN9Bg5BbCv+yNEsl5QavWxe3pkhs7aOiBt46UtNsYTtbjCQ9oqdzLc8Eqg/Idc9y K5664CWIECN3wggyLuEN9gF9toCRlnlbHjDEXuUkzR3f1ielO9lxSDOc4PfWg/R9XEVsDWzcG3r Gg9zN2K2iKTEECg== 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. Reviewed-by: Mat Martineau Signed-off-by: Matthieu Baerts (NGI0) --- To: Shuah Khan Cc: linux-kselftest@vger.kernel.org --- 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 70d5b26be4e0..6aba8f97275a 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 Jun 8 06:38:56 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 47D924C6F10; Fri, 5 Jun 2026 09:22:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651350; cv=none; b=puFH/gg+rZM48CxfyYO6/w5LdlzCbqIvc8VPhRP2lxfZtY2AJoF1q3OOd0pANDbxqBIbsBif8cFhaP/CZ6UvK0y8mMAvBRdDOaL9cdJhQ1/Yqgiz7gOJtOVWrc6BxLEwO6NAjUiMckmQojbry+AUcV1zP0bNS/0ZeF2LNg/pDq8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651350; c=relaxed/simple; bh=NPGw4X4fLrlXq/IXuaSruunQE9lHk+haQqHodKLaRR8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OVA9UobUgEOdvX8/0+g05PMjZ6sFNohl4V6HTtN0urUOK6d7iQmgqSndfBs5h3vbxgu+GTlxI4K71GCu0D2nJ7KJN5jr/+2pCIcM4QDKogNQ99W20Sa+KSU8vaO8XJDBzp2BCqX7nB7bG+me5a1xEC83hT6qMWZt/7VjSNeu8NA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZvUqLoAI; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZvUqLoAI" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8AE6A1F00898; Fri, 5 Jun 2026 09:22:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780651348; bh=LNzX65lRzjXqN9lAi3wGCZ2iibtzhSOt0UHLMsdmBLU=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=ZvUqLoAILNa4C1cN8OPLmXkDqvdsLK189c17BRPWbM3RggQ3A3/46xwdTJ+PFs+Mx 9IQCthGxncDSn6D5HSHYSWkVWldyihs7v8iyRkJkOEArGqaxBqIohHUUEDKNeXow02 XfoU4M9pIP5JSF3b2nMu9zzaCc9uKpzFu24Hoe6/jGLrJkmbdpz+wy4dkbRaG+MFaO AVtEGthTgKr8HHJWLqFztUcmsQluFNuStG5c1CA7eCUOwwu4ZGTL1wN7OgWVSVDkCL Cgxf6Gr1JlIpUUazXLgYDgiA8zaCsuBxZHfNlWvyxeH+tFAFa6xNABx+mv3cIIS9Gd 3Y0TfdLbxATCw== From: "Matthieu Baerts (NGI0)" Date: Fri, 05 Jun 2026 19:21:52 +1000 Subject: [PATCH net-next v2 08/15] selftests: mptcp: always check sent/dropped ADD_ADDRs Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260605-net-next-mptcp-add-addr6-port-ts-v2-8-758e7ca73f4d@kernel.org> References: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> In-Reply-To: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" , Shuah Khan , linux-kselftest@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4991; i=matttbe@kernel.org; h=from:subject:message-id; bh=NPGw4X4fLrlXq/IXuaSruunQE9lHk+haQqHodKLaRR8=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqIpUx057J4XT78k2Rdvqx81dB8e0+n95DMFEln voRanuhbIyJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCaiKVMQAKCRD2t4JPQmmg c2QjD/9lAmZRdGddMRA0ucOeKK3uIWl8bGmVnhVzWHNBxgHoPi1FqEJ9UHTQlUZjTBXslFiJYdG iwOwlVAPo9FkxQo/yGYYK4YThkc7eBfMQhs/Wk01VwYCnQuUNDAEC1pF1UAW928VNTpPc07XseD gzPLIPlF4JXqu3DMgIdNGyjs8KI0mOMWJScJwXqQqGDzHp27fz1PGYzgKHNXrZMN5fAvY9Wx5ef dVWJEiuCYeK3nbRT7Ad+rqzJttbcw5chMIZYuB0WX5rp3BP4aZ/ZWD9bZX6jtusa+yCbTe3Gd6o Bn608RpuS13OGdGfK4IHFwVl4S1GDUoHMYnG8a/hJHUdh8KJus2mnS0BD5Fy/5bNbVBbHy0xVMU lsq3GGnMd3cEDe9p+TEE+7QyyAwSd6wqoilyffmyZ22p+cS/BXmIG3Vs5x3fKHslGMW18GgK9HD JniKeqSLGnPS9eHiD9F96Lpvexyhcb5ADv6kG6AMVghHUjmUU+LOz0mN+vUFNJIAWiQ+QCpL3/U H2hcfKcYaaxSlrNpe+4KSgXLqEJmdqJGogXQs8doA7//F6odKINe+ETAJBgKrfPWyKJWnys2bo4 HBbbnZgaHrfomfzwEM22JPnDFGBb7cEqLPCNijCeanU1H2ywy1cjzjPcJoTTDBm19WqkjI3wN6A AMVlroCzs27ixzQ== 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. Reviewed-by: Mat Martineau Signed-off-by: Matthieu Baerts (NGI0) --- To: Shuah Khan Cc: linux-kselftest@vger.kernel.org --- 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 6aba8f97275a..c0aeffd5cb71 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 Jun 8 06:38:56 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 684294C8FE7; Fri, 5 Jun 2026 09:22:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651353; cv=none; b=GPKeQxrMKatZ2RMl5yk/HWUgi66sOILqcnEEwVbpladBcnNyrqGjElC9ShTPnIECeRs2d0FKodE88BDZ0SJlOYd4h0kC5kSbdHyz3yI8jHZn/k5q1rsJBkzKrVRKz87eSBTCsWGulOmM0sCWxz9Qfc/F3ClehnK1i9Y8LtT07jU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651353; c=relaxed/simple; bh=NWdWRgUPdLZ/TMOK7lPB2Vbn1tWwagVGX/sjKI2sOvQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cP/zLVlhEmSX/RzghbytpSGh0Gkam/TxNPpu4CIIBTSiVZjPbXjJsI5UhShD8U66nl/0b3p49EQAPLFMMJ54bd2l/68UVaLzUiL6V06d/626uL2cjZyL3sQIxt0ogVhSCz5Emd/otN4nDVfl1k503r/xVQWwziMToC7Tfk+429c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=IM2buOX4; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="IM2buOX4" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8AD2D1F00893; Fri, 5 Jun 2026 09:22:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780651352; bh=q+H+eN5PkQlAEZZ0oef9i8ESFlL38H8XYzrcLI6JsPw=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=IM2buOX4aiPJjjZYOnyX3CHUsoJfCat6/wFbqBZDWLMZZXvucOXOr3TMv/RFo5DTn QpAl2fclY/BiuCO3L/UXBEBqC+NUnsbWuBlcuEP7+LIajUIC3RKJlwf+z5p6xJhjiQ LfjhXVmd9A0PGYDI5MYsAu4pMRyBwIs5nYGwtumD671CdLIxoMTV8N0FJtp3Hr/rpO PVtYcd6rP/6QdUrtPdaULvRI+TEkI04bDj1g14btOmey14tY8ONQRF4EEMBPRdbUqA tNa37Nc8vs44fIICHZ+Rv6q28xtY0CuGBcI6Kk1PMh1PW7nupFX8stjbjZCe20B1Ip ZINIWAx5kWoug== From: "Matthieu Baerts (NGI0)" Date: Fri, 05 Jun 2026 19:21:53 +1000 Subject: [PATCH net-next v2 09/15] mptcp: pm: use for_each_subflow helper Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260605-net-next-mptcp-add-addr6-port-ts-v2-9-758e7ca73f4d@kernel.org> References: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> In-Reply-To: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4909; i=matttbe@kernel.org; h=from:subject:message-id; bh=NWdWRgUPdLZ/TMOK7lPB2Vbn1tWwagVGX/sjKI2sOvQ=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqIpUxmKXZPDX+cm479KlTWfqkecljGebPeau3p 1KW8zNbqZ2JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCaiKVMQAKCRD2t4JPQmmg c5oAD/4iGhHt498aILHw6V8o2VUKOXMuENgJEU+BcaUvsduX/AOZzlC36XA2hakXXMoeTdmlJYc aTBayT7xTlvwjju/g3JJjUa9aZQ9Bs+Y7Nh0ZBpVbb8xEv9oXfaZuB5LbEXd/mr3/o/GY9W+U2l 20+3rVu5P5E1maa1E6Vkzgwz7KCy6XNe0qq5jWU3Tpe0sb0kqL6ZNoZJKXy0KCcsIiWR+uuUj+x WwZ1oiVQTknBm25/+vV6lFTdOqmz+W5lnDAFwF+3i3b5ZmQJjnl7WexQoV8kG3shsQHQPmvZmD1 zcdWx0S7aDk9l2v8fQi1vxEimvPatwSsA5sNpCYgAlRS9z76yaId8vqnhxM9MVxY3xkzHz+ZxO7 agJSEsIrG783bDdboAj7YgVPwRfoz+Wl5pU4bSoyvAV32YiwjhDmY87POgdnFBeZVi3Om0KbXpO N7//mg57vyU5O88ONYd7/XG9Aa+IeAxSOlBx5WnADI4po3o4+9sUac78C+O2Nac+q9d4Fu3IaQ4 nRGXdOgTzs9zjL/9LearIcjkrNyZVay8BHu++yrW7qVgC7Ome73I6ZIycSEu5mhIE/+7wZE69/8 1A0FXNVLGIwjrAxUjNx0sps9uH3NoruPaL13JWg/5aQ1miIjb3JuESJeNzeisfzKquG9NUH4468 dueph70/w4ZOv+A== 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. Reviewed-by: Mat Martineau 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 ac7de4141738..09fb64954351 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 4ba4346d7adc..484f99a9c5b2 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 */ @@ -1098,7 +1098,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 @@ -1236,7 +1236,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 0d3a95e676f1..b2b74a339d88 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 e69fcb4d48af..62d37d5c63f4 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1136,8 +1136,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 Jun 8 06:38:56 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 AC1664C901B; Fri, 5 Jun 2026 09:22:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651356; cv=none; b=UI0nQ3XdzY7gKih7DkbC54uIemW6GSkc04sawTs2RLvhujCYV6rm6KhQrn7cwwomWGG42/LVI2weAqfL4PsCRI87+jTt5ryM49J5F07AB2F5UtYpVxWew76p/e6PR2ABCZPocEUZg+RSmcNP0RBNgmBuLdfesJJLUwdYwSo8UpM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651356; c=relaxed/simple; bh=9181yk0ayuMVbgJ69zukIsGR51jBPbyOjkhivphxgxs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=P4bcXkZ2MMJuSHmuB3flV721STrJiFFRiuljTJm04KkTqT67dlYlc6PHx+0QYcSanu6MdmsA58mrosXC2PtHb8xWmHQFexJvuaz8Eej804hli7/7OegeLI56AIX/Ua9StknFd2NYPTVJ2O4FW4qUWuG3SugZ5mw4B/8i8BtEofI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=i1Rik7rL; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="i1Rik7rL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CEEDC1F00898; Fri, 5 Jun 2026 09:22:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780651355; bh=Bh9Fy5epNwKTbczwKcjUFpXak+cZttJmj6KWR8ggP3s=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=i1Rik7rLC/fgk3Au1w5/suwtBeXo2HXnw3vwZpXAFXJCLBop+9EEqAApzUCqwiLXv 2dw/Grzq3ALNxg2uuk0wYZBxOUzPCy4O8ms7m6XasqgXEuazrk0t7G0l3z+N1zoR6l OFHCOGuLq+C5SmD7YiUuXPzrAADeuCkwRLr9VPpEL9N8iQvzidPkLMIcZv6Z890zXE QFmOiSzSKXgFhj0vDThsyCoZxxNAlGIuwmdwrnM4er8MQ8WW4ep7p3HoU48HBrwBo4 d6SLfgDKIZo0KxOMHqKmrSPO1p8mRvztO9sdLTSmNMY9uh6z1XqeF4bKB+iGAH+UIJ MuutVWj+xtFPw== From: "Matthieu Baerts (NGI0)" Date: Fri, 05 Jun 2026 19:21:54 +1000 Subject: [PATCH net-next v2 10/15] mptcp: pm: rename add_entry structure to add_addr Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260605-net-next-mptcp-add-addr6-port-ts-v2-10-758e7ca73f4d@kernel.org> References: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> In-Reply-To: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4014; i=matttbe@kernel.org; h=from:subject:message-id; bh=9181yk0ayuMVbgJ69zukIsGR51jBPbyOjkhivphxgxs=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqIpUx/QSRwSSrNVj/y933e3BF2zdT39fmUplBn liHmCQcIreJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCaiKVMQAKCRD2t4JPQmmg c3adD/9HJ6GWp7xYY7utb53tTRxOOfQDX6spAFjHoJXTQFmPThuwbtABpQxD87XL3bgulVlMxov q6RIs8hsJVHeuvps2W/9GMWyBaHvXZsZr2IHoXQA1gxAFEU/kMokr8qZMWazJcTZYxVCQq0+L8v D3wDVaziobHlx8LDBdROaOBtmuXc244XvFSyVzH7n+0+z6olS2CjT8OQx9StDJZdupnsyQGsasm T/7k51ezdfS277uotIjI8AzpUZUh301dkGezz3i2+QBDwU3cCwWta3c+U6n3/OLZAHByS4xWC7I Tcmkt2LsbEbdI9fv+3h1aL6WwuVt74y0+A3Ao89U8yJnpAFscK1Gx2luWL95fRRf9ea/AzSjEke 79hCzmIFZvZXaQeOf7bcoi2gzxNLwGXRdba0qrlfFmQUIl7PklKnWBL5bxrCDzzLdnuflDS2+U0 EK/tJb3vE8YotvOMb9OvO50XUGLYLhxcyTchZjj/DnvUVZ8aLypkqy1x7KQ3YS9KW9NCxi2tCaZ K7faX4NyoyrtKgWNKN5cnL8UwKf2Eitr6d2qfYf8m4uLXSITC+ZoTqj5VqW5FFTXfMD77FyWBY1 0W/vTz6kf+XE/69TSouKiMql+rQEDTaxCBjS58gn9ZodSLyEyUTgI29bp7zjd77qlpnMC2R1z8f UT2c/PUmvcO6Iow== 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. Reviewed-by: Mat Martineau 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 09fb64954351..cd26505cf41e 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 mptcp_pm_add_entry *entry; struct sock *sk =3D (struct sock *)msk; + struct mptcp_pm_add_addr *entry; bool stop_timer =3D false; =20 rcu_read_lock(); @@ -434,7 +434,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 @@ -471,7 +471,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 62d37d5c63f4..f3c2ab71737e 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1133,7 +1133,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 Jun 8 06:38:56 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 F259D4C957C; Fri, 5 Jun 2026 09:22:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651360; cv=none; b=UwgiT2zeoSIbwmsK80hmS/SUXWY22WQHWNZ+S631IcIhVvWaM9bbFVDQA9+A632qRwwyZJBRkI205Ln8EY36PkjjjzSwVHKwNCIlrtGLW27Roa/VF0wz5eWdFP3ZHbMcSMC1L/PV+MpTQYyaBa7y3fu+3vJgAjyo3iTu0p4Fcng= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651360; c=relaxed/simple; bh=LZeEoYNgT99CcGAKirfMdE7NKXigceEBv8bywHOs4gw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Sjx4pqWM+p34/5af26DkTE75P69bwXZwIIK0Y4oqJnGQfTQ4ZevZwk8Tnc+bEfHA2HEI1/x3Ktxy5sSnXHu90+TfyxNZ30nRvKaKbWicWk4cP2ctI5mYLVoP6tektqwgDj6p9wLGjVWEWMgr54IynDuVvVHVy7bcs6CbvemPpfg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lYew0oMQ; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lYew0oMQ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1CF0F1F00893; Fri, 5 Jun 2026 09:22:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780651358; bh=tHUZVl7qR6KRFaNXgE9huWWihga8XLOk3Oq3osZekcU=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=lYew0oMQnOs6mrzWtamauPT1gz9Qa6CNDKwyOiKWOvdCLfyaXUPru4TPoZoSPfo1n AeKHTxg9nh9oCyiNv2X4XdlaK4AkHS3kxCE6z2msHBK+qpy+HRCr7M5SLAkp4oCqNe ysF8kVygpChtuxvp6A67oKUP+MsBdlvBOOKw2pYOe68GopKwOiKOS2bqRuKgntjPoH RKZYzjtYwDwIcNQlcbu5Jt4MTy4XTIpX3hKTOREOWinZ0P8+GusOLzxD4vyBUWd7m3 JMbE5dVCTn+kLIDFSq00oMTXoCMgB1MXUPmfTe2q+ypueoQNaugPf7QQklCRG7ClO8 4EFTWutcBoNnQ== From: "Matthieu Baerts (NGI0)" Date: Fri, 05 Jun 2026 19:21:55 +1000 Subject: [PATCH net-next v2 11/15] mptcp: pm: uniform announced addresses helpers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260605-net-next-mptcp-add-addr6-port-ts-v2-11-758e7ca73f4d@kernel.org> References: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> In-Reply-To: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=12036; i=matttbe@kernel.org; h=from:subject:message-id; bh=LZeEoYNgT99CcGAKirfMdE7NKXigceEBv8bywHOs4gw=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqIpUxPMn5ggrAQiu8H/RDjlkMRVBrCbtX6Fw/r fqDKPqvJ1iJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCaiKVMQAKCRD2t4JPQmmg c4FnD/4uNGuVI/9YEP77W53v8MczGM5Y43W8JaBWzr/E/oUeVtwG7sXO3nQGqBlblo+px24MPCj 947y33iar+BiONfGkaCRZj1fWLUj7zEYUt0fe11upB0yM50pOZc5M81GbpOspcajx28RBBTbI+f xSFK2kU400PkNrVA00Oc6gdv6Rl3PJQgGNpnro4Bx2eS8M9UloNW0KpULi+jWLkBy2jQVIL4R0/ h3rKMlNKyOUxh3dcqeBev4xCkI5lHmkNVHmO9NL1xAMKggPBil7YyuuHSkhid3ECc8s/P5CdFSj kRKWpbTDOhge4nkw8shXoekd9MWYLjTfnMZhjsk9ZD5M4HJy1QsZotHJbEYA6mQr1cZmT6Dey+d /pvJ9JLQHNImvpvE2J0pqZiOt3KIGkwYQijN2SojO+V59io+nI94vX2j4HaGnbvcX9gsjzLUqQZ BnkgJ6YCIqSQs5X3xcov81/5SCJNYaz4IhVlgrp0WRPSzwuZstIvFcjkUvQgZysa6AGmjGk9tzf pWEbQOcIUxa2GOh2BOca4hkpInO+UX1MboKV2vH+NoCaZF7bM9LsPx4qVPvn/y/F/wtzxiQK6x0 oXdnG/RCprlpJDUVgdRlzvPe0uu1abgqrdCXDYSgh48QeHIsxdXsHYF2wh1VPSHSEfrI4PKhIAq G8eFeTO90baX3Lw== 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. Reviewed-by: Mat Martineau Signed-off-by: Matthieu Baerts (NGI0) --- 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 8d0680a588dd..4215270bfba7 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1183,7 +1183,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 cd26505cf41e..197eaef62015 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; stop_timer =3D true; @@ -431,7 +431,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; @@ -440,8 +440,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; @@ -469,7 +468,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; @@ -738,7 +737,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); @@ -975,7 +974,7 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, i= nt *size, int remaining, * 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; @@ -1139,7 +1138,7 @@ void mptcp_pm_worker(struct mptcp_sock *msk) =20 void mptcp_pm_destroy(struct mptcp_sock *msk) { - mptcp_pm_free_anno_list(msk); + mptcp_pm_free_announced_list(msk); =20 if (mptcp_pm_is_userspace(msk)) mptcp_userspace_pm_free_local_addr_list(msk); diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index 484f99a9c5b2..424f1a7f9248 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); @@ -1053,7 +1053,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) { @@ -1062,7 +1062,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) @@ -1099,7 +1099,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); @@ -1239,7 +1239,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 b2b74a339d88..d100867e9202 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 f3c2ab71737e..8bfb351c6257 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1130,16 +1130,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 Jun 8 06:38:56 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 A15034D90BD; Fri, 5 Jun 2026 09:22:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651363; cv=none; b=jvwujPgP0rwIcpKqRYAFZfgOuZQzEjhq9lPbJBXILL9nDNv9myk5hLwnPLhpXHlgeDWbKNM7Y5X41wXM/otw2r6QbTM1PYG7W+HLSv8r/pmwrNQFJYSp28D3tp2O8yynaHFf+SoCLxsJj9LcNW0cW+x2vvKxMsVL2mKPM/hIBt8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651363; c=relaxed/simple; bh=kx3wUfZ1EVlw2HMCMBGuzHZU7pdK3GTyZy2MTBgYjdY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mDKtFwZsB87iO7nAzHyfWPFlnd5sYyHqaj82WFrF2McZMcEng4yAiD/MKLXf9ll8sVsroOmHCIYBwTEBl9pX3z962DXiUW+rSY5cVZ7QhKpYQsm6oZ71ARmevWH7rQ6N/4asyJx5+P8uZ42vv6PbPp/+/DEFG+gRf21Ip+wQh/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=PaAf7UnQ; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="PaAf7UnQ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7266B1F00898; Fri, 5 Jun 2026 09:22:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780651362; bh=ZkavaiGTbAkAorfMrFmYUuRfa+RbAT4lLyumGqeRxSI=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=PaAf7UnQPYiGezcBfFZ2s8cD2eHlXAvRwswEmoPwei/E77uWV3yjX2+ppl2PMF9qW iZpxmpUuy7s262XbE6tE6AG3B9PHOTfLZt873x34OsRLvgBdgoOFP0f6VrHjNARuUG dP31mS1A782QN167tB7u2z6/9p1o+c24716TW4YO5REnATnmvmB4eYLnaRhqVf4Y0l eGpn4iBWl9fldL0YhnW2WpLSuaFGVDacWiVd9c10nPyL5yS6yIyYVDbIa+4rO4NuhY Exk19zmQYqgIhKlLXbBx2lMagShf7JoN/x7cI6aWVTpZFXpu0Zbgw9tClB+9qPanSp r4hPR5iXhMhnw== From: "Matthieu Baerts (NGI0)" Date: Fri, 05 Jun 2026 19:21:56 +1000 Subject: [PATCH net-next v2 12/15] mptcp: pm: remove add_ prefix from timer Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260605-net-next-mptcp-add-addr6-port-ts-v2-12-758e7ca73f4d@kernel.org> References: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> In-Reply-To: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2753; i=matttbe@kernel.org; h=from:subject:message-id; bh=kx3wUfZ1EVlw2HMCMBGuzHZU7pdK3GTyZy2MTBgYjdY=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqIpUx4W5YN9IxM+xvEs2JJrmBCmAbttGmGlu7E opQ5zTKCA2JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCaiKVMQAKCRD2t4JPQmmg c4KJD/0eqFvSAGjYMjxXWb0Sm1uYSn+sX1KcyfDCkVpVssJDsk4hNzfP3U5oTbGzWw1nlYUwXLi XOSK5E/wBNUKskflyk9EhSWxqxuhfbEi0sfloi0Bn1NPpv14XgsExkQmNXQPTUlmdTsZBrFhSMp ICsQGMhgfsvUqq4g3crN+2ZdS2g9qC2ygGPH/ot1PsSm+oFsP4ZYOLSi5I7deENZo7HSrVQk3ix 0eUKlQVf9bUA4upGOZM9UbFR1J01nKrsHJt6i7sNwbKVJbI9+qKF75KTd0niP/olMvDgTIugQoW pXArbnnESnLmR+rgCPVin6hbWER2+9sfs9vYw/kLEAZxbVfB8xc3guw2S031pyBEuxvCD+Vfd4p PVoY6u8fU6spzErHDfNkDMcFlaPxhJO8ykF8dr83E9uXfugbnA73vw8id5d0zYVoMkJn1g+dlG6 1YzgShqCEHZLn+fa516caukjPJcdOdKBqDj9Cmotjd/S2OuC779JZj4pVJMo0TdbmPpJWWWksmO bZqj/XXFqLE2HLkCFwMPdl8RezGc5H50YSyZFG5iRLCPGZ5KQgX8QUgzOHN7QMOqLfLJ0sPXwPs MIfXrfUK++gKv7tOXdynqsBksqg0U348kTgaUWsjh11n3UDttTZgEFeOzeTgN+k7w/RmhtD24d+ PfcQaN/wKXre6Tg== 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] Reviewed-by: Mat Martineau Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 197eaef62015..684ae8650c19 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; @@ -422,9 +422,9 @@ mptcp_pm_announced_del_timer(struct mptcp_sock *msk, */ if (stop_timer) { if (check_id) - sk_stop_timer(sk, &entry->add_timer); + sk_stop_timer(sk, &entry->timer); else - sk_stop_timer_sync(sk, &entry->add_timer); + sk_stop_timer_sync(sk, &entry->timer); } =20 rcu_read_unlock(); @@ -458,12 +458,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; } @@ -482,7 +482,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 Jun 8 06:38:56 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 AA9013B71BA; Fri, 5 Jun 2026 09:22:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651366; cv=none; b=XKAZG3uUIzamJ7ZSERoMvNbfxi+xGN8FzojSa8mnUi+Wk2jHwR8a/RbGLuFRmYHvHbLgQ8Ave5+4j3iIKUnEhFzF8RYZOM+6l/niz/gOdt/4TC6zfCE36FvKi31xpFuAgfTqZINgNUSc1rJPvlUXCYr5UxO1Xv200O43wSXruwM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651366; c=relaxed/simple; bh=/gOW798p9PbuZvLJxhjikWf4dkHbOBBv+JzfTgGjaVs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lpBcKAy9jTtDIo+tNsvN7uOyOOUyIkMkEvJleVVc6rDr6suxQLP5ToYavV+Spfn9qMGyrsbq31VIYPdAw/U/2DqAsDlPJoysBpZ7Vn6r5Jla+kC7+yN4eXz5lnj+RCHWsjXLMEIO3NEZkQt4oFrExgzNYFhKH9MOJNYRiWtL54A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Oo1RsT6Q; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Oo1RsT6Q" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CDFD31F00893; Fri, 5 Jun 2026 09:22:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780651365; bh=E+f/zWvvwskd/11hn8AAfbKTGP8q2boPvdlgsuM5EcU=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=Oo1RsT6QkUNIn9WVuN7D3vcbOF9NeQRJQ+sIE/8ElOcTlfxuotzL5BAnAS4UmVel9 9kpFmArvaEq8eb3keHqOBYv2+pNUiGjN0Jtwy8EYyIf+ersfY8jhc6w2BWqegikCD7 MYH2RM9+gQL/f1adLK7I0I68RZZpQSrtXd6GLeny86csi/PYDJcZOp1jX+Fn3qFbdI X1XYYRlZqb/Tg5BNGsRkJpEYX3FWmKHN3s85lwFmAYUUsUFG1WyCbp7FTtUzs+nCSF 7rpJW5GnkNIQyX7gwN80dGIAG1Lbc38sw+UCvNxIPZ50STha029372n/LvrJsX4zm9 2rShaxLp/NNNg== From: "Matthieu Baerts (NGI0)" Date: Fri, 05 Jun 2026 19:21:57 +1000 Subject: [PATCH net-next v2 13/15] mptcp: pm: make mptcp_pm_add_addr_send_ack static Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260605-net-next-mptcp-add-addr6-port-ts-v2-13-758e7ca73f4d@kernel.org> References: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> In-Reply-To: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1856; i=matttbe@kernel.org; h=from:subject:message-id; bh=/gOW798p9PbuZvLJxhjikWf4dkHbOBBv+JzfTgGjaVs=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqIpUxAMQr711w4wM36Vswi235hcCtr1yJpc6tr DNrosKc6AGJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCaiKVMQAKCRD2t4JPQmmg c/b3EACChjwcs/4f/EwAtro1WimzmS2k+c/9uMf6lby2ZSZjnMttxWK+rluNH7S+XCVPCzJzhC0 B85ayKMfLynUm0Uozk/CjdSqosu4jCA+kTCL0viFOJ6b8azGJg80eqBfJAUjzeoIM/LXCOIWUJt r61PAQ5DZpNSeBP5P/3fr/nl0X7lh9zc+bPtkP/YcaujSG3XOFrvULx04iY77/4+2Z0RlSJJAi3 +VZ1sQp2xQ8eFt4cMZklNOFD9Lr8XGaeLeP/EIyNUmORpQH0S4oSuE0uoF01u/sr1t+VlrHSZWU Ny1v8oxZolsVOjekHoX9rVQkJZ7au1dBJ8L0XWVThytV5hlXlDa0LB92LONxmFgXqW/z2dqpSgC AXyqjcrZMgCtaM8D4EQ86cxUAJX2qCqNZnGvNeQ8VmfFqrDp/zNCO1vG9VEl9HkUSTbmxNSDJCF zGuRY+q0o0g72GwKjApfa1Btbotxd5UwudzXi4FkidSGUCcB0ygriq6TxEpGMhwnwwDieQvSH0T OuH0+mn3GegwRpzRJo9/u2XhCnp7PVO33YjY+KGsgM7obZXAYpDeo9cAoEgt7TiNF8Fjq7szhD8 Hxa/9/pDbpEGoqzOOKoQ49thxaZSdCfquEXZE4VgLCt65mW2YyWLw/M4twveISQOATQKsRCGVzQ eSqKisKb4RL/YAw== 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. Reviewed-by: Mat Martineau 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 684ae8650c19..f4604611f10f 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) @@ -743,7 +744,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 8bfb351c6257..7bc8fd486e81 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1114,7 +1114,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 Jun 8 06:38:56 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 237783F825B; Fri, 5 Jun 2026 09:22:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651370; cv=none; b=WEO1Zh9gQeVYGSprbJSaEC7iH8GE2pkZNJdT7RsDMNcIz2jJu5J0czZq2YsCxp7nqc57o0oNciPlqpNpjXm3+h4ef9ODmelS1REqbIUVlXPq19y1xZzoJlH7hiL7NFhNupvmyawALlyM7kMcPPOjyD5iD7QRYel/D7/TiZlU1Iw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651370; c=relaxed/simple; bh=OFWGyV7iubxVQyVxwUBOM9IG3EfDtnt2dbEXqtmwj38=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YKc8mk2HNro2W3IoZF1UaP0hte6ZjmsD9AM0GP9VHahIZSmPTzrZXpMxKjNxd6hbhzhuxDhFaqmrnxosdiCC1xA9O6ZJ2O25mlS/wx33bPQNFLxtGD/Tp6PDRbS9VAjsuXhY6DtBhB8l4iyKhqpGiqpzSVIi3XNQ/vobBF1o+Lw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jNrMbS2n; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jNrMbS2n" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1CFA91F00898; Fri, 5 Jun 2026 09:22:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780651368; bh=T36wjmUo5GrSowCuXneK/CafyGSZCLKHyknQi59K/1w=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=jNrMbS2nE+Fz1IAB9nj2saR2rlvIoQVugkEcy9mYQhFkjgz7vTCvIvnw02Dg/MlQZ Mjix3sismoBYfLJNwsRTyZInd8pOtOKPryqg3fk+sc37bz4zfTN2+XzcJzMw22XFde El+j024mlubURzgL5fzMhVhQ+lKRxYheN6le5k0TlEIpcvJUAddzmsy90cvH2C5VN2 3cbUSrnefN0UAeViEFrMHkXV1FVm2i9lfc5Wxul3fMIo5SlWNCm28F29P0YsjWpd6y hdFpkwcKKyLxPiaXVSTZWBXeOs/WQvvYTbwUnpkyV9lV0peEow9NwOIsxObKqhDjU+ 9VB1iFzpkNEdA== From: "Matthieu Baerts (NGI0)" Date: Fri, 05 Jun 2026 19:21:58 +1000 Subject: [PATCH net-next v2 14/15] mptcp: pm: avoid using del_timer directly Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260605-net-next-mptcp-add-addr6-port-ts-v2-14-758e7ca73f4d@kernel.org> References: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> In-Reply-To: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5344; i=matttbe@kernel.org; h=from:subject:message-id; bh=OFWGyV7iubxVQyVxwUBOM9IG3EfDtnt2dbEXqtmwj38=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqIpUxVmeHDtXjrHoy4BRugiUMGCEDgLNpGR0RC aKipMZwmM2JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCaiKVMQAKCRD2t4JPQmmg c2CkD/4lJ3ZyA2BqFr0EaZHhIAOSyRWutvWn6AAygjjLkg3DdEiYMkrx7XhujGlZZE8HWiYGbjD diDD3/4ui+/K6dpwgmohLzZIP6+F8fSJV0lzZk6vqMNYd8VvrOK73jkiY/4NdrmLHN4MKRBd641 +Z2xVbouBkVfJXxNc1jI2nc/qYiG34UIlv3QOJW9dgFUtpDG36gW2MalNWm4/kSMN3DhnZKMFV/ i4PVpOPwWu7qeVjx2HJZk9bsVRUUz+m3dSUCdCHbUUAnuB1zd737iaLyHP84IRo/pJjBkeUY/+6 cw/6Syvdqd728O1Zk93ixx7P22F1+23S8K1UK8A/dw5cDb9w038essIIHG0PQ3o57yDVDZnjw7c gXOMy2Le81bBQGxboLM5juWOhzY9wqsQ/1wAmQDpBsMJ5WjVg8KDK1+xe0kUebfKFcsoS5rmTJZ uy+YBAHTd6tL+I7D9FQnlZKq9rKH45ERz1bVvRIAFnJCOEzN2Nm70zIS/klXtR8Id+zfvOPiu5A dORWzvlzpRwsuQ+siZ+HC/VhI4ngH1ZLKQI1vFnxEaCzFrGfZxUghVeGRyxQvfzgWZbUwwV56Jw M5QOu2YGOkIw31Ek7X+ylx4Cv7NAelnHd4I2uGXIDK9/BQQpvyqsIueoIieJHNC3YsxHuflQHOx mZxUkdtV4vh4y6w== 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 false. 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 other 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. Reviewed-by: Mat Martineau Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/options.c | 1 - net/mptcp/pm.c | 75 +++++++++++++++++++++++++++---------------------= ---- net/mptcp/protocol.h | 3 --- 3 files changed, 39 insertions(+), 40 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 4215270bfba7..614a561c1f7f 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1183,7 +1183,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 f4604611f10f..6afd39aea110 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -149,6 +149,40 @@ 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; + bool stop_timer =3D false; + + 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; + stop_timer =3D true; + } + 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. + */ + if (stop_timer) { + if (check_id) + sk_stop_timer(sk, &entry->timer); + else + sk_stop_timer_sync(sk, &entry->timer); + } + + rcu_read_unlock(); + return entry; +} + bool mptcp_pm_announced_remove(struct mptcp_sock *msk, const struct mptcp_addr_info *addr) { @@ -398,40 +432,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; - bool stop_timer =3D false; - - 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; - stop_timer =3D true; - } - 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. - */ - if (stop_timer) { - if (check_id) - sk_stop_timer(sk, &entry->timer); - else - sk_stop_timer_sync(sk, &entry->timer); - } - - rcu_read_unlock(); - return entry; -} - bool mptcp_pm_announced_alloc(struct mptcp_sock *msk, const struct mptcp_addr_info *addr) { @@ -730,15 +730,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 7bc8fd486e81..4a2d40cd7b13 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1131,9 +1131,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 Jun 8 06:38:56 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 5BAAD4192F2; Fri, 5 Jun 2026 09:22:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651373; cv=none; b=qljHlZn1HJ8GzZ2FyqUgxlAjuVr6ABusuhTQVorbZzdMlMOfCwGBlGDOgfDiKSIzygQ3MCpcMJwmUX6qfndm8lCPjwdyigDpQX2zd7jO/IPG5jAE/Q+QLGpyKdzSDnvvVb0Zq8rMRpnzwyXlFmHPQW8FC2gz9xtyGfzzA4qW/1w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780651373; c=relaxed/simple; bh=4Uctxgb6BoEoKhru8pzRTcw6C3iRpoqsgEBUI6ABF/k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pZItMWfO+SL/x3jOK+uxoGPjQI4Vx8xf5zFVR391b+hQFm/IF48vb3R4m6y6eXY1H2eq+adzPav6/Oa9TRTETjYc7uCIIHr+Y9OYNQxzDCNMOtjjL5C0vbsfqE3BfGuKS22SEA0WfMrhLGWX/0xML8hQBemWALw4iEv7hZCnr38= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XDqHf75M; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="XDqHf75M" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5163C1F00893; Fri, 5 Jun 2026 09:22:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780651372; bh=NSGArtDVDv5PrQjEIYuKqd8VfPup2LKpt3kPHmR5lVc=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=XDqHf75Mw7vqaIcIfQ7lcTpD6KU57W890UFsH1n4tWrTUIo1e77RCtnZN3nycxGIl wtXB6QHXmugnf1/wsHL9Vd7Yzv+8JKZo/p3r8yDgJZV4fareXqQAh+qblCw74YicNR FvF7CdFZUIdCgWK+lZo1vl0JjlZW/aSefY4Qy7Ic9/djk39niZawqRcDiKOtprlbZj UchYSmVeUlnNuql5FNoWaO0cCtlg/QKmvdOl44tM6Y9n0iGGkoY7nKAUQM3swWhZ7Y naVo4t2wXqDIL6oWWN8nzWiPmtcvU60jAzLWJM3gqXRVSJQHC9KE9zY4KxFKoZvXrM ahfx4kAPBVTBQ== From: "Matthieu Baerts (NGI0)" Date: Fri, 05 Jun 2026 19:21:59 +1000 Subject: [PATCH net-next v2 15/15] mptcp: options: rst: drop unused skb parameter Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260605-net-next-mptcp-add-addr6-port-ts-v2-15-758e7ca73f4d@kernel.org> References: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> In-Reply-To: <20260605-net-next-mptcp-add-addr6-port-ts-v2-0-758e7ca73f4d@kernel.org> To: Mat Martineau , Geliang Tang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: netdev@vger.kernel.org, mptcp@lists.linux.dev, linux-kernel@vger.kernel.org, "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1251; i=matttbe@kernel.org; h=from:subject:message-id; bh=4Uctxgb6BoEoKhru8pzRTcw6C3iRpoqsgEBUI6ABF/k=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqIpUyf5M2A0nZs33iZDv1y2Dea0/dAyEWCYmO/ 3wBZD3SkBuJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCaiKVMgAKCRD2t4JPQmmg c3jSD/9vy09n5i1QnuDkXX/tIbxCragLYS4wh9/gGkQpcl5qWRAmQnHD5gOWgoJ9WnVpL7cJxAk GXqlHU+ig1/AXSoXxvcbGnb9v84zSdvWkpD5tudm8EZwNxy2MrWLt+ocZ2nt6xAknA7vzg/lKhP iVJeNp3FST1iNUU3d3u9xagjpmZGrigVauzhqZO+npoyWFQY28ZBNQA+BjCqV5ny5hQjhOzw9ZV kePdIOaQfgTQld8BpmDu2HNogY9TIx4ja+0HR7VKuJixlY+TIOO7fPBBr6pX2S3WztzHs52ekY+ oQtyb8PkYqCITWJUAZctFq1uC7b5/5o8+DKKu56ozBCuaGU+EyTscAaN3lT8MR+JWpt1MsL+vWv 9qvomnrUkaGi5ou9TC7+qljfrYFKzUC/AsbDA8IyJgsOttMyJB1tsKVNXibbnRpOPxcUPEWGh7u TfcNm6RvtlcN/i855NQeAzF+9Y4YGPqwMh9Sjgb4H/VfxV3CB5SOmmeTedfVbeWa6BL54jleJfu 3A02nehcX+YslmwiJTI/jiiRzHjBW72T8nkRQK3Chue7oVkhtDM3XTIY9Mp/f7RKgTfc+T1X5QG 3aep4XDNE+jt6zpNP+mOlh5sysFwsKerCRwSJ7RioZCBk6XcfKbFKVNeXD42eQiwAMy9/PnXCsD 0mGh3oaEweRthZQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 It was passed since its introduction in commit dc87efdb1a5c ("mptcp: add mptcp reset option support"), but never used. Simply removes it. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/options.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 614a561c1f7f..dff3fd5d3b55 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -744,7 +744,7 @@ static bool mptcp_established_options_mp_prio(struct so= ck *sk, int *size, return true; } =20 -static noinline bool mptcp_established_options_rst(struct sock *sk, struct= sk_buff *skb, +static noinline bool mptcp_established_options_rst(struct sock *sk, int *size, unsigned int remaining, struct mptcp_out_options *opts) @@ -833,7 +833,7 @@ int mptcp_established_options(struct sock *sk, struct s= k_buff *skb, remaining -=3D opt_size; } /* MP_RST can be used with MP_FASTCLOSE and MP_FAIL if there is room */ - if (mptcp_established_options_rst(sk, skb, &opt_size, remaining, opts)) { + if (mptcp_established_options_rst(sk, &opt_size, remaining, opts)) { total_size +=3D opt_size; remaining -=3D opt_size; } --=20 2.53.0