From nobody Mon May 25 18:15:47 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CCB0D3F99F4 for ; Mon, 18 May 2026 12:59:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109156; cv=none; b=j0Xx3b+8V5dcXQ2gfBIXQkiYZpeRa5PfCCniAD8X0JZkuIrkbc4gW7gHzDMFFUUC3WYhalJzQ10ONJxvbVvVme+j7c6Gfa6Wo3z3iZSJyE17Pw1+U7YIL4Iv/Ah1pVHm5m43gweFPktZA/MFIQbOUL8JBEeJ+2VHfYPxF8Qm/pE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109156; c=relaxed/simple; bh=n13zN/IU+LST8Jraigka9JE0RR3Rxi6PrlKglOhNsLk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=vFO8eCIrRDxGXrgqe947KoPVf3NcwHDyUgldkVnzOn34poISeqD9k5pQ78WG93X4LGu3Tej4oDIJ/cSXlrjc+eCOgj5bPpuPbYJDZ3XJ+TEE17F0NAe4sRw7mkJnS7xPRgjabjLZPLDDlGtY6UuZIFngkMxKwS7sqgkSTj3UV50= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ArzymE3w; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ArzymE3w" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 84375C2BCC6; Mon, 18 May 2026 12:59:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779109156; bh=n13zN/IU+LST8Jraigka9JE0RR3Rxi6PrlKglOhNsLk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ArzymE3w7iMGDe2rg2DgqGoDdQYOGIzc/D98bBeF46CwboDk20+rcEUvdEA5Md0R1 DESV2x66XoCAluZfwyrDtEGKU2r8lm/jdJfuX9N1EG/NwY5oHLgVjz2dag+/xsl4Nq IuQss18sxTl25u7hQcM55mWTkxwJgjQ66OEqK7oKMZT519FBKkiPOHGC3emp0LtZgN E5k8ajsL7EJuRlbxt/6/4EAU/8q0qBatUtJM4dkn1HDmOlfpzrkn+xc+NoK3t+CGS6 RnKd820AUU6U/xQSUMJ49xzZ2y/sUTa5fHUu2iuN6Llh/FLK1tIkKIPmZMbD1pPQnf us/uQbNodLYgw== From: "Matthieu Baerts (NGI0)" Date: Mon, 18 May 2026 22:59:05 +1000 Subject: [PATCH mptcp-next 01/12] mptcp: pm: avoid computing rm_addr size twice Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260518-mptcp-add-addr6-port-ts-v1-1-f1ca26977fcd@kernel.org> References: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> In-Reply-To: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3708; i=matttbe@kernel.org; h=from:subject:message-id; bh=n13zN/IU+LST8Jraigka9JE0RR3Rxi6PrlKglOhNsLk=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqCw0ggwwqm8j71SAh/cS7QHWLUzQr4mVbDStQS ZaQVTC7VH+JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagsNIAAKCRD2t4JPQmmg c8sIEADJqDEOmVRooCN7+nYzljpY1juN7jUPl6e9joWH9vW/UPf8TvDpM1BH/+7o04v8eU2hdp+ oqBooi45xKH1svOghXUgcBatRs/p/vgaVlo26uGuQUYuAmrO3SqYv6CbM13GMD5USAMgg9aIi32 ODyRxDynrRa+i8kiJX792ULm+SkJnXklpKxxz4auTK2lE5BWGzTE+o6C+R2k0sSK0KlVljd4tYg UsNA2u6UxHUodnKhUr1FDtddV9CDWdteo/+jIcm+paWZdOwV08D5U8T4bb/pfPnng2Lk2h2Rcm2 xoWn1cYObmpeAMfxUpJl/y9nRuN30UYqECHFQqdyGaRIkg4vPkv4Jr+emE63y0ClFuxtiARlxeR U2NSvDXV99VFG22REvDvI+7Z2rDQSMphcJ10CBcu5J1QppdM2ENFZNUA2sCv97c1Qn4mK1RurxR 7RilvIkG71cq5CHDNVwtDmCkvd8k/sEIo2xH4RHGOA8HIoF5vcIdKlbpztZlu45qfTierEFC6we 1GgEtw4CaDUcfnw9CJS3Fa2L5wzBNHz4TUUTG14hNZTzrf2PwAqn9x0GCR/visbdz4SlWMKJasP WghX4HWP1mLZYCc7QBzboFjIUUCjWy1HjJktfAsREoMBdOe6hLkU8pRkhuCbbj3BD3VyW6oMyrV adcvJRUz22vkUgA== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 mptcp_rm_addr_len helper was called twice: in mptcp_pm_rm_addr_signal, then just after in mptcp_established_options_rm_addr. Both to check the remaining space. The second call is not needed: if there is not enough space, mptcp_pm_rm_addr_signal will return false, and the caller, mptcp_established_options_rm_addr, will do the same without re-checking the size again. Instead, mptcp_pm_rm_addr_signal can directly set the size. While at it, move mptcp_rm_addr_len to pm.c, as it is now only used there, once. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/options.c | 11 ++--------- net/mptcp/pm.c | 11 ++++++++++- net/mptcp/protocol.h | 10 +--------- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 4cc583fdc7a9..d97205707647 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -723,19 +723,12 @@ static bool mptcp_established_options_rm_addr(struct = sock *sk, struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); struct mptcp_rm_list rm_list; - int i, len; + int i; =20 if (!mptcp_pm_should_rm_signal(msk) || - !(mptcp_pm_rm_addr_signal(msk, remaining, &rm_list))) + !(mptcp_pm_rm_addr_signal(msk, remaining, &rm_list, size))) return false; =20 - len =3D mptcp_rm_addr_len(&rm_list); - if (len < 0) - return false; - if (remaining < len) - return false; - - *size =3D len; opts->suboptions |=3D OPTION_MPTCP_RM_ADDR; opts->rm_list =3D rm_list; =20 diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index b460b153dc0f..bd6f1b35acc5 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -960,8 +960,16 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, = const struct sk_buff *skb, return ret; } =20 +static int mptcp_rm_addr_len(const struct mptcp_rm_list *rm_list) +{ + if (rm_list->nr =3D=3D 0 || rm_list->nr > MPTCP_RM_IDS_MAX) + return -EINVAL; + + return TCPOLEN_MPTCP_RM_ADDR_BASE + roundup(rm_list->nr - 1, 4) + 1; +} + bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, - struct mptcp_rm_list *rm_list) + struct mptcp_rm_list *rm_list, unsigned int *size) { int ret =3D false, len; u8 rm_addr; @@ -981,6 +989,7 @@ bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, un= signed int remaining, if (remaining < len) goto out_unlock; =20 + *size =3D len; *rm_list =3D msk->pm.rm_list_tx; WRITE_ONCE(msk->pm.addr_signal, rm_addr); ret =3D true; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 661600f8b573..6f3c73ad4284 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1224,20 +1224,12 @@ static inline unsigned int mptcp_add_addr_len(int f= amily, bool echo, bool port) return len; } =20 -static inline int mptcp_rm_addr_len(const struct mptcp_rm_list *rm_list) -{ - if (rm_list->nr =3D=3D 0 || rm_list->nr > MPTCP_RM_IDS_MAX) - return -EINVAL; - - return TCPOLEN_MPTCP_RM_ADDR_BASE + roundup(rm_list->nr - 1, 4) + 1; -} - bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, unsigned int opt_size, unsigned int remaining, struct mptcp_addr_info *addr, bool *echo, bool *drop_other_suboptions); bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, - struct mptcp_rm_list *rm_list); + struct mptcp_rm_list *rm_list, unsigned int *len); int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc); int mptcp_pm_nl_dump_addr(struct sk_buff *msg, --=20 2.53.0 From nobody Mon May 25 18:15:47 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A28493290A5 for ; Mon, 18 May 2026 12:59:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109158; cv=none; b=K7h+B6MNWJ9PXOendgrHFwGicMLn2iP/YonOqzrLwKWlgcMXB6JXH0QXuGdz8nQsDQq5rxiFaAvFk7TlXOZkrIAK9MjRFt9Ott+zChVXc0okcuh6Nl0Dw4Jp6NCmyUWssTeb0ziqigRj6EL+/YVLyk424gMfdjBvcG6fxR8WH7U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109158; c=relaxed/simple; bh=J6CN+ZPouQmWWw7cjcZgaJm8veufKw97RBBHeBZH4hI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TOzaPS+5Bd2yDYFBScdPkY/cU2S3A5esilbTd/q1h/P4uZ07jJMzVqYZ42XdaHQQuhRfb+mnIZ5X1QdXI2hbyNuk5G+qpo//FWFqSK4GmJIWP9LtCe70sYAe/ZUWZfcMuGTj+6Z5gNQWFWyfoNOt5u+lZ0d0FBtDG6Wc1M4UH88= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Tp2Wwrqx; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Tp2Wwrqx" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EF720C2BCB7; Mon, 18 May 2026 12:59:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779109157; bh=J6CN+ZPouQmWWw7cjcZgaJm8veufKw97RBBHeBZH4hI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Tp2WwrqxylqT1xkFN40Jn4baB4KfWucTgHG6nVGFXBASHvewgWZtFYDURMBHd9ud6 +CoCITyAWMwkq4a6e0u7uFUGuuto/XSIUm+oWw+Dxh/Y8Jxyx3zKIaULUIlBCOrkLh Nyh7oywT8Z3+eWOciq1bnhiPQHvpj3xEh43WMtoo5OtlJBSSmHs6CdRDoJ833l03++ in6IXRKBvs4bIPiG8/Puc9WXFV8fplU04Ns75iI6fz/HL43B43XqAYkltVqq6j+T9E HZnklb8HX2J5o44qSl+R54Z4Ww1AQAEvl+lxffref6YzWDKW/KUFfPebwNA0fATzzp Pi4YKiRAQELdw== From: "Matthieu Baerts (NGI0)" Date: Mon, 18 May 2026 22:59:06 +1000 Subject: [PATCH mptcp-next 02/12] mptcp: pm: avoid computing add_addr size twice Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260518-mptcp-add-addr6-port-ts-v1-2-f1ca26977fcd@kernel.org> References: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> In-Reply-To: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4810; i=matttbe@kernel.org; h=from:subject:message-id; bh=J6CN+ZPouQmWWw7cjcZgaJm8veufKw97RBBHeBZH4hI=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqCw0hAn4roTTtdmmcRsVY0pqfCgaeoMwyIFeyA FryIefvoLaJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagsNIQAKCRD2t4JPQmmg c+eOEACuaU24CdOUvOe3rm2hrZKFrs8yNmOgi/R4bNNiBlnDNBU7Zrmfjw4wLz9Z/gpnpicHkNn EUrwGXduQQNg9lukhO7p1+JjapCyxVnWpeEpLTTQqfVaR9k7FIEPiuGhx+ApxPpQxoborMesS6i mbLJuGRkF62smjQmN157WOJQODg9BW4jLFs95mQ1nv/Wq9SWX0tRJp38fuH7PjS3LEAZqkWAY6E 2eNyheGTjkedfFuT/gKzaeMBkAAl1qxmscT1egA8mcjQmbR/AQ0joTKWhgNQfo0V3/oPxRHeMsp k4OJBcehh1eGs46E6zPLUW4d5UrX+pnv0hA8/Oqmsj77y7e57gKG2wdSWh6VdlAqXev2cSn41aO DTfo3UavvEknHqd5KHLwGlsQxGGcM9ukIiXj2mRDnwHjntfYlXXyUqtY4sf9JOnXa5YUYNs4pBF O9YGEalJNTqWVxERBZar1nGiwgT+bL+S4ihb91ULIP0EX2kHznqtKtpPgHgrSGwP1+7tQE3wsln QQZHGs/wWKwpftdeZROZfrp1mjAgYQ6DreBGysXiqu/CBJQ1ckih/QNJ2DIyKE5elLRJam9vWm9 5o/iQvRkrT61ngOQY19D14jSIAtz+kC4QAc4leKaPwzcKBTQWt020qdjx/upyfPynNxJOK249LG ihxC5tKkKCHx7JA== 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. Compared to before, the size will be set even if there is not enough space, but that doesn't change anything: if there is not enough space, the ADD_ADDR is not added, and the size parameter is not used. While at it, move mptcp_add_addr_len() to pm.c, as it is now only used from there, once. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/options.c | 8 +------- net/mptcp/pm.c | 20 ++++++++++++++++++-- net/mptcp/protocol.h | 17 +---------------- 3 files changed, 20 insertions(+), 25 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index d97205707647..6990d6171980 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -662,7 +662,6 @@ static bool mptcp_established_options_add_addr(struct s= ock *sk, struct sk_buff * 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 @@ -670,7 +669,7 @@ static bool mptcp_established_options_add_addr(struct s= ock *sk, struct sk_buff * if (!mptcp_pm_should_add_signal(msk) || (opts->suboptions & (OPTION_MPTCP_MPJ_ACK | OPTION_MPTCP_MPC_ACK)) || !mptcp_pm_add_addr_signal(msk, skb, opt_size, remaining, &addr, - &echo, &drop_other_suboptions)) + &echo, size, &drop_other_suboptions)) return false; =20 /* @@ -682,11 +681,6 @@ static bool mptcp_established_options_add_addr(struct = sock *sk, struct sk_buff * else if (opts->suboptions & OPTION_MPTCP_DSS) return false; =20 - len =3D mptcp_add_addr_len(addr.family, echo, !!addr.port); - if (remaining < len) - return false; - - *size =3D len; if (drop_other_suboptions) { pr_debug("drop other suboptions\n"); opts->suboptions =3D 0; diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index bd6f1b35acc5..a44b1c8acf8f 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -887,10 +887,25 @@ void mptcp_pm_mp_fail_received(struct sock *sk, u64 f= ail_seq) } } =20 +static unsigned int mptcp_add_addr_len(int family, bool echo, bool port) +{ + u8 len =3D TCPOLEN_MPTCP_ADD_ADDR_BASE; + + if (family =3D=3D AF_INET6) + len =3D TCPOLEN_MPTCP_ADD_ADDR6_BASE; + if (!echo) + len +=3D MPTCPOPT_THMAC_LEN; + /* account for 2 trailing 'nop' options */ + if (port) + len +=3D TCPOLEN_MPTCP_PORT_LEN + TCPOLEN_MPTCP_PORT_ALIGN; + + return len; +} + bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, unsigned int opt_size, unsigned int remaining, struct mptcp_addr_info *addr, bool *echo, - bool *drop_other_suboptions) + unsigned int *len, bool *drop_other_suboptions) { bool skip_add_addr =3D false; int ret =3D false; @@ -926,7 +941,8 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, family =3D msk->pm.local.family; } =20 - if (remaining < mptcp_add_addr_len(family, *echo, port)) { + *len =3D mptcp_add_addr_len(family, *echo, port); + if (remaining < *len) { struct net *net =3D sock_net((struct sock *)msk); =20 if (!*drop_other_suboptions) diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 6f3c73ad4284..37255da6c0ed 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1209,25 +1209,10 @@ static inline bool mptcp_pm_is_kernel(const struct = mptcp_sock *msk) return READ_ONCE(msk->pm.pm_type) =3D=3D MPTCP_PM_TYPE_KERNEL; } =20 -static inline unsigned int mptcp_add_addr_len(int family, bool echo, bool = port) -{ - u8 len =3D TCPOLEN_MPTCP_ADD_ADDR_BASE; - - if (family =3D=3D AF_INET6) - len =3D TCPOLEN_MPTCP_ADD_ADDR6_BASE; - if (!echo) - len +=3D MPTCPOPT_THMAC_LEN; - /* account for 2 trailing 'nop' options */ - if (port) - len +=3D TCPOLEN_MPTCP_PORT_LEN + TCPOLEN_MPTCP_PORT_ALIGN; - - return len; -} - bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, unsigned int opt_size, unsigned int remaining, struct mptcp_addr_info *addr, bool *echo, - bool *drop_other_suboptions); + unsigned int *len, bool *drop_other_suboptions); bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, struct mptcp_rm_list *rm_list, unsigned int *len); int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); --=20 2.53.0 From nobody Mon May 25 18:15:47 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 600C34779BE for ; Mon, 18 May 2026 12:59:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109160; cv=none; b=kxy06k8l4juzlWuWOJN3/jRrdS51nwEBFNw7LkfPHko9aCrimNwOCVyu7fqO9m8NHOSUs8czjp2dY64A8fCog61c2xAh3R1RukljZ5rtTRRGGSSaIteB/qUbBbtPsxhsKBIUHSmOqD1CygDrtBD66yrmTxY3/mcaO6KlEofhe0M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109160; c=relaxed/simple; bh=3sS5izyKtMm7nMUr8VcP3jBPu8TGpIWqlZGN4BduJls=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=snRRLNMA9a7XevuL8dT06/Z0v0i5f3/NHRHZv5IACS/MM4ZXdhyl/dtaj++y5/UQfYfhRd7+nBkr/46W4pziVu+qAoV4151HwSZzZ/msGnnzG1Wm/4bILkrscfmNo4dqdJFexJ2tE4tmTXbDDOGh+7Fn26+MuyF6ELX6gl/VOFo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=UtLoDXZA; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="UtLoDXZA" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6430CC2BCC7; Mon, 18 May 2026 12:59:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779109159; bh=3sS5izyKtMm7nMUr8VcP3jBPu8TGpIWqlZGN4BduJls=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=UtLoDXZARE1EiV1mUhhEc9LSSiiJ+KoCZtApOGJ52Xo3P5Kd76synncHIZhqgs6Fn 458rWeLUThsFObF+5NV2bxm123tVWByON85sXnOD2pEHnyyQyz8DisbwYDv13vqnsX 7aMEvUb7pPxNJ4cWpJQBC1uqPJf7eDef2nI5RmCdipoWoO6uLtkSrog9C8t1Dtfo0U xFNnK40TDAtpHoVNLzZU7dxo+ZYMwtR+ud0SFYlDsMlCcc1IX9gtihTYTqDLlIpcCT mWo4QH8hYhJfnItaEDUA+KY5oCd918GMT25dNrmFjT7lo463C+NiSsk/oClnvbxTOu bHAxNlxKzrVTQ== From: "Matthieu Baerts (NGI0)" Date: Mon, 18 May 2026 22:59:07 +1000 Subject: [PATCH mptcp-next 03/12] mptcp: pm: drop TCP TS with ADD_ADDRv6 + port Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260518-mptcp-add-addr6-port-ts-v1-3-f1ca26977fcd@kernel.org> References: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> In-Reply-To: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=12888; i=matttbe@kernel.org; h=from:subject:message-id; bh=3sS5izyKtMm7nMUr8VcP3jBPu8TGpIWqlZGN4BduJls=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqCw0hdvi0Y4MLd02m+8XCIOFLrXqn2SSWZShrr HewEIiwVL+JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagsNIQAKCRD2t4JPQmmg cyblEACYKjJ654ImsQKJ0rYds24dVPYqxnlW0V/UqeLSzJYcwFki0ySNjiW2nDn/5/CqyQsZH9w /d/mZQJR+6NcvHe9ViWRjIIbmshHnbB4UYYmAO1s31bLHd0J8BlulGIjEWyIgacZojS9sCb9Ere Syjbm52KFCodkcC/ZphgIwYm6u3gjovHE5OSBsfKg9ReL8u1quohKb6pcpLl/aUJ0D1Q0v7+H2K 6zhUFYrgfjV7ujol07w74F1KbkHuJWjk7lmdCs7ISo4P6tA2sVClE1NbvxOu5fd8jZjaoiLDA8c noVT6wJR1hUnVth6/qtLdt8rdUXJXvyX25DV6rkjjsw4Drtno9C6Qf69RSnXWg2u7GmEyF2M+pl tx3/ZJBlY1oYhqAFTO6t58AT97qI8OwcwO0h56oKZk0baKTKQcpjZM3FYn6LgChna1h2YP9UEfB B+cE/f2EANes55iBmPYDEvtq71ru5xEB9ZfE2d/HHk3xkCzVpqgwhkdLHyx/8Q26SQ46gf7+Zx1 d3wwTeN4DJVBQeLY/8625yLQyPHMKYSWplfU/ugjYp9+hzoDbGNGktWQFJvkdbMgzfCI8qsw8M0 cvpVyefQHFzREfZ0Jd7IDznVJ1nK9vA/aaGkNUWLl3QOdn2+Vla9rKlx1GFidDVSGV0EfM+bvxL /V5nvaNKXMBKqeg== 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 controlled by a new net.mptcp.add_addr_v6_port_drop_ts sysctl knob, enabled by default. This option is 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. It is important to keep in mind that dropping the TCP timestamps option for one packet of the connection could eventually disrupt some middleboxes: even if it should be unlikely, they could drop the packet or even block the connection. That's why this new feature can be controlled by a sysctl knob. Note that it would be technically possible to squeeze both options into the header if the ADD_ADDR is first written, and then the TCP timestamps without the NOPs preceding it. But this means more modifications on TCP side, plus some middleboxes could still be disrupted by that. 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. While at it, move syn_retrans_before_tcp_fallback down from struct mptcp_pernet, to avoid creating another 3 bytes hole. Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/448 Signed-off-by: Matthieu Baerts (NGI0) --- Documentation/networking/mptcp-sysctl.rst | 13 +++++++++++++ include/net/mptcp.h | 3 ++- net/ipv4/tcp_output.c | 6 +++++- net/mptcp/ctrl.c | 18 +++++++++++++++++- net/mptcp/options.c | 15 +++++++++------ net/mptcp/pm.c | 13 ++++++++++++- net/mptcp/protocol.h | 4 +++- tools/testing/selftests/net/mptcp/mptcp_join.sh | 1 + 8 files changed, 62 insertions(+), 11 deletions(-) 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/include/net/mptcp.h b/include/net/mptcp.h index 4cf59e83c1c5..b14e98b60958 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -157,7 +157,7 @@ bool mptcp_synack_options(const struct request_sock *re= q, unsigned int *size, struct mptcp_out_options *opts); bool mptcp_established_options(struct sock *sk, struct sk_buff *skb, unsigned int *size, unsigned int remaining, - struct mptcp_out_options *opts); + bool *drop_ts, struct mptcp_out_options *opts); bool mptcp_incoming_options(struct sock *sk, struct sk_buff *skb); =20 void mptcp_write_options(struct tcphdr *th, __be32 *ptr, struct tcp_sock *= tp, @@ -276,6 +276,7 @@ static inline bool mptcp_established_options(struct soc= k *sk, struct sk_buff *skb, unsigned int *size, unsigned int remaining, + bool *drop_ts, struct mptcp_out_options *opts) { return false; diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 47647a99e324..3dcc6880fd44 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -1182,11 +1182,15 @@ 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; unsigned int opt_size =3D 0; + bool drop_ts =3D opts->options & OPTION_TS; =20 if (mptcp_established_options(sk, skb, &opt_size, remaining, - &opts->mptcp)) { + &drop_ts, &opts->mptcp)) { opts->options |=3D OPTION_MPTCP; size +=3D opt_size; + + if (drop_ts) + opts->options &=3D ~OPTION_TS; } } =20 diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c index d96130e49942..c94a192f4118 100644 --- a/net/mptcp/ctrl.c +++ b/net/mptcp/ctrl.c @@ -32,12 +32,13 @@ struct mptcp_pernet { unsigned int close_timeout; unsigned int stale_loss_cnt; atomic_t active_disable_times; - u8 syn_retrans_before_tcp_fallback; unsigned long active_disable_stamp; + u8 syn_retrans_before_tcp_fallback; u8 mptcp_enabled; u8 checksum_enabled; u8 allow_join_initial_addr_port; u8 pm_type; + u8 add_addr_v6_port_drop_ts; char scheduler[MPTCP_SCHED_NAME_MAX]; char path_manager[MPTCP_PM_NAME_MAX]; }; @@ -94,6 +95,11 @@ const char *mptcp_get_scheduler(const struct net *net) return mptcp_get_pernet(net)->scheduler; } =20 +unsigned int mptcp_add_addr_v6_port_drop_ts(const struct net *net) +{ + return mptcp_get_pernet(net)->add_addr_v6_port_drop_ts; +} + static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet) { pernet->mptcp_enabled =3D 1; @@ -108,6 +114,7 @@ static void mptcp_pernet_set_defaults(struct mptcp_pern= et *pernet) pernet->pm_type =3D MPTCP_PM_TYPE_KERNEL; strscpy(pernet->scheduler, "default", sizeof(pernet->scheduler)); strscpy(pernet->path_manager, "kernel", sizeof(pernet->path_manager)); + pernet->add_addr_v6_port_drop_ts =3D 1; } =20 #ifdef CONFIG_SYSCTL @@ -362,6 +369,14 @@ static struct ctl_table mptcp_sysctl_table[] =3D { .mode =3D 0444, .proc_handler =3D proc_available_path_managers, }, + { + .procname =3D "add_addr_v6_port_drop_ts", + .maxlen =3D sizeof(u8), + .mode =3D 0644, + .proc_handler =3D proc_dou8vec_minmax, + .extra1 =3D SYSCTL_ZERO, + .extra2 =3D SYSCTL_ONE + }, }; =20 static int mptcp_pernet_new_table(struct net *net, struct mptcp_pernet *pe= rnet) @@ -389,6 +404,7 @@ static int mptcp_pernet_new_table(struct net *net, stru= ct mptcp_pernet *pernet) table[10].data =3D &pernet->syn_retrans_before_tcp_fallback; table[11].data =3D &pernet->path_manager; /* table[12] is for available_path_managers which is read-only info */ + table[13].data =3D &pernet->add_addr_v6_port_drop_ts; =20 hdr =3D register_net_sysctl_sz(net, MPTCP_SYSCTL_PATH, table, ARRAY_SIZE(mptcp_sysctl_table)); diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 6990d6171980..a2d2ff7336a0 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -654,6 +654,7 @@ static u64 add_addr_generate_hmac(u64 key1, u64 key2, static bool mptcp_established_options_add_addr(struct sock *sk, struct sk_= buff *skb, unsigned int *size, unsigned int remaining, + bool *drop_ts, struct mptcp_out_options *opts) { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); @@ -669,16 +670,14 @@ static bool mptcp_established_options_add_addr(struct= sock *sk, struct sk_buff * if (!mptcp_pm_should_add_signal(msk) || (opts->suboptions & (OPTION_MPTCP_MPJ_ACK | OPTION_MPTCP_MPC_ACK)) || !mptcp_pm_add_addr_signal(msk, skb, opt_size, remaining, &addr, - &echo, size, &drop_other_suboptions)) + &echo, size, &drop_other_suboptions, drop_ts)) return false; =20 /* * Later on, mptcp_write_options() will enforce mutually exclusion with * DSS, bail out if such option is set and we can't drop it. */ - if (drop_other_suboptions) - remaining +=3D opt_size; - else if (opts->suboptions & OPTION_MPTCP_DSS) + if (!drop_other_suboptions && opts->suboptions & OPTION_MPTCP_DSS) return false; =20 if (drop_other_suboptions) { @@ -825,15 +824,17 @@ static bool mptcp_established_options_mp_fail(struct = sock *sk, =20 bool mptcp_established_options(struct sock *sk, struct sk_buff *skb, unsigned int *size, unsigned int remaining, - struct mptcp_out_options *opts) + bool *drop_ts, struct mptcp_out_options *opts) { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); unsigned int opt_size =3D 0; bool snd_data_fin; bool ret =3D false; + bool has_ts =3D *drop_ts; =20 opts->suboptions =3D 0; + *drop_ts =3D false; =20 /* Force later mptcp_write_options(), but do not use any actual * option space. @@ -878,10 +879,12 @@ bool mptcp_established_options(struct sock *sk, struc= t sk_buff *skb, =20 *size +=3D opt_size; remaining -=3D opt_size; - if (mptcp_established_options_add_addr(sk, skb, &opt_size, remaining, opt= s)) { + if (mptcp_established_options_add_addr(sk, skb, &opt_size, remaining, + &has_ts, opts)) { *size +=3D opt_size; remaining -=3D opt_size; ret =3D true; + *drop_ts =3D has_ts; } else if (mptcp_established_options_rm_addr(sk, &opt_size, remaining, op= ts)) { *size +=3D opt_size; remaining -=3D opt_size; diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index a44b1c8acf8f..ad496ff3d6ad 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -905,7 +905,8 @@ static unsigned int mptcp_add_addr_len(int family, bool= echo, bool port) bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, unsigned int opt_size, unsigned int remaining, struct mptcp_addr_info *addr, bool *echo, - unsigned int *len, bool *drop_other_suboptions) + unsigned int *len, bool *drop_other_suboptions, + bool *drop_ts) { bool skip_add_addr =3D false; int ret =3D false; @@ -948,6 +949,13 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, = const struct sk_buff *skb, if (!*drop_other_suboptions) goto out_unlock; =20 + if (*drop_ts && mptcp_add_addr_v6_port_drop_ts(net)) { + /* OK without TCP Timestamp? */ + *len -=3D TCPOLEN_TSTAMP_ALIGNED; + if (remaining >=3D *len) + goto drop_ts; + } + if (*echo) { MPTCP_INC_STATS(net, MPTCP_MIB_ECHOADDTXDROP); } else { @@ -955,8 +963,11 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, = const struct sk_buff *skb, MPTCP_INC_STATS(net, MPTCP_MIB_ADDADDRTXDROP); } goto drop_signal_mark; + } else { + *drop_ts =3D false; } =20 +drop_ts: ret =3D true; =20 drop_signal_mark: diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 37255da6c0ed..c84e630c6e57 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -799,6 +799,7 @@ unsigned int mptcp_close_timeout(const struct sock *sk); int mptcp_get_pm_type(const struct net *net); const char *mptcp_get_path_manager(const struct net *net); const char *mptcp_get_scheduler(const struct net *net); +unsigned int mptcp_add_addr_v6_port_drop_ts(const struct net *net); =20 void mptcp_active_disable(struct sock *sk); bool mptcp_active_should_disable(struct sock *ssk); @@ -1212,7 +1213,8 @@ static inline bool mptcp_pm_is_kernel(const struct mp= tcp_sock *msk) bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, unsigned int opt_size, unsigned int remaining, struct mptcp_addr_info *addr, bool *echo, - unsigned int *len, bool *drop_other_suboptions); + unsigned int *len, bool *drop_other_suboptions, + bool *drop_ts); bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, struct mptcp_rm_list *rm_list, unsigned int *len); int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 5d4d0f127f79..634d82595f72 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.drop_ts_add_addr6_port=3D0 2>/dev= /null || true ip netns exec $ns1 sysctl -q net.ipv4.tcp_timestamps=3D1 ip netns exec $ns2 sysctl -q net.ipv4.tcp_timestamps=3D1 =20 --=20 2.53.0 From nobody Mon May 25 18:15:47 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 948AD3F0760 for ; Mon, 18 May 2026 12:59:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109161; cv=none; b=PYC4yUAycH1Yz2q/RNNFySvEe3UyYa4TrbxtEJY8Sni4WpO639lZqgyP+t8/KXkhpXIwz/ZuQeBYJWpvojimRK8lHIhQVoEKhXslXrWkidQsMb8qU0cGq7k1BbHf6Pz3OhutF2qHCkQuy4jsnJtSueXEaOwQrTxmKCWJwK2Fb8g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109161; c=relaxed/simple; bh=cd2vGpSdvYgyrNCioFJKlOdef+91KQPdQOOlhLnsGZc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Hi5ZnT5oHaDllgDBF1JG/3sluG1iFe83aIdfm+EUpkHlEFzd1N1Ad+W6S7BE/sXYZsKQuT/ia3gTl+mf4ZJad9KwrzaYnPZKS7ml1/h4Fg7h14m4gmbrPkI0NIP1MttnVU4D+ZtDR2LaUoUUNd0p33vYo3sEq6F7b71dvlm8my0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=M2fukxO5; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="M2fukxO5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 28772C2BCB7; Mon, 18 May 2026 12:59:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779109160; bh=cd2vGpSdvYgyrNCioFJKlOdef+91KQPdQOOlhLnsGZc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=M2fukxO51SHmhr6jTjxcZGfQks7f5VvDESZd9TJNFSyRojmNgttao/dZ6ngdnv0ur OHzSnSx9o6uU1lcBQ7pwE1bnpdqQidgexbw13pCo+Wz0qg8wyVXV94wkpoPao6sjH8 DuzN71LI+mh4pCfBBFPKYXtsIUbihmXZR8Dzs9foxGlpCjMYQPE9SNexfZPHv3g1oO IxFP40W3SGUXueJ6o8qxeg5F7ikwhUutDBUwm1kMOmix3E2MtWVTGUyIFjkbNXYth7 7m46UZVl4pDADp7bniUf0CoCovULXs3cv2ltEMgS0kto3EU92BWcme0Ho+7XSzwnmN 3PF3XdrOsmTDA== From: "Matthieu Baerts (NGI0)" Date: Mon, 18 May 2026 22:59:08 +1000 Subject: [PATCH mptcp-next 04/12] selftests: mptcp: validate ADD_ADDRv6 + TS + port Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260518-mptcp-add-addr6-port-ts-v1-4-f1ca26977fcd@kernel.org> References: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> In-Reply-To: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1489; i=matttbe@kernel.org; h=from:subject:message-id; bh=cd2vGpSdvYgyrNCioFJKlOdef+91KQPdQOOlhLnsGZc=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqCw0hzfdWXouQy+LhFfH4F2sD0cFPVjhMwMThH XUwetO/i/2JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagsNIQAKCRD2t4JPQmmg c+xyEACGf+trk2gFLLWKqfa3D/ifTYD2jbZQxz41T5wF+5j4rHJkeZ0pY4uD7rU5LPnVONdTgSI GPJqUMYXRHX0d0PNtqgQXMocN+GxwX9jT6aUWEzrG8uskge7uIYIWjNN9SgcOXJ8aISO4DPyj+2 z4QxW9PBgzBGYBWWVzUqGBre9h+mchcKoQaa/RIhlVSZR91H8v+ho+gxzd/w9sa/0/8BtrvqPy6 zpCdUf/SWA8W+NKkJ3JcA+r+Ypk0//ZbBDhKOd5MnyiWSzV8tTEnnkwCBQ+BNfOS644pUPYpyS5 ivkgm7zMS+t5RohpLYBAkIs7MRkb/Ink02I9ikA167aq7ArmETVItqzsn+oVL0T/pY/jab0uT7+ hjltmhnHiMm1eoAgMcO8cq9pBx5rgPou8t/ixHi+sImsJaaD0l6ZTMfXSNy3Jf4EvGyifZme0xt XMzxHyTt5O8GbHWJygxG7NupB+WtIJtS5KNpwtlTtGWQUV7ZDSfeE8vKQC1IIPdNwVOTyYDd3ZD VhN/Poy2tNSHSMqQjPcvDiKW/0ZNuYu9XHK3d1UACQa9c0lqEB+BCRb5QLnFNQFO35NwPhRJTrQ 23psnTxJfPUzgy+MTWkpTPbQDqxlm7RDY3HaTYl5+lYxbnsoEs8pcgB5GScBM0xwBB0sSyJr+0W QN8z/r3ICQm0qtQ== 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 an IPv6 endpoints. This test is only executed if the add_addr_v6_port_drop_ts sysctl knob is available. If not, it means the kernel doesn't support this feature. Signed-off-by: Matthieu Baerts (NGI0) --- 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 634d82595f72..fa5be164b705 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 10.0.1.1 + chk_join_nr 1 1 1 + chk_add_nr 1 1 1 + fi + # subflow and signal with port if reset "subflow and signal with port"; then pm_nl_add_endpoint $ns1 10.0.2.1 flags signal port 10100 --=20 2.53.0 From nobody Mon May 25 18:15:47 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 58E4B3F6C32 for ; Mon, 18 May 2026 12:59:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109163; cv=none; b=dyV6q3DbZeXWl6WFFoD4ZjAm11to+1HHDCK8+PzZLC3AEOClEZgD/btKe65MCWJnbUEziRIBMrD+7txeUoY8H0juW/COeoBxP6fYH+XmJQf2xBF6c5CCAMhBPKTG9L/kj6b1oIAcR3PKHtLJPOFn+Wc3qHm6ApDjVVUO3Q7gdYc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109163; c=relaxed/simple; bh=TRuNmJBPNrFxZsiPEKT/+vK50p+CzqAyydGOsc4W+jI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=j0bMgLyEBZ44AqkhVMbHTvk/Kebqp6HKeOjmMmk/ZwJE38AJsb274p60+9TZ5F7xlIRlJPVbfTMa5w1e68ESBloFDJ1n5+AqWqfvphBxxlUpQcScIB7Gj4Q6eovEwpJzBFQivcetTrycjx1q+G60AZSJcLJs/TRtvmlggqC4LjQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Z8UewHun; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Z8UewHun" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 85812C2BCC6; Mon, 18 May 2026 12:59:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779109162; bh=TRuNmJBPNrFxZsiPEKT/+vK50p+CzqAyydGOsc4W+jI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Z8UewHuny5MQXlPNVt95167KQJDjAPzauU1YH7aZlQA9+RVQZd83UTxbRn3rjO6Cv 6McapvmW7FKFYQ42g6U5ViMNDSy6TDDfn4Qth+5t4QY2NAfGNqQ0Jly96AgEtzqOQ6 x48UCeLHWauGx2t1E2RmHsC+kncKeiYNGNhDLr2jmfjXFzBF8pArOnZAEdi1T5SbQp iCiHCUxX84aNp1/9ftrABvN8D/TBbEo5PnFZdy2RruUnkBsm7dcIkQHUHR63mh7ErZ oEJjw7RZjqxDP6vk4B2r9yISHHdjEyyTEVx+RN6axAimObTnylfhVnX7sceJwcunE6 AFEnpxXhnjIDA== From: "Matthieu Baerts (NGI0)" Date: Mon, 18 May 2026 22:59:09 +1000 Subject: [PATCH mptcp-next 05/12] selftests: mptcp: always check sent/dropped ADD_ADDRs Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260518-mptcp-add-addr6-port-ts-v1-5-f1ca26977fcd@kernel.org> References: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> In-Reply-To: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4863; i=matttbe@kernel.org; h=from:subject:message-id; bh=TRuNmJBPNrFxZsiPEKT/+vK50p+CzqAyydGOsc4W+jI=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqCw0hcDS7zTOrLxWAKi6mySB8tdRjf+L0Dj0Qv p1sWnreguCJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagsNIQAKCRD2t4JPQmmg cznXEACnJHaWoF9KkWKTZ2Ef+Ac15D7yBpuRnWGMdUYn5f799Hw+bo7yYg8GyTWaQtH3r5GRS74 pkfJ/HFVQd84Y5ab8gej4q3S3MMLU+qOaSBXQ63yBfH+f9OdU5vf7bYbmm+9Mo1u9kQG/yC07XE cY4NZzQ4SFYUteiF3rQVX2UlNXlNufTuPM3J3GJ7K7v09EswIXpTpQXVPVkbveP+v51OibsLmnu 4vppScnH2GlqV78TUgGmbFoXjKhgvl1XToTgmzJAouRUgED3LMjJxsbFiKpwBSQgRPQWGuIPGW6 v7gJpo8bFkyZAxJ1ce5pPjDVJxKHvfzz4xaeRQHyma6nyy9vkByIQe5oTOkVc9gi7tQlLfxemU3 X3PMqj68j//u/0X+eYLnJl9esEheYIj7yul+ZUn3Q7hsEtnxGaOX3cMy+KVqUbx9+Ak1WcJOVo/ b5JdqiBGKcihRWwttPQeOCVpyY3YBuwcR+s8kRjuYCnul82/8YzScZCzewPlhXGsk60kE40jwE+ T8+HEiqQ6adscJNJYOQyuxxudMA0C9dVdZJDsQbgXzGUhvjgfDCH55OIkoeqC3p4vVjNUyr+zUr WoBzmDbNdUh9t7kpBzsprd1p7yWsq6nOfCeVBxB/ivl+8UVQQ6vwuQ0uHyIr/BbeEi1SwJGAcGa ooz9PkTLYmDuMKw== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Before, they were only checked on demand, but it seems better to check them each time received ADD_ADDRs are checked. Errors are only reported when the counter exists, and the value is not the expected one. This is similar to what is done in chk_join_nr: it reduces the output, and avoids a lot of 'skip' when validating older kernels. Also here, some tests need to adapt the default expected counters, e.g. when ADD_ADDR echo are dropped on the reception side, or it is not possible to send an ADD_ADDR due to the limited option space. Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 71 ++++++++++-----------= ---- 1 file changed, 27 insertions(+), 44 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index fa5be164b705..aa84affa7fa5 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -87,6 +87,10 @@ unset fb_mpc_data unset fb_md5_sig unset fb_dss =20 +unset add_addr_tx_nr +unset add_addr_echo_tx_nr +unset add_addr_drop_tx_nr + # generated using "nfbpf_compile '(ip && (ip[54] & 0xf0) =3D=3D 0x30) || # (ip6 && (ip6[74] & 0xf0) =3D=3D 0x30)'" CBPF_MPTCP_SUBOPTION_ADD_ADDR=3D"14, @@ -1710,6 +1714,9 @@ chk_add_nr() local ack_nr=3D$port_nr local mis_syn_nr=3D0 local mis_ack_nr=3D0 + local add_tx_nr=3D${add_addr_tx_nr:-${add_nr}} + local echo_tx_nr=3D${add_addr_echo_tx_nr:-${echo_nr}} + local drop_tx_nr=3D${add_addr_drop_tx_nr:-0} local ns_tx=3D$ns1 local ns_rx=3D$ns2 local tx=3D"" @@ -1811,50 +1818,25 @@ chk_add_nr() print_ok fi fi -} =20 -chk_add_tx_nr() -{ - local add_tx_nr=3D$1 - local echo_tx_nr=3D$2 - local count - - print_check "add addr tx" - count=3D$(mptcp_lib_get_counter ${ns1} "MPTcpExtAddAddrTx") - if [ -z "$count" ]; then - print_skip + count=3D$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtAddAddrTx") # Tolerate more ADD_ADDR then expected (if any), due to retransmissions - elif [ "$count" !=3D "$add_tx_nr" ] && - { [ "$add_tx_nr" -eq 0 ] || [ "$count" -lt "$add_tx_nr" ]; }; then + if [ -n "$count" ] && [ "$count" !=3D "$add_tx_nr" ] && + { [ "$add_tx_nr" -eq 0 ] || [ "$count" -lt "$add_tx_nr" ]; }; then + print_check "add addr tx" fail_test "got $count ADD_ADDR[s] TX, expected $add_tx_nr" - else - print_ok fi =20 - print_check "add addr echo tx" - count=3D$(mptcp_lib_get_counter ${ns2} "MPTcpExtEchoAddTx") - if [ -z "$count" ]; then - print_skip - elif [ "$count" !=3D "$echo_tx_nr" ]; then + count=3D$(mptcp_lib_get_counter ${ns_rx} "MPTcpExtEchoAddTx") + if [ -n "$count" ] && [ "$count" !=3D "$echo_tx_nr" ]; then + print_check "add addr echo tx" fail_test "got $count ADD_ADDR echo[s] TX, expected $echo_tx_nr" - else - print_ok fi -} =20 -chk_add_drop_tx_nr() -{ - local drop_tx_nr=3D$1 - local count - - print_check "add addr tx drop" - count=3D$(mptcp_lib_get_counter ${ns1} "MPTcpExtAddAddrTxDrop") - if [ -z "$count" ]; then - print_skip - elif [ "$count" !=3D "$drop_tx_nr" ]; then + count=3D$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtAddAddrTxDrop") + if [ -n "$count" ] && [ "$count" !=3D "$drop_tx_nr" ]; then + print_check "add addr tx drop" fail_test "got $count ADD_ADDR drop[s] TX, expected $drop_tx_nr" - else - print_ok fi } =20 @@ -2267,7 +2249,6 @@ signal_address_tests() pm_nl_add_endpoint $ns1 10.0.2.1 flags signal run_tests $ns1 $ns2 10.0.1.1 chk_join_nr 0 0 0 - chk_add_tx_nr 1 1 chk_add_nr 1 1 fi =20 @@ -2545,8 +2526,8 @@ add_addr_timeout_tests() speed=3Dslow \ run_tests $ns1 $ns2 10.0.1.1 chk_join_nr 1 1 1 - chk_add_tx_nr 4 4 - chk_add_nr 4 0 + add_addr_echo_tx_nr=3D4 \ + chk_add_nr 4 0 fi =20 # add_addr timeout IPv6 @@ -2557,7 +2538,8 @@ add_addr_timeout_tests() speed=3Dslow \ run_tests $ns1 $ns2 dead:beef:1::1 chk_join_nr 1 1 1 - chk_add_nr 4 0 + add_addr_echo_tx_nr=3D4 \ + chk_add_nr 4 0 fi =20 # signal addresses timeout @@ -2569,7 +2551,8 @@ add_addr_timeout_tests() speed=3D10 \ run_tests $ns1 $ns2 10.0.1.1 chk_join_nr 2 2 2 - chk_add_nr 8 0 + add_addr_echo_tx_nr=3D8 \ + chk_add_nr 8 0 fi =20 # signal invalid addresses timeout @@ -2582,7 +2565,8 @@ add_addr_timeout_tests() run_tests $ns1 $ns2 10.0.1.1 join_syn_tx=3D2 \ chk_join_nr 1 1 1 - chk_add_nr 8 0 + add_addr_echo_tx_nr=3D7 \ + chk_add_nr 8 0 fi } =20 @@ -3331,9 +3315,8 @@ add_addr_ports_tests() pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal port 10100 pm_nl_add_endpoint $ns1 dead:beef:3::1 flags signal run_tests $ns1 $ns2 dead:beef:1::1 - chk_add_drop_tx_nr 1 - chk_add_tx_nr 1 1 - chk_add_nr 1 1 0 + add_addr_drop_tx_nr=3D1 \ + chk_add_nr 1 1 0 fi } =20 --=20 2.53.0 From nobody Mon May 25 18:15:47 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9D3A03264EF for ; Mon, 18 May 2026 12:59:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109164; cv=none; b=kbTo92zWTj4GFjodwQoT7q2ko+XE2ieq/JqSuiB4N0s5a9P5BzlE8GM+t854Iw5dfw7/fgvxwronHCJPrIhulyaBR325f0oiP6pKzZTbrG3i0MkUSyoIUDRY7mhlFpTkBkWw9BSxGW4jv578caovwbmP7cocz41nOT+61Pbt6IE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109164; c=relaxed/simple; bh=D6akQKCecfCq/chQdSJpl4yJT2FOKkwxDUSNxRoYOpU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XX11QPtXE03RJ0sXnKjUY4yA22tQOdDAHxMwZ4h6ZOGHXwqH4yq1NWzAJ+7tI5O2O9GZISctoPfG5gWJcqFry+buokIAySqbdixznOM/H0tHXDJ1LBLlOM/+iqHdA9xPYpC/W6m6+l8bwpc+0uvfeaBQkN+AWUOuYEg9wsDpH8U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Ytb6r+GV; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Ytb6r+GV" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 05089C2BCF7; Mon, 18 May 2026 12:59:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779109163; bh=D6akQKCecfCq/chQdSJpl4yJT2FOKkwxDUSNxRoYOpU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Ytb6r+GVctbUlbVCNL0PM+Tkp/AVuz94lFXOIg7jFR19vOLZTyJJGj+nEsP9ZxziD O0nmdgkqXmKvmfpRgw+A6fqrF51cOt04nmMc7re7mmyWUxego/u7JPW74M2x7/XI1J 4L6jqSXPXmkIa85GivWY/Lu4ON6UDvyUO21q0Zwtr9ZZdtvWgAcKxGL9mdCEsZtQy0 EKfYLYKcDzuZLLNop4RVb8lq0tp6jHGm2sFgKUzHn90bp5NLEoOL3hCx5SbupvGq2G cE2MY33qXyw1+NoiWDGkNmrv3j6T7IHCyIpgxKTit/L8LRHP9ze7JO5p4Kn7Z1qjlv MZuRSbhIsoPeg== From: "Matthieu Baerts (NGI0)" Date: Mon, 18 May 2026 22:59:10 +1000 Subject: [PATCH mptcp-next 06/12] mptcp: pm: use for_each_subflow helper Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260518-mptcp-add-addr6-port-ts-v1-6-f1ca26977fcd@kernel.org> References: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> In-Reply-To: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4858; i=matttbe@kernel.org; h=from:subject:message-id; bh=D6akQKCecfCq/chQdSJpl4yJT2FOKkwxDUSNxRoYOpU=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqCw0h/FXGM0+/nxI07U4VlDW5VTtA8HZsmrW94 Yj/C1sb7/6JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagsNIQAKCRD2t4JPQmmg c1RcD/4leedzm6JVal00O9BBtyHoWpseLPAym0wBSza1GgkpJgWNZenDaX3xiuNlQ+15ab3S8zw gXcjgwx6AwIrQfKK0ysHqKlRvP8V2ZaXDyivp7LnjEE+0XCtMG8HURW77NMzQQVceerEZT7j/O3 2P/3urCC+kHzLW4W83obFmLUXboSV4cllt2ebEr5Y3UN/A5pFh3C9cTUsZFcBh5ar8LKxcHrGlU YclV9m/m5aCXJ5rpf+76vZhxjsswiMdoWqERAVe4ycjBhT7TZHxMfAdEfs4Z3xgDxILxKhlviMl jT5FTyPgARaSLXYSt0yXiQ9b4iFWrqnOfWQ3n8MWv46+uel/Rw/Blw/ZPI6RMkwY1X0cMOkJ169 +IQzWxFksJJV5fBDKmR5IfjpAMNmjBxK2FZMs3vfDtmjyXtBrS6xNGoZlnl1wdwGIaB/kZhxAi/ AjNrf0XDFreQb7qYDr4dxYDdW+ZsLynoSqY0sZ+upu1Di6pl0H4+IDbO6C9PQNKl4czFKllt3YS 9z0fiouP8N54Y7erZqh6okhd6Cn6jbUDZtnF/hSDVZ2DTt3N7+HUIvPM8RbB/6WX4JjYKyWeQc9 bzkggpxmPoEdKDwdU9xnMsP/vtK6CDSNy0rr6vEAIWjrsaSj2pqjBQWfIS0k0B+IrE8vAcbIlCg meG9Y3dYKPDLJeg== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Similar to most places in the MPTCP code. So instead of passing the subflow list and use list_for_each_entry(subflow, list, node), pass the msk and use mptcp_for_each_subflow(msk, subflow). That's clearer and more uniform with the rest. While at it, add 'pm_' prefix for the exported one to easily identify the origin. Plus replace 'lookup' by 'has', because a bool is returned. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 6 +++--- net/mptcp/pm_kernel.c | 12 ++++++------ net/mptcp/pm_userspace.c | 2 +- net/mptcp/protocol.h | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index ad496ff3d6ad..55d6427bab92 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -115,14 +115,14 @@ static bool mptcp_pm_is_init_remote_addr(struct mptcp= _sock *msk, return mptcp_addresses_equal(&mpc_remote, remote, remote->port); } =20 -bool mptcp_lookup_subflow_by_saddr(const struct list_head *list, - const struct mptcp_addr_info *saddr) +bool mptcp_pm_has_subflow_saddr(const struct mptcp_sock *msk, + const struct mptcp_addr_info *saddr) { struct mptcp_subflow_context *subflow; struct mptcp_addr_info cur; struct sock_common *skc; =20 - list_for_each_entry(subflow, list, node) { + mptcp_for_each_subflow(msk, subflow) { skc =3D (struct sock_common *)mptcp_subflow_tcp_sock(subflow); =20 mptcp_local_address(skc, &cur); diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index ae28c96adb91..8436e66daab6 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -96,13 +96,13 @@ u8 mptcp_pm_get_limit_extra_subflows(const struct mptcp= _sock *msk) } EXPORT_SYMBOL_GPL(mptcp_pm_get_limit_extra_subflows); =20 -static bool lookup_subflow_by_daddr(const struct list_head *list, - const struct mptcp_addr_info *daddr) +static bool has_subflow_daddr(const struct mptcp_sock *msk, + const struct mptcp_addr_info *daddr) { struct mptcp_subflow_context *subflow; struct mptcp_addr_info cur; =20 - list_for_each_entry(subflow, list, node) { + mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); =20 if (!((1 << inet_sk_state_load(ssk)) & @@ -673,7 +673,7 @@ static void mptcp_pm_nl_add_addr_received(struct mptcp_= sock *msk) mptcp_pm_addr_send_ack(msk); mptcp_mpc_endpoint_setup(msk); =20 - if (lookup_subflow_by_daddr(&msk->conn_list, &remote)) + if (has_subflow_daddr(msk, &remote)) return; =20 /* pick id 0 port, if none is provided the remote address */ @@ -1099,7 +1099,7 @@ static int mptcp_nl_remove_subflow_and_signal_addr(st= ruct net *net, goto next; =20 lock_sock(sk); - remove_subflow =3D mptcp_lookup_subflow_by_saddr(&msk->conn_list, addr); + remove_subflow =3D mptcp_pm_has_subflow_saddr(msk, addr); mptcp_pm_remove_anno_addr(msk, addr, remove_subflow && !(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT)); =20 @@ -1237,7 +1237,7 @@ static void mptcp_pm_flush_addrs_and_subflows(struct = mptcp_sock *msk, =20 entry =3D list_prepare_entry(entry, rm_list, list); list_for_each_entry_continue(entry, rm_list, list) { - if (mptcp_lookup_subflow_by_saddr(&msk->conn_list, &entry->addr)) + if (mptcp_pm_has_subflow_saddr(msk, &entry->addr)) slist.ids[slist.nr++] =3D mptcp_endp_get_local_id(msk, &entry->addr); =20 if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr)) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index d838e8ea65fd..ff0bbd96cd09 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -283,7 +283,7 @@ void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk, /* only delete if either announced or matching a subflow */ if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr)) anno_nr++; - else if (!mptcp_lookup_subflow_by_saddr(&msk->conn_list, &entry->addr)) + else if (!mptcp_pm_has_subflow_saddr(msk, &entry->addr)) return; =20 alist.ids[alist.nr++] =3D entry->addr.id; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index c84e630c6e57..2987f88f465a 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1139,8 +1139,8 @@ bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *m= sk, const struct sock *sk); struct mptcp_pm_add_entry * mptcp_pm_del_add_timer(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, bool check_id); -bool mptcp_lookup_subflow_by_saddr(const struct list_head *list, - const struct mptcp_addr_info *saddr); +bool mptcp_pm_has_subflow_saddr(const struct mptcp_sock *msk, + const struct mptcp_addr_info *saddr); bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local, --=20 2.53.0 From nobody Mon May 25 18:15:47 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9B5F83264EF for ; Mon, 18 May 2026 12:59:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109165; cv=none; b=bOf2VV6gVM71yZMhr7EFB/4Td+iHbQTr4Y9tAAfCPLJmS0BQ/6pKGXXTTEVIMh1X3PA+Gbe44uRgCEBkh72o79vsXh9StRkoaVT1tTpJhrVqg9CFhTbXozToHn3ZsnrxmRId/UWo73/nJKDDzfcVLZNk0hgOQMdFlr7KLmJw2Uw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109165; c=relaxed/simple; bh=/CBXg61tpkYkvn48k1RHmRfWg+W+ePf2UQAkqx1aSPk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=N5IxsPWSKEE8OGhRLiPBfjhM/GNad/MVfT9RCDSpTQp3FUqG2FnIBCQP+Xq+O2fUmpofyko5ATNadZ3YAAa/FoqiCiXlj+/5DyIsxBddsB9iQkaWfUKQJis9h62FoIAh/D+oxEmGEz8bh3udEzsknaO/IgJ00WvNXX8HCmmldhs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OSc3098J; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OSc3098J" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6CDA9C2BCB8; Mon, 18 May 2026 12:59:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779109165; bh=/CBXg61tpkYkvn48k1RHmRfWg+W+ePf2UQAkqx1aSPk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=OSc3098JEowBl4l1Nqfm27A1hG62ebQxJGxj36imkN1lr3iRPEjeeHzVgwDDOvn0r QmZdZomP5bBtIa782zmJZnKAUy/F9ftcALEcYm7JVqWlkMWkw3Le9Tljv4Cu4J+piz vngq0J0f5NKmoY0ZSZPSXjYXt2qxG5+kcNzC0yM6ObGNTI8OlHC8zQGdOG+NnWmtRM BjHMXFcIRqo5U8BYanbIjsIeaTM++ooinFHLPcF4z/8bmb5943jUqiJ+W6Scq01Kfj i07DPvkhbiIKJZW9MdPAZ9ur35N1njUgSvonw3PODbFHd8ZZhV7LGqw0mpvF3hhG21 rG+VRfQEGFP1w== From: "Matthieu Baerts (NGI0)" Date: Mon, 18 May 2026 22:59:11 +1000 Subject: [PATCH mptcp-next 07/12] mptcp: pm: rename add_entry structure to add_addr Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260518-mptcp-add-addr6-port-ts-v1-7-f1ca26977fcd@kernel.org> References: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> In-Reply-To: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3943; i=matttbe@kernel.org; h=from:subject:message-id; bh=/CBXg61tpkYkvn48k1RHmRfWg+W+ePf2UQAkqx1aSPk=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqCw0h6ftuK8SKkEo+g2OIJeusY0/q9Khjhf8DZ N/v4scJsUaJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagsNIQAKCRD2t4JPQmmg c9aXD/9Usw0uLg3XDpbyIBJJLu88rGlZdEwT4HvGJ8RSujLpCDEb+CpsDHDsYpr8LDTV3zPEOwg hGmz/oV+fIA+ek3vEYi3ZnrNp2ncK+kVyYgAwCHSCDrpDJKeTwNvrAfVo6KPTbQtOFQ5l7bAoOz pcUGP/nqnmJEsCy2pAZtJvf44CgGNtuSBl3I2BJ/+pKFduruqlEaU4HHSYJ/EbkdYWHgZws9fqR GFXjgEdUR2PAGZradb3FfYRUfsu+cH4PXERROd2/G79azcv0fZR4CbQlVs/bj9ezeSHUk2ytbaU g13KsIzLlX8b48nsdBntG8m04Hg+IGbKija6G20kROFmSwQCMvBr/ZbxtKmJc6pZOuvDKSuIsUl +jkj+bVQ8pGZt8SeXp9d2xRo3TGt0iDqe7jrDdaGH5xHIACd6ZCsuNdlDRX9etnU7tBbVsin592 x6sWFTN51g6TQSTmU5Je4Uf9ZBao6UVt2XzgyUNKJtcnh1B88wGROYP06A7JvWxGVe0BRcqE2ux Pq/KAhkbYTo8qFzljejRvpfLSV/vSD6A0cETqgF+YU8r1yEy3zrnogawfZ34RCDhGHqhmvYPmhH vDTIeHTd2u45HW37ljEWyy1H2YMQFNYVE49FGwFwtwKuu6lorUznLpTyhxI69XxtvYuBHoCMruo pkLctxKJWJyTTCg== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Using only the 'add' prefix is confusing: does it refer to a generic added entry or address, or specifically to ADD_ADDRs. Using add_addr removes this confusion. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 22 +++++++++++----------- net/mptcp/protocol.h | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 55d6427bab92..0a86b69ee214 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,11 +397,11 @@ 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 mptcp_pm_add_addr *entry; struct sock *sk =3D (struct sock *)msk; bool stop_timer =3D false; =20 @@ -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 2987f88f465a..16424229fe15 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1136,7 +1136,7 @@ int mptcp_pm_mp_prio_send_ack(struct mptcp_sock *msk, bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *msk, const struct sock= *sk); -struct mptcp_pm_add_entry * +struct mptcp_pm_add_addr * mptcp_pm_del_add_timer(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, bool check_id); bool mptcp_pm_has_subflow_saddr(const struct mptcp_sock *msk, --=20 2.53.0 From nobody Mon May 25 18:15:47 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E47C947A0D7 for ; Mon, 18 May 2026 12:59:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109167; cv=none; b=FrrK17OAyBeDwWO3qQJ8P+OnzpP/INwohEJusR/192X2DqeN7mnoV5sydLjFEB+TZXffOBoWjm9h+F6QPQ//O3cmYDLRqKXzxn1ih5GBGDydt61Fo1VJxaBjOiOHqtKSNirVcdX36D3PK/09qG8r9TIvgfr/B3cljgo9SyG8Jmw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109167; c=relaxed/simple; bh=yFQ/EfcPUhA/g59GNXLRhGbbWSDc4DDgwCGry1hLjk8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kiU0Wr0qOkHcKTEfBLMMu1sFumNCGIy63UFgZIXiv4F86F+sltmbjGDU9pjTLmIYBGLcolDm0kfCLHhSFP/fuQDaZxQFW60q4fsyuikbK+HpL96dMYsSwNFjOavO7g62Y/5PRmke3K4TV9hVKe75Xyth7yfK7IC4PTpJHhzvamo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=LrN5QMKj; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="LrN5QMKj" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C36BFC2BCB7; Mon, 18 May 2026 12:59:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779109166; bh=yFQ/EfcPUhA/g59GNXLRhGbbWSDc4DDgwCGry1hLjk8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=LrN5QMKjGUWTWUPnrU6B86k1a4/pnU/+nf7uZ+V8SNvjxuK1j0TaUy/Gq+P9o5QqQ Q8yMVNy0pUENkbJJIJE960/F3xzGlMbAVGhIdvJSrRpfCxHD9/vC4RVpgWLTySdLC4 6KAxZjAGxGterU75AAlTKm4H8WUywoqXa8I9AgvvaCRZqd3ms1pD/far1D1mgMn/gO Nrb920ZDFbuNJVmjHSQgCeziUxhjMi31N+6TyaN/8zcF84rLGyZNreddN/jzz0S3qY UrzHQqH5hKmEc5mlVE9dnx56Xm7ugTg0IkerkJtY5XG4u9f64nIkVUoFqFKuoLPgCS 2IFCE0kw7kM9Q== From: "Matthieu Baerts (NGI0)" Date: Mon, 18 May 2026 22:59:12 +1000 Subject: [PATCH mptcp-next 08/12] mptcp: pm: uniform announced addresses helpers Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260518-mptcp-add-addr6-port-ts-v1-8-f1ca26977fcd@kernel.org> References: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> In-Reply-To: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=11491; i=matttbe@kernel.org; h=from:subject:message-id; bh=yFQ/EfcPUhA/g59GNXLRhGbbWSDc4DDgwCGry1hLjk8=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqCw0h1DK2WQpQhdoVHHaHRbv+AJn7ERyi+FrMX ywkKjXDDSWJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagsNIQAKCRD2t4JPQmmg c2RKEACzv0ug5+zYRRqnYGXJ/vapmU+vieqWvTK2thmtLXwtmdtsnMGWM96FK170mS8E+5+SF7F JumR32SllJn+bnDYwin4PA8vk1Q6q7Lau1B7z0FdU7Fbu0Esh27ELiM0Gn1HQ3BWCcrpkG6nP3L oCU328gyr/FeefeOCJ6ZP1puNdH7/Sh8Tar4rJpm91oZrN+wfyCm43b3G5rpF+dyEAXkviNVwyQ GCP74l1QQF30qt80j2caKUAapXtAqkWb4zAjU1jj+y0pRfSjZWY8ouYnAAO06rEtwJdKFRHLCnd w+lMCczqhNbQKTU2cHRqDkb0c7GTlfkj6BT8YVUvsQD1AFEuRbTwXmKu+MFb7DPSkWsgVT25eME XVn2xLnZC1YjMGdTY5ksY+6pt8rKMIF6mIp+aRusPGjIEKMK1XyPVT19qAO2rO76QDyDPCWJwtc ujzC/svo2ZhCPn4sKDAXaXEmRyL7L66ALk3NDqmeXXNB9ZIhH47B3v9f1NsoSc/pUWuYO2S/c28 j/9+8M/GPj9bezVGagXMQ92RW72buAjI1mcC7Bn8V0REmCykhgW5Uucvu/r9S0ULF89o+Nri2tT QMb3JkSICAPVV/h4JYvapExphbufPHoUAy5ZO4iTjlL1qBZo2yswQD3LOK1B4xsPCVfCDr1cuay STVxbUT5QAZ6PJg== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Similar to the previous commit, only using the 'add' or 'anno' prefixes is confusing -- generally associated to the action of adding something, or the Latin name for "year" -- and lack of uniformity. This has been causing issues in the past, e.g. del_add_timer seemed to suggest the goal is to delete a previously added timer. Instead, use the mptcp_pm_announced_ prefix. While at it, slightly improves some helpers: - mptcp_lookup_anno_list_by_saddr: no need to specify what is used to do the lookup: mptcp_pm_announced_lookup. - mptcp_pm_sport_in_anno_list: it doesn't just compare the port, but the whole address linked to the sublow: mptcp_pm_announced_has_ssk. - mptcp_pm_alloc_anno_list: it allocates one item of the list, not a whole list: mptcp_pm_announced_alloc. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/options.c | 2 +- net/mptcp/pm.c | 33 ++++++++++++++++----------------- 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, 32 insertions(+), 33 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index a2d2ff7336a0..6514776e9ce4 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1201,7 +1201,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 0a86b69ee214..f36f63f8bc7f 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) { @@ -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 mptcp_pm_add_addr *entry; struct sock *sk =3D (struct sock *)msk; @@ -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); @@ -981,7 +980,7 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, * let the PM state machine progress. */ if (skip_add_addr) { - mptcp_pm_del_add_timer(msk, addr, true); + mptcp_pm_announced_del_timer(msk, addr, true); mptcp_pm_subflow_established(msk); } return ret; @@ -1169,7 +1168,7 @@ static void mptcp_pm_ops_release(struct mptcp_sock *m= sk) =20 void mptcp_pm_destroy(struct mptcp_sock *msk) { - mptcp_pm_free_anno_list(msk); + mptcp_pm_free_announced_list(msk); mptcp_pm_ops_release(msk); } =20 diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index 8436e66daab6..331f6fa99014 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -374,7 +374,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(stru= ct mptcp_sock *msk) /* If the alloc fails, we are on memory pressure, not worth * continuing, and trying to create subflows. */ - if (!mptcp_pm_alloc_anno_list(msk, &local.addr)) + if (!mptcp_pm_announced_alloc(msk, &local.addr)) return; =20 __clear_bit(endp_id, msk->pm.id_avail_bitmap); @@ -1054,7 +1054,7 @@ int mptcp_pm_nl_add_addr_doit(struct sk_buff *skb, st= ruct genl_info *info) return ret; } =20 -static void mptcp_pm_remove_anno_addr(struct mptcp_sock *msk, +static void mptcp_pm_remove_announced(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, bool force) { @@ -1063,7 +1063,7 @@ static void mptcp_pm_remove_anno_addr(struct mptcp_so= ck *msk, =20 list.ids[list.nr++] =3D mptcp_endp_get_local_id(msk, addr); =20 - announced =3D mptcp_remove_anno_list_by_saddr(msk, addr); + announced =3D mptcp_pm_announced_remove(msk, addr); if (announced || force) { spin_lock_bh(&msk->pm.lock); if (announced) @@ -1100,7 +1100,7 @@ static int mptcp_nl_remove_subflow_and_signal_addr(st= ruct net *net, =20 lock_sock(sk); remove_subflow =3D mptcp_pm_has_subflow_saddr(msk, addr); - mptcp_pm_remove_anno_addr(msk, addr, remove_subflow && + mptcp_pm_remove_announced(msk, addr, remove_subflow && !(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT)); =20 list.ids[0] =3D mptcp_endp_get_local_id(msk, addr); @@ -1240,7 +1240,7 @@ static void mptcp_pm_flush_addrs_and_subflows(struct = mptcp_sock *msk, if (mptcp_pm_has_subflow_saddr(msk, &entry->addr)) slist.ids[slist.nr++] =3D mptcp_endp_get_local_id(msk, &entry->addr); =20 - if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr)) + if (mptcp_pm_announced_remove(msk, &entry->addr)) alist.ids[alist.nr++] =3D mptcp_endp_get_local_id(msk, &entry->addr); =20 if (slist.nr =3D=3D MPTCP_RM_IDS_MAX || diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index ff0bbd96cd09..8a342a65bd34 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -228,7 +228,7 @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, stru= ct genl_info *info) lock_sock(sk); spin_lock_bh(&msk->pm.lock); =20 - if (mptcp_pm_alloc_anno_list(msk, &addr_val.addr)) { + if (mptcp_pm_announced_alloc(msk, &addr_val.addr)) { msk->pm.add_addr_signaled++; mptcp_pm_announce_addr(msk, &addr_val.addr, false); mptcp_pm_addr_send_ack(msk); @@ -281,7 +281,7 @@ void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk, int anno_nr =3D 0; =20 /* only delete if either announced or matching a subflow */ - if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr)) + if (mptcp_pm_announced_remove(msk, &entry->addr)) anno_nr++; else if (!mptcp_pm_has_subflow_saddr(msk, &entry->addr)) return; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 16424229fe15..885c5722d79c 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1133,16 +1133,16 @@ int mptcp_pm_mp_prio_send_ack(struct mptcp_sock *ms= k, struct mptcp_addr_info *addr, struct mptcp_addr_info *rem, u8 bkup); -bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk, +bool mptcp_pm_announced_alloc(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); -bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *msk, const struct sock= *sk); struct mptcp_pm_add_addr * -mptcp_pm_del_add_timer(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr, bool check_id); +mptcp_pm_announced_del_timer(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr, bool check_id); +bool mptcp_pm_announced_remove(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr); +bool mptcp_pm_announced_has_ssk(struct mptcp_sock *msk, const struct sock = *ssk); bool mptcp_pm_has_subflow_saddr(const struct mptcp_sock *msk, const struct mptcp_addr_info *saddr); -bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr); int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local, struct genl_info *info); int mptcp_userspace_pm_set_flags(struct mptcp_pm_addr_entry *local, diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index d562e149606f..8e386899ceb9 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -235,7 +235,7 @@ static int subflow_check_req(struct request_sock *req, pr_debug("syn inet_sport=3D%d %d\n", ntohs(inet_sk(sk_listener)->inet_sport), ntohs(inet_sk((struct sock *)subflow_req->msk)->inet_sport)); - if (!mptcp_pm_sport_in_anno_list(subflow_req->msk, sk_listener)) { + if (!mptcp_pm_announced_has_ssk(subflow_req->msk, sk_listener)) { SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_MISMATCHPORTSYNRX); subflow_add_reset_reason(skb, MPTCP_RST_EPROHIBIT); return -EPERM; @@ -926,7 +926,7 @@ static struct sock *subflow_syn_recv_sock(const struct = sock *sk, pr_debug("ack inet_sport=3D%d %d\n", ntohs(inet_sk(sk)->inet_sport), ntohs(inet_sk((struct sock *)owner)->inet_sport)); - if (!mptcp_pm_sport_in_anno_list(owner, sk)) { + if (!mptcp_pm_announced_has_ssk(owner, sk)) { SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_MISMATCHPORTACKRX); subflow_add_reset_reason(skb, MPTCP_RST_EPROHIBIT); goto dispose_child; --=20 2.53.0 From nobody Mon May 25 18:15:47 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2ECA446AF3F for ; Mon, 18 May 2026 12:59:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109168; cv=none; b=E5nnzRfaI6D5s7rlwWIfMw+zcrkczmGSsFANro2zuET1S7Su7X53qrmZeUaEhd4ZpjOJa6Ess8OloU4SznBYSUfxVOtruxQ7Zm5OjjvbuYKQQysxOgYIfdLLHXwU1gEzwhs91mnDLWbCujf1ITfLRXp9ze+udNpJlf2FN/P+DEY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109168; c=relaxed/simple; bh=4YXgrpJlYIcCyQsljFW37dRbOVK8UkcsPHnGFTZcjv0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=n+9HOtPVIz2oK4a5YvppW2Rlnc+K2WXs1yD1Xqa3PP4JAvvpXFaPcyg81nIgljz8OUY9GT2YzoynKFeSnEGgxMy7god+4OhUTQGiQhcwp8hWjelLSrdxQaAZWHF8HM19yGehnwd/STrUGdBZ4fZSW4XrqXCJU2HZvO62Rrw7tEg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XmVSEiEH; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="XmVSEiEH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3D37DC2BCB7; Mon, 18 May 2026 12:59:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779109168; bh=4YXgrpJlYIcCyQsljFW37dRbOVK8UkcsPHnGFTZcjv0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=XmVSEiEHLQFrM8XyxsSlUt9Iv0bJyVw8s8G3KRsIKwiQnOYWBZmhKGA2DuAIQ3SRl VIM77ATUr8h/K3XH1qoLxcdC9A67V6T6njHKFq76wsoOE7WMgWfneA4z3OpFPPUEZd nmacTHvUVDhOmwVCWQxOnxzrlE8Jer63YTDcvwqfAqovgzqsVpm63DV6MPR5UDCKag IpXPPZoH5tNsu7ZrfWPQp37KZEMklnET5Dxun4cV6xALFmQ+A8EUleBB6Kkv63F9JO qWZiwnKxpi9Ks+Dtdp6VPL2q9EJfr1Ac0jwI/MKexYJwSptVYBwJ7G22XVer5W/nFH 3LzeO0X3y3KFQ== From: "Matthieu Baerts (NGI0)" Date: Mon, 18 May 2026 22:59:13 +1000 Subject: [PATCH mptcp-next 09/12] mptcp: pm: remove add_ prefix from timer Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260518-mptcp-add-addr6-port-ts-v1-9-f1ca26977fcd@kernel.org> References: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> In-Reply-To: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2702; i=matttbe@kernel.org; h=from:subject:message-id; bh=4YXgrpJlYIcCyQsljFW37dRbOVK8UkcsPHnGFTZcjv0=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqCw0hE95qsNyViHhzY7z9fG7vicPeaAb1KDb4w t69N/plcLCJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagsNIQAKCRD2t4JPQmmg c2hkD/9ZAHU2gq4oTHksPiMP/XWtnJxJcjj+Gkol12M8Mne3LUWJPQklOoXo8TcjspKSbLQrZ6d Ois94L2jcZ+PGIxN/Zzk0e1lc02zzUTXYrmUTKf6+dYwzBgZe9s90CVZQOOai+X/nX9XKbnQrKv DTW8xegohUhQb79p8s41CO/GBas1xfX4OSl7McUgcJtA9nqvBM2ddOQ5aUQgXu2CqjVZfLfa33+ td2gLHAz25rsnTUivDXr8wv9YrPeKO0Cz5Q9gdJ51GZxgU55pL759HDj28by2ESNIlG0Zo1xZgW JSFSbaMCNKMMqzZyXEpQ3Zsxfzv6QbIKZWGqJLkZc1s+bE+64GbwXD1KJped1riFDtu+FfLMfct Am7Yg8hy9kmR3035/twBQWs1Z97Sg+5NuAsLkj3smuy7lAD9NBP/yGfq1K8qXr0Q55d4G7JAAyB ydaRdphL6zCPiHjnTgvTxZ3uL9S0Sv2ltAFioWmNxcK26SqAacTTxj4cqKcoqs2NAmaySQxqr+D gY2e4XGeoVSpaw5nA+ScT+hFufLAfR63kFzvuWR4GQmsWY7gFAymmfPwupvdHkQG5BA1se7OOCl 3z8j+QZdYgp28cezEycptExUYHQEgeAhA12njY5f6qJNguE7bpsTWLdj4z+oZ88ipjhCarhfsf1 vY/NLOj0Nt8diyg== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Similar to the two previous commits, using the 'add' prefix is confusing, also confirmed by [1]. Now that the structure has been renamed to include 'add_addr' in its name, easier to know the timer is linked to the ADD_ADDR, no need to add the confusing prefix, or an unneeded longer one. While at it, also update the ADD_ADDR timer helper to clearly specify it is linked to ADD_ADDR, and it is not there to add a new timer. Link: https://lore.kernel.org/20251117100745.1913963-1-edumazet@google.com = [1] Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index f36f63f8bc7f..bbf89074a31d 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 May 25 18:15:47 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EA3DB45349A for ; Mon, 18 May 2026 12:59:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109170; cv=none; b=vBnWQUgK4UgILSu+KncggtDmK18kIEyDvekeROrK1SnMh8H9g9ue6ZoIJLBsIlixPaTq4XrOSRalWYgIm1cBw7pMIVE8NmhrhTvWaoebKA+jO57lH5NTTZCulb292PtBdVCy3yFappIMr3DXqtagh6rSyL1p9waATEuMZmfdnVg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109170; c=relaxed/simple; bh=GQQnEGHiR2G5W85vjFnmPZ8lxi/uhPksmlmXAmDyTQE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PZd4NiW931zU0+0wskPKlUEOsv8BLWZUaeop+xcgWfMAVdntYrTVFyVPimppikf+PX9/hu6vuSL+A0QvVIAyYXCZQwjhXMVgoTfdrKZurBW4JXI7Q6G0cYwZ6u0OgwKBP+t0xNIblvXCB34EAJ5JZ5wtw64ZdoroAGJEjYBN4uQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=oDioGUnn; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="oDioGUnn" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8A1E3C2BCC6; Mon, 18 May 2026 12:59:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779109169; bh=GQQnEGHiR2G5W85vjFnmPZ8lxi/uhPksmlmXAmDyTQE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=oDioGUnnnFy993lWZwqbrx7/4qloC+PaS0+2eb1YtwqAB3sSGXS/vJw0SDHB7M/Pa Wd7Ii9+5IIqnt7TT04DW1ZU3jhSlg10EdhbRBIMKYrvi7OksmXkZYHqAN5nkBZd35f kCgTUcm3Q+tBE43QW4CgRex61Jo3kj6SMaNp+R+brXU6+G4pW6HrTnrNK77wWrAPFD OF2cjf8Ej7p/MHF3l7d/NPu8+KWAz6ABZNSbBFDwmdFXTUB96Ch/NfT51G+sbHT5Zt MBEKimql6086FQvFeE/arPwWhUM2s9xFWS0ADEX0O/+iSm/E91ng6DPk3tb4bK6ql/ p2kUsbMwC2VIA== From: "Matthieu Baerts (NGI0)" Date: Mon, 18 May 2026 22:59:14 +1000 Subject: [PATCH mptcp-next 10/12] mptcp: pm: make mptcp_pm_add_addr_send_ack static Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260518-mptcp-add-addr6-port-ts-v1-10-f1ca26977fcd@kernel.org> References: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> In-Reply-To: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1805; i=matttbe@kernel.org; h=from:subject:message-id; bh=GQQnEGHiR2G5W85vjFnmPZ8lxi/uhPksmlmXAmDyTQE=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqCw0hUixmFw7gUZb4woM7/+D8RxRwhRcf/J5gr vTnruxiBZiJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagsNIQAKCRD2t4JPQmmg czQXEADKmXdRkLgRMJYK/Xo8qY7PFteXwgZnKepsIouIWB7CHPFV3u6OMpoIqtDHEqG2HC7V/tu C//CCpDqJx+o/wcCBSrG153pR55utdOm1h8cjE8YMAOAI1YvH0dvAHnwoU/HCaLgo9FiIn5pbL1 YAfdvdnJufTIwazgYApvXyRidcYOxV+V2CB6FjDHrXSbcLLxWp/gwV2hl1TGe0p0unsZSNGgzKW JunpKpUALx/hJWCGecfU04cpWd006NtxdNcvUd0sYP5thMfU9lm7yGtfXSzPtLaV5vxCMZczOKG s+/hhawtPcUxb1Jfn1IcTkcoDCLbzl1t7Z3+ldEopkJZL3B5rCelfEQqYiyfVIC7+cihbH/OsrD cFlLu6W/e5jsh17P0f1GIqb9y4pucsZwnjDhXSjB5wSIC2chyGCI8O0yyBWP5mjGsXII3VmEG4C ChY2oKwwVng9pNICr/ZEfYMwaNEPFQW7mOejH5XjvP/L5Lm6+DFn1dwtgAxc0AdV3jSJYZAyQbl 814ouE698aFWnNwdon3YYj1K0lNmq5PlLDoBZYMFG8+mepNbUkVXHOaC/ywA4llvOwvnf5jPzy9 3d66hB4R3z27e23IpHTWh18WzTkJeABi/yw5fQs9vNGIIhhmcVlQ9lqkIjm/wEiF8drLlagcX2I OPOvp3XeiyILpOg== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Only used in pm.c. Note that the signature is added above: it is easier than moving the code around, because this helper depends on mptcp_pm_schedule_work which is declared below. While at it, explicitly mark it as to be called while pm->lock is held. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 4 +++- net/mptcp/protocol.h | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index bbf89074a31d..ac9342f6e7b4 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 885c5722d79c..448ba565611a 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1117,7 +1117,6 @@ void mptcp_pm_add_addr_received(const struct sock *ss= k, const struct mptcp_addr_info *addr); void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); -void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk); void mptcp_pm_send_ack(struct mptcp_sock *msk, struct mptcp_subflow_context *subflow, bool prio, bool backup); --=20 2.53.0 From nobody Mon May 25 18:15:47 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1992A3290A5 for ; Mon, 18 May 2026 12:59:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109171; cv=none; b=T3GHVM+KfkVHECjVj8j2GMtk9LZorpJdg1ucIk2jcBjHiblV7OWZc7C7ZFWIZWiEHakIOSyZCbpkYq3HXnpEBYqv9MdU9gTvx0pJdmQ+mlUwZ41SHPu1EMqsKKj4edqKy6X2Uun1DezBVn9gsh0qqpiAJIUCk26C5GGHCSPq5ZM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109171; c=relaxed/simple; bh=LP1ojt6bJlTdj3otDpNxbzTstWJmo46VDAB1gqRsFTo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=o5HB3Mgc4t2vHMhszZqLNRqAF/tE1wqJe/8DbMxWmnhDYNJOelbJ9SjA1734/Yh79JlXF0pNc7cdaE8sSzHGyFlVLRtfjvZ2J+b4Lrp1L9fKjWev00QLZhS+hBaI7eezT84h3+PaVmWkvlg/FcMG2TN4bL+YuB1ykt3LXuymXNE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XIkvkDVb; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="XIkvkDVb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EFA88C2BCB8; Mon, 18 May 2026 12:59:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779109170; bh=LP1ojt6bJlTdj3otDpNxbzTstWJmo46VDAB1gqRsFTo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=XIkvkDVb8yTyag2AUhgoYYr9iRwoPx/86WAwXWi2zIIK7JEvwFH2O1QzQThB6KAS5 MQTpK184JD4uXoVNdEjF615W2e6t1HDMqEGJ/PwFfnkgkbsZFSgATSM0xKVpUdg2/5 wNNj8nTMJk5XHhxPQ6isMn2FZp0LxZprthl2hTF1LEWhGGM4580jI/IRohaL5Vm64h /ZHz4ak0S3SqeXpjMvEPlvqniF/CoJKJd9T7FQBm9l46au/4HS9NrPJ1F80qeqkN8f eY+SoAMp819yfwHTIu/z7yZG5j5956FyrNqgN28iQmSzA2rvJUX6B8PM9fuQNi25NM Vshcxjs9orh5Q== From: "Matthieu Baerts (NGI0)" Date: Mon, 18 May 2026 22:59:15 +1000 Subject: [PATCH mptcp-next 11/12] mptcp: pm: avoid using del_timer directly Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260518-mptcp-add-addr6-port-ts-v1-11-f1ca26977fcd@kernel.org> References: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> In-Reply-To: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5286; i=matttbe@kernel.org; h=from:subject:message-id; bh=LP1ojt6bJlTdj3otDpNxbzTstWJmo46VDAB1gqRsFTo=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqCw0hXTAcW6pKODExQ2nflNxmqVgGWEShFZ0c+ FZ/DE/FWDaJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagsNIQAKCRD2t4JPQmmg cwJ9EADUCvaTBe8FbARUXms/TQlYORgG7vVLIyk0ZirHtQEq5CjQLBQ48lGS5cAH+ofvHbxx4xT iqZaE4W/sdpTx/Hmw0GPOUjNY6BRmfDUdRiG8ttGE9Bk359Mktpj03W86dHIEu3MEgF7L0C10Oz nLPFECEwXElupcpV2tVz6sRyctanA4mA/pEpXqzE9DpuZ8lG4VrVBETx3tmp9WKAqDCQyD7m9XP vpZyKBnXpis8vpkwFNP7Xd5wkJJL3Ud5UCqIwnR5IWrsPsIts/NADGFRbBGYo2HEqK1ptoeifkN u9grfOaCZTK5LjaatdFQfAsNhj1EBCvQuyw7/Hm5mzx4t+fHyNvtxWPAR83J501EpC5krzCj4M7 4GNGhlPvnNcnc/jn7IN1/SlojN0c6wfTyOAtT2wdsv6oLT26TqquyHwLFTAa6EDvMpa3wzPUHI2 p8C6HE7nfj4bub87OKsPBVLHmmfF8QsEeQ3CJLWtMTPiOXo+YJQD39QdCfGmS5tptaBbqwfqNpK elyDIRMJlVdc/R8/67jn7hDhlzOEdJiEK9gRDMv8K9OrDavX6s4LtaEm2GgLuba+qi7bZ4wT9Gw 7fvP5nMvcwSwJQSlQdcsWklcZABvesE9YuKiS6KI1bwhwlSbVl96pBxQW39k7hjQasqohNoUaoZ ZSWVRzUVv3zhx7A== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 mptcp_pm_announced_del_timer() removes the matched ADD_ADDR entry (if found) from the ADD_ADDR list only if check_id is true. That's dangerous, and not clear, because it means the caller should be free the entry only in some cases, and it easy to miss that. Instead, make it static, and call it from mptcp_pm_add_addr_echoed, which is the only case where mptcp_pm_add_addr_del_timer should be called with check_id set to true. Bonus with that: a second call to mptcp_pm_add_addr_lookup_by_addr() can be avoided. Note that instead of adding the signature above to avoid a compilation issue because this helper is called before the definition of the function, the whole helper is moved above where it is first called. Its content is untouched, except the addition of the 'static' keyboard. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/options.c | 1 - net/mptcp/pm.c | 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 6514776e9ce4..70ddde327511 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1201,7 +1201,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 ac9342f6e7b4..cf0a7b44e3ed 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 mptcp_pm_add_addr *entry; + struct sock *sk =3D (struct sock *)msk; + 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 mptcp_pm_add_addr *entry; - struct sock *sk =3D (struct sock *)msk; - 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 448ba565611a..004f8b9c8fdd 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1134,9 +1134,6 @@ int mptcp_pm_mp_prio_send_ack(struct mptcp_sock *msk, u8 bkup); bool mptcp_pm_announced_alloc(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); -struct mptcp_pm_add_addr * -mptcp_pm_announced_del_timer(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr, bool check_id); bool mptcp_pm_announced_remove(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); bool mptcp_pm_announced_has_ssk(struct mptcp_sock *msk, const struct sock = *ssk); --=20 2.53.0 From nobody Mon May 25 18:15:47 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 80B643290A5 for ; Mon, 18 May 2026 12:59:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109172; cv=none; b=JvutPu/MB5R7U5Q6KVoVc1ev5MXwFHK9TnbYBRudhnF3cnUG1scZX/k9WI6o/SguKEMpXdzPiMu6bJ7jeZizJHTawK3R9WOuaZQgrgCdezgi+iiNShFVcI9Ncnnl+OJGrAf+bcc7y739NsaPmH14wlEGEG0Emhk/KVs1e4dZaCk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779109172; c=relaxed/simple; bh=hQz6YYZ+kAYwhqLrE1+Fab1nAo3HVOULmc4Cy5jqbzc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=a1+Viglx6u9g380MYTJbH+uH8WS4Z4n+U/RyU/t7Va+Nm8apiD26D3PKwe/0iRPJhQCdAcjYTu8mb3N4Mew2H96Z9fZU5NrJE2+E9KSzmaLV+hD85r+mKv6K3cmk4z+sj5fTkZPXNiw9EyDjgygswn8AGRuVSPA/bAkpEkOu6rc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YmGUHyJ6; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="YmGUHyJ6" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 374F6C2BCC6; Mon, 18 May 2026 12:59:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779109172; bh=hQz6YYZ+kAYwhqLrE1+Fab1nAo3HVOULmc4Cy5jqbzc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=YmGUHyJ6bGXqXADZfkgrcKsKF1rYUpJweaW0qKuqcgbyFgQ/jHR+KWlvYElPq5SEl /cOyDINQFWYRTW13zG/Y7RTts5iqejtV2zEle3aoDM6L1U8tPHVt6QTolhXYF+FzuZ Kfx5QFtsLca3SrhuAoKuaLga2jEWWr6sRcLm2N3bKC+W/lRQiCU6eovxU7nFB9hV+4 Vv0Ajyt0lufGdDp1kaAQ+32RNhPM3Hp9gdyR2iHAagok5Kp+1RPtEyBg0PJozT56YG LEQp08OF2+b9Y4MQDRvQQMW64Dflt+XO7pLRVzMc6Y1M4JYEJ0knCDUYBbqak5ZuRu NIc6XFs0WAzow== From: "Matthieu Baerts (NGI0)" Date: Mon, 18 May 2026 22:59:16 +1000 Subject: [PATCH mptcp-next 12/12] mptcp: pm: avoid confusing check_id in del_timer Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260518-mptcp-add-addr6-port-ts-v1-12-f1ca26977fcd@kernel.org> References: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> In-Reply-To: <20260518-mptcp-add-addr6-port-ts-v1-0-f1ca26977fcd@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2818; i=matttbe@kernel.org; h=from:subject:message-id; bh=hQz6YYZ+kAYwhqLrE1+Fab1nAo3HVOULmc4Cy5jqbzc=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqCw0hmgykSWGCdrGPj2TJOJgLvYBEFlKck3Y0z BPY8iDjeYaJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagsNIQAKCRD2t4JPQmmg c3GvD/0czQUTeheultKM4XpKswgfRvgnNbwmW6oVk59nuw0YNoN/qikbNXTbyFmCUBbF9VOTLdU mdVZa92ZVwmkCmgDY/uD+sSl2+qRpmytxzXzld+sEmaIrx8ydJE3j4Yp1JYVeg4s/NITwQ7/Vu6 StGdBkQN3yP7VkRY55ImZoRjdhKYUKVJf6gx6+zjeQAQWeae9k8dgCXoFYMH0SEEgCgn/Jkb/jw 6t7j0M56jtdtN43jFzvdA5SA+NuBwVUL0931eA9bFeTankB0L0cEiHG0T655bhx7Bc/Wq2/Scfg KsASp2MOgsRsDc6IunZUisMZRGxhMkK18xvqm0aDpe75rCghnUZdyFcCESuv5xnXkX8FSKdFgZ+ OCIzjdN/TQ/d3kr48KwTqmUEI7OZHldcugOu4NP0DHoDtSF/jjPz4T4wr7uzwTZr+c1QJDEZPMT jBlzYbOd8pJEohFY9IXnMuRu/oopJYiEJtgrgU6XgmT8hQsV/dbBfkMS94ifLp+/9aCt+AVTFyu 8Ray+ZQMqPEvWnAgB9mfrM1KaBUwgCfud/nZ5RJn4SUYZb3Bpku6S+RkS30BZrfKOU8mKyZvirg aLvvTb1BYXEI4R2TKkfjSCZcpZlie/U/I1kiCZxAHXIMH17WqXZYDn6dN+tWiYzNiFDuo6WW+ZP 1kwkPUjwHELy2hQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 We an always check the ID in mptcp_pm_announced_del_timer: this check is needed when an echo is received, but in other cases, the caller will use an entry that was previously added in the list, so they have to match too, otherwise that's not correct. After having removed this extra check, the variable is only used to know what to do with the list and the timer. Use del_list instead of check_id: clearer that the action will remove the entry from the list. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index cf0a7b44e3ed..5b4aad2a2b27 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -151,7 +151,7 @@ mptcp_pm_announced_lookup(const struct mptcp_sock *msk, =20 static struct mptcp_pm_add_addr * mptcp_pm_announced_del_timer(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr, bool check_id) + const struct mptcp_addr_info *addr, bool del_list) { struct mptcp_pm_add_addr *entry; struct sock *sk =3D (struct sock *)msk; @@ -161,11 +161,11 @@ mptcp_pm_announced_del_timer(struct mptcp_sock *msk, =20 spin_lock_bh(&msk->pm.lock); entry =3D mptcp_pm_announced_lookup(msk, addr); - if (entry && (!check_id || entry->addr.id =3D=3D addr->id)) { + if (entry && entry->addr.id =3D=3D addr->id) { entry->retrans_times =3D ADD_ADDR_RETRANS_MAX; stop_timer =3D true; } - if (!check_id && entry) + if (del_list && entry) list_del(&entry->list); spin_unlock_bh(&msk->pm.lock); =20 @@ -173,7 +173,7 @@ mptcp_pm_announced_del_timer(struct mptcp_sock *msk, * We hold rcu_read_lock() to ensure it is not freed under us. */ if (stop_timer) { - if (check_id) + if (del_list) sk_stop_timer(sk, &entry->timer); else sk_stop_timer_sync(sk, &entry->timer); @@ -189,7 +189,7 @@ bool mptcp_pm_announced_remove(struct mptcp_sock *msk, struct mptcp_pm_add_addr *entry; bool ret; =20 - entry =3D mptcp_pm_announced_del_timer(msk, addr, false); + entry =3D mptcp_pm_announced_del_timer(msk, addr, true); ret =3D entry; kfree_rcu(entry, rcu); =20 @@ -734,7 +734,7 @@ void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, =20 pr_debug("msk=3D%p\n", msk); =20 - entry =3D mptcp_pm_announced_del_timer(msk, addr, true); + entry =3D mptcp_pm_announced_del_timer(msk, addr, false); =20 if (!entry || !READ_ONCE(pm->work_pending)) return; @@ -985,7 +985,7 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, * let the PM state machine progress. */ if (skip_add_addr) { - mptcp_pm_announced_del_timer(msk, addr, true); + mptcp_pm_announced_del_timer(msk, addr, false); mptcp_pm_subflow_established(msk); } return ret; --=20 2.53.0