From nobody Mon Jun 8 07:26:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D172A548EE for ; Fri, 29 May 2026 03:22:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024922; cv=none; b=pBp8CmAaw1FgoO794ygldL8kT1nDvwZzw4lRim9DHbelWNkF2hjcVkuxyxhGRAdJmKWenNlktnh/BtE//ZaAkGFz8+x+SZ1QDhO+FJX5yQ3vHrt2fW0w1uJJ89O1zPkHjis4Rf2YnSuoR/15IrqQelPWDDrH1iv4XwKMb68CuJ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024922; c=relaxed/simple; bh=lJGGm/Kdxb1DLcUzj7sFX/KOoBTXr86KZoluUkbaq+I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TN6UhrVa40OulSapEmFFF1NNkIvWnMuZ39XdebpD6vR80HXlE21TCpl8HSVZJJ3J2hsFB9lifSuuWx70FAFmTwaqMhUTVHl3b5vVqwOdvhH9m1IFSgNOmc0GrUyBPFFPLAmU5E0iRc3dPriu7CMDqcv1WK5zOJWZhMJHbhwi8cI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cwcC5J0N; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cwcC5J0N" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 001451F00A3A; Fri, 29 May 2026 03:22:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780024921; bh=Vb2dUnvubTYp4bbzZFQ6tugxo8Si6uZKEbksX61wpjY=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=cwcC5J0NfJqP75YXw1OflgsZVDiNf8AGk33YZ57j9wKSj1qhk6oY9BhlPUAzFeq+G TcHz+vMiaxfuvNoEBIcMKZ51Viud3vFE60hnpWMxW9lIaknPG+OeU2qaepdkICzpIH /MSLE1IW6qhf9s9416ySTtwc1VrWQPZgt90RD+rdbDPVpQuORU2RYPaJCat+1ZGzAL SN/fkG9L3HGprb+7Y5fodzeOKWW7Jl1jRCGzk/ShFlUFsTI3LpZx78TxQYBozd9dw6 HE21A9riaATUhC4qPQ3chLxf/tBq1XSybkEYNkk9drm+wuOacP56Q9S6uKVBlWj/JN Ond7dWuKBVnIQ== From: "Matthieu Baerts (NGI0)" Date: Fri, 29 May 2026 13:21:39 +1000 Subject: [PATCH mptcp-net mptcp-next v4 01/15] mptcp: pm: avoid sleeping while holding rcu_read_lock Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-mptcp-add-addr6-port-ts-v4-1-cea393fa33a2@kernel.org> References: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> In-Reply-To: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2104; i=matttbe@kernel.org; h=from:subject:message-id; bh=lJGGm/Kdxb1DLcUzj7sFX/KOoBTXr86KZoluUkbaq+I=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqGQZWXIQBgxXUV6ck/NNNIinH8+qui3kxbrwkQ i74BmyMOqSJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCahkGVgAKCRD2t4JPQmmg c+rQEADb3DDB3hFYguNItpCjv3co/8ooIBOVPPVM9fndEA46DYa1KhGuTxMViFTKhijCrttVPiG QcyzH7Mm07Qq5r8G2x8fCqMonHoBKZTrRryqQgjSUUDX6rld/8kgctkhlPD5E5ZJWwjvKyPsD4i ASjDz0QUU9h8MiSfLq5fFWLzj9BHvzM8x5t3T1/IzTlr5h2DfUr8iECplIRlV0DlMWwoDzP4CJM X7gc1RJnHfk6hi8luIyLmDQJxZVfpHs/Zcwx/FRpM7omcBJzpFkvVZziC4qlEJ3su88+vjAmdY4 PmSBKEhzLlnVgWJhrqJjWRWNaiPYNoF6LIcZu71fXA7Af57f/Dr8JMNpWb+sxO7WNeBRlMlNya8 bXA1tzY3sH9Q9bBWouHkYN8QNwR+M36VzjRqEQusxCSJ7cia8G9tAx0g56CcjXHiaGDwhAmvXSk U+Qn1xhEauuMnRGPALjsjkWap6HZDOaxDYK30ETyQC0n1fYaBKa4r4ancjvXwphyYYUc9t7zUUq YmFVlcuXKjbki+wqch5GghxBxCGlXn4GH/80dde0KgvkkqCLw8N1JMdenHWK7OUXBqwEtJrhc3d DHIUgdNLvxSjks7t5/mBow8+vXNULYPQWr18NW8+ftzUkFycYBcFjct3EdCvLEg9h1G0LDietve 2ytfMTjDBj36o/Q== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 sk_stop_timer_sync() calls del_timer_sync(), which spin-waits for the timer callback to complete on non-RT kernels. But on PREEMPT_RT, it can sleep. Sleeping inside an RCU read-side critical section might trigger a lockdep splat. Instead, keep a reference to the timer, under rcu_read_lock, and call sk_stop_timer*() without the RCU lock. While at it, apply the reversed Xmas order when declaring variables. Fixes: 426358d9be7c ("mptcp: fix a race in mptcp_pm_del_add_timer()") Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Mat Martineau --- For -net. v3: sk_stop_timer() should still be called under rcu. --- net/mptcp/pm.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 35427bee2963..851f6886ad23 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -401,9 +401,9 @@ struct mptcp_pm_add_entry * mptcp_pm_del_add_timer(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, bool check_id) { - struct mptcp_pm_add_entry *entry; struct sock *sk =3D (struct sock *)msk; - bool stop_timer =3D false; + struct mptcp_pm_add_entry *entry; + struct timer_list *timer =3D NULL; =20 rcu_read_lock(); =20 @@ -411,7 +411,7 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk, entry =3D mptcp_lookup_anno_list_by_saddr(msk, addr); if (entry && (!check_id || entry->addr.id =3D=3D addr->id)) { entry->retrans_times =3D ADD_ADDR_RETRANS_MAX; - stop_timer =3D true; + timer =3D &entry->add_timer; } if (!check_id && entry) list_del(&entry->list); @@ -420,14 +420,14 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk, /* Note: entry might have been removed by another thread. * We hold rcu_read_lock() to ensure it is not freed under us. */ - if (stop_timer) { - if (check_id) - sk_stop_timer(sk, &entry->add_timer); - else - sk_stop_timer_sync(sk, &entry->add_timer); - } + if (timer && check_id) + sk_stop_timer(sk, timer); =20 rcu_read_unlock(); + + if (timer && !check_id) + sk_stop_timer_sync(sk, timer); + return entry; } =20 --=20 2.53.0 From nobody Mon Jun 8 07:26:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DCA692E7397 for ; Fri, 29 May 2026 03:22:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024923; cv=none; b=IMoH8a4hiTmLiJagQFgYw+CKwa6E0l8/svzFu7VgMnVc5GKhEY9exgF6d5QPPpKiTKP92BpX8A7ET1LAHQrjsT+t9MFFCxL4MsZEF7kaA1NFVxDh3QjMhV3cI+fDBRFAFe2Pwc5vXdfOTsoo6n1M4th2kqoKsFjoXHw+gKlVuPQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024923; c=relaxed/simple; bh=3K6SO233n2ggfre5CbdtCEp86GpEbPGt3ku7zH8RiIE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=O5ls2qJBvv6WoaMCnq6dWjNCDCx5bRsNo/EMo3SnnOJwPT7X4QbB5bnDu6iwMYl0cW3d4FXzFGkVUxkPq8ii0tWml9h8/Xauqd2xV/sPdGXKLz5W0X3m1wQNEhw2BcColb4tI9vCxsNYuBBoKhRaXT/i5acuyUyphUQTUVywt6g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dNJZ6bFm; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dNJZ6bFm" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2C0A21F000E9; Fri, 29 May 2026 03:22:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780024922; bh=j5wtZa3ldRyLaVohLtyyQQ4hqdKaYcUUYh3NN/pPqAQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=dNJZ6bFmNsYyRpdeGzUgtHUVITM79aLYAvWu49Y9zByyinXLwPU3o/utNjLgNieJL Xu7NNDkpkHdDUJZYDcv4JFPGqkDMPr1q3gajZYzyf1AQy2RI0TtvkKkGquYuoyeKla NdaoVHbBM/5NgtQTYvyjrOHdxrHI2WdNJkE9d/wj292ZHVriB7u5VMYpFdfm+8uVcW Gu4q4tNjuZhwik+dui2cw0WwAvSZ7zojx8VNt6YbYi66xRgf/sHn78GtiUC66MtO8X 4aVjJqn3KyJmbJwwtFt9BZG492kAS7+V4FkE7Fl9n0+CuH359nkQTM53zkIL3eiafH Iu0QYxkK45MWQ== From: "Matthieu Baerts (NGI0)" Date: Fri, 29 May 2026 13:21:40 +1000 Subject: [PATCH mptcp-next v4 02/15] mptcp: options: suboptions sizes can be negative Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-mptcp-add-addr6-port-ts-v4-2-cea393fa33a2@kernel.org> References: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> In-Reply-To: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4746; i=matttbe@kernel.org; h=from:subject:message-id; bh=3K6SO233n2ggfre5CbdtCEp86GpEbPGt3ku7zH8RiIE=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqGQZWe7+fSpN7St9bClTlRlDpunin3v8O+3OQk TQf5QttV02JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCahkGVgAKCRD2t4JPQmmg c4K/EADxTWcKd6aMilKzp5bRyGFKnVNnDFOzX43o/wI8n0SYNbkLKcNIdnDT2rXWNoswNngf9Mq bBNw9fBZ5I8T6NShLVixjQEoAeDiStgCS1zJBEiVOlMuJUNJDILOYeQhaflcFt5BIAXlJA4P36w qFvd1NAsolb4EJfp7hjTEmL37p6Un4UEXqXgfeYTeTX+0whYKvMYu0AzBnG+MtLF9OgS1BA41bv jouiWAdII7M2FzCD7d1sp97NUP6qxO7TQgoz7Ykw1JQuYtDvjuFrzSujgXmGzsof6md7RNY6Sd6 gjC6TdtiD1zPDB3xYnI5tVG3vDmPUd/WEDMPkOTOgS6KIfkVwQHdHRVoGdtxLhtqtHuvDTh74Xw AQDi377RW3GyA1An1KZN8eGSz6+sWXvawD1DtxZraoG0zGDzNrczQnAESn3xamHrGttF/5rNjat bf8xQ/GxfG2ctdx8Lgq85MKWoTzpgerLbfH3MZvOC00p7Srzl55Q09vrr8/0lUncVjx6kRIQhJ9 sfngOdDhmvfT+GytnmfJAx0A3GOcBeOtLka7rViq4zrPR5+EVR7nEHUijfU3pLIiVptWsscOoQS fGH9Ty0E9feSX5P89/6XZWhG15H1RYCz9tWWA5EnhAEy2m3upEvn5Pocl8RwJj86P7PbGQ/96lt v3hdDOeZtvdYg+A== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Use a signed int for the returned size, because when other options are dropped, the size can be negative, e.g. to send an echo ADD_ADDR with a v4 address, and no port. The behaviour is not changed, because it was working as expected with an overflow. But it is clearer like this, and it will help later on. Even if, for the moment, only the ADD_ADDR size can be negative in some cases, a signed int is now used for all mptcp_established_options_*() helpers, not to mismatch the type, and as a question of uniformity. Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Mat Martineau --- v4: also switch to a signed int for other helpers. (Mat) --- net/mptcp/options.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 2b35bdc113a5..b88e6c314b54 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -447,8 +447,7 @@ static void clear_3rdack_retransmission(struct sock *sk) } =20 static bool mptcp_established_options_mp(struct sock *sk, struct sk_buff *= skb, - bool snd_data_fin_enable, - unsigned int *size, + bool snd_data_fin_enable, int *size, struct mptcp_out_options *opts) { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); @@ -560,8 +559,7 @@ static void mptcp_write_data_fin(struct mptcp_subflow_c= ontext *subflow, } =20 static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff = *skb, - bool snd_data_fin_enable, - unsigned int *size, + bool snd_data_fin_enable, int *size, struct mptcp_out_options *opts) { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); @@ -654,8 +652,8 @@ static u64 add_addr_generate_hmac(u64 key1, u64 key2, return get_unaligned_be64(&hmac[SHA256_DIGEST_SIZE - sizeof(u64)]); } =20 -static bool mptcp_established_options_add_addr(struct sock *sk, struct sk_= buff *skb, - unsigned int *size, +static bool mptcp_established_options_add_addr(struct sock *sk, + struct sk_buff *skb, int *size, unsigned int remaining, struct mptcp_out_options *opts) { @@ -718,8 +716,7 @@ static bool mptcp_established_options_add_addr(struct s= ock *sk, struct sk_buff * return true; } =20 -static bool mptcp_established_options_rm_addr(struct sock *sk, - unsigned int *size, +static bool mptcp_established_options_rm_addr(struct sock *sk, int *size, unsigned int remaining, struct mptcp_out_options *opts) { @@ -748,8 +745,7 @@ static bool mptcp_established_options_rm_addr(struct so= ck *sk, return true; } =20 -static bool mptcp_established_options_mp_prio(struct sock *sk, - unsigned int *size, +static bool mptcp_established_options_mp_prio(struct sock *sk, int *size, unsigned int remaining, struct mptcp_out_options *opts) { @@ -775,7 +771,7 @@ static bool mptcp_established_options_mp_prio(struct so= ck *sk, } =20 static noinline bool mptcp_established_options_rst(struct sock *sk, struct= sk_buff *skb, - unsigned int *size, + int *size, unsigned int remaining, struct mptcp_out_options *opts) { @@ -793,8 +789,7 @@ static noinline bool mptcp_established_options_rst(stru= ct sock *sk, struct sk_bu return true; } =20 -static bool mptcp_established_options_fastclose(struct sock *sk, - unsigned int *size, +static bool mptcp_established_options_fastclose(struct sock *sk, int *size, unsigned int remaining, struct mptcp_out_options *opts) { @@ -816,8 +811,7 @@ static bool mptcp_established_options_fastclose(struct = sock *sk, return true; } =20 -static bool mptcp_established_options_mp_fail(struct sock *sk, - unsigned int *size, +static bool mptcp_established_options_mp_fail(struct sock *sk, int *size, unsigned int remaining, struct mptcp_out_options *opts) { @@ -845,9 +839,9 @@ bool mptcp_established_options(struct sock *sk, struct = sk_buff *skb, { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); - unsigned int opt_size =3D 0; bool snd_data_fin; bool ret =3D false; + int opt_size =3D 0; =20 opts->suboptions =3D 0; =20 @@ -875,7 +869,7 @@ bool mptcp_established_options(struct sock *sk, struct = sk_buff *skb, if (mptcp_established_options_mp(sk, skb, snd_data_fin, &opt_size, opts)) ret =3D true; else if (mptcp_established_options_dss(sk, skb, snd_data_fin, &opt_size, = opts)) { - unsigned int mp_fail_size; + int mp_fail_size; =20 ret =3D true; if (mptcp_established_options_mp_fail(sk, &mp_fail_size, --=20 2.53.0 From nobody Mon Jun 8 07:26:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4FDF9311C2F for ; Fri, 29 May 2026 03:22:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024925; cv=none; b=SQ5KO9b8218lENRGJTkOo3B5Rhm2c/Xxro7KJutEv6tF2mqeF9Uqp5wwanbraM3dLgCx6MO13hBF7vFHmszq4w3gJAODweVXkwXipfzbU9Rb46gC9aQ1VQ7eH3ZsJiDNLCiWpFP2QjsEjjWEroqC568fOU+7POrkYUXrX1KYuTA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024925; c=relaxed/simple; bh=uHwDh8R18n43NL3hbgebKD065IPpTcukuk0fgmdzcbM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IOpv6y3lUYOmv5n9kzX+iX8b1qfY58p4Pwv9qHug1s2fIrf43RzPdtOTUUwV/hVllLKf4ZedWL9EyInb+47hu6iCbLwJi2tZEeCnlQ5TW9gfKauHKfJ45cTlMxW0rtUKiI6OsIczTeD2r/keMGv6rlYEkepjavrHpfMfgIT6hfQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YiM7tuaP; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="YiM7tuaP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 50A9F1F00A3A; Fri, 29 May 2026 03:22:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780024924; bh=2+mpwDP3/bGtoafxwdaZwFmoAMN2p0ja8s3NsSCK/ag=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=YiM7tuaPL7L5i0If/Z4ihFownFXqwM5cfvtFZtPGSFvBOg+KKmTThs7ZCp9/ptDyk qcsIFYB3We2msoLHBGRpgTGdBH5u4qlZWqyMHM60YIG12chjv+FHtvuqf8D+vBL/cG ZS1gcsSuzHvWS1Ibv4Rl3QQh6IOqUkMQPKn42di6Y9twkBOl1Cut91BIGs8K0dzYvm ec+a7yWhmyukYnOnS0ApI1t0DxGqxWpeykmH7cJLtHiz1LY/NnWUV/xoJykcdg/beM 3rbfYaETpBMpkGumWIQsEq9BKe/VP3T+2Ij+MwSRsnBYKqaHX9+qn6XtNf5Fjs3J78 UpHLVlyF5uOvQ== From: "Matthieu Baerts (NGI0)" Date: Fri, 29 May 2026 13:21:41 +1000 Subject: [PATCH mptcp-next v4 03/15] mptcp: pm: avoid computing rm_addr size twice Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-mptcp-add-addr6-port-ts-v4-3-cea393fa33a2@kernel.org> References: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> In-Reply-To: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3760; i=matttbe@kernel.org; h=from:subject:message-id; bh=uHwDh8R18n43NL3hbgebKD065IPpTcukuk0fgmdzcbM=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqGQZWQh9yLncQYkXQ9r7bHdX8WjmKMFbuS6y8f iiXLuklB3qJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCahkGVgAKCRD2t4JPQmmg c9yOD/42dQ1iZcFgOkiNGAi5GytUz48PT2FOxRmIkox4XykbEQPuQIiCEuQWfm1+tVCbKDYBLO1 hJ9IIiMNRjAEvpOlelTv4dCyIu3dWi90HYncVFMVUMUWzaYlxMrTqDm8Fs+FsmlNKtWGm6Q3WHq tDVvrJc5atNN/Bg0xvk3mQPSj1OxSrHdm1cmep7N8J4abtFW2J0mh74XJVME5OPTp8rXY0tOUp5 Rl2W7Mk/0iNe34RA5JD47X8EXlKKAazZTIpi+YAn+DC0JB8QdudXXw6h/WAB08kgj7hWu3KCMfq RXn5as1p4aW598r3BkBdTH8QRdo/Ny8Vj2QZpPPQKAUH9Wn9Ng14ShJjqOyCdi/niDASOYYO9mC d1JmIDid+sJs8O3sXiSbxmzCxgUtyPP8bLaKjUlQD0hkru6RC5bQLUdmWt9SoFZw9hRP31vt82U Rnhv8QWfH+XYU7Tpp6t6CoRfxrb8B38WBZE9855vF8PMVsDykzkYM7JycNWJYF1JYU84HCMx2Zr 7riOdn4Yv+yHhSitMC8QDd2ZbP4I12FEL1NSoQbzK4DEasGHDtYkMrVdutl+8z+Cv0pbhzeQsoo IPTH1P5mR9yFVQQF/b4ivzMlRX4f1hTOyECtm/InpjPStJa/b3icXEXa4U7OVHRRdrtQPjtV1Gi tUERyPhVnguzmGA== 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) Reviewed-by: Mat Martineau --- v4: use signed int for the new size parameter. (Mat) --- 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 b88e6c314b54..3960c6d93177 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, int *size, struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); struct mptcp_rm_list rm_list; - int i, len; + int i; =20 if (!mptcp_pm_should_rm_signal(msk) || - !(mptcp_pm_rm_addr_signal(msk, remaining, &rm_list))) + !(mptcp_pm_rm_addr_signal(msk, remaining, &rm_list, size))) return false; =20 - len =3D mptcp_rm_addr_len(&rm_list); - if (len < 0) - return false; - if (remaining < len) - return false; - - *size =3D len; opts->suboptions |=3D OPTION_MPTCP_RM_ADDR; opts->rm_list =3D rm_list; =20 diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 851f6886ad23..3d5dc711a866 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -961,8 +961,16 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, = const struct sk_buff *skb, return ret; } =20 +static int mptcp_rm_addr_len(const struct mptcp_rm_list *rm_list) +{ + if (rm_list->nr =3D=3D 0 || rm_list->nr > MPTCP_RM_IDS_MAX) + return -EINVAL; + + return TCPOLEN_MPTCP_RM_ADDR_BASE + roundup(rm_list->nr - 1, 4) + 1; +} + bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, - struct mptcp_rm_list *rm_list) + struct mptcp_rm_list *rm_list, int *size) { int ret =3D false, len; u8 rm_addr; @@ -982,6 +990,7 @@ bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, un= signed int remaining, if (remaining < len) goto out_unlock; =20 + *size =3D len; *rm_list =3D msk->pm.rm_list_tx; WRITE_ONCE(msk->pm.addr_signal, rm_addr); ret =3D true; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 2321ad4d845d..e9d97fb471ce 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, 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 Jun 8 07:26:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B374A36D506 for ; Fri, 29 May 2026 03:22:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024930; cv=none; b=uHmMnAFsCfXg8Ko/vUrsr66AL2oiAORneA30hVOaakVlkM/HPSXU0Vs1kG0Uet1OeabaR8ZPn/VMENsNvrh3f0VWbODBA65pwCuT4KqaKvBTEWtQmUYAkfGQJubiRVndXkYozF4OxiNvcWRVDxy4mIg6zIaOpuL1ZTecxgAL9u8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024930; c=relaxed/simple; bh=4KYzjII7LngqTrNcmnHgBg1pFSxsyuqSO5EiItHvIg4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Sx7+1uGONol7tGIgDvmLRA8Z2j2JV1O54oXQvZVnPcuO8bnTM/nbVrJJBStWs2M09cE/VDrkLs2EfcONqudo0E8lruTKzFwenRmTyX65MaYDOU1d8ASwXAy7k+qxxEhYUJlZdQP1x32+/Qlm/xXWmMacacU5MN04b0UY0WMIM5g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=BsbpQ4gZ; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="BsbpQ4gZ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 99E8A1F000E9; Fri, 29 May 2026 03:22:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780024925; bh=ZaiHpqlp53GpRtbcezmr7De43YTyQn9MV0vopVhtZFA=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=BsbpQ4gZ7INfu3PNKSa8+1oRX0FDnlB9MmGSjSVQYvD1nInzJUO+yLp23JipQ7g9J Y6hWoAT2EBMryqKVInt8/etgKrUVr+pgAgdQUDY0FCmPDL3EefC2x0SJ23boRbO1Pu d/E8cnTqrDHJbYbc5xERATKXdQDgG8FIe+PWwcc7yQwJk9q2NKlvXlhTzL7nXTwLCw mK9fVZfF+OSIez2hQm++bj68SseHhaNOmIg+Mlugnp9djC7t7r+t+LnfIOx96GcoNL 6bxFTKhgapFuHwj9vnfxl4w8zjfiZufqh8DCCPVGAaqN7gozN8jiAjdO8sTIbgJGaa urCWFwESatT0w== From: "Matthieu Baerts (NGI0)" Date: Fri, 29 May 2026 13:21:42 +1000 Subject: [PATCH mptcp-next v4 04/15] mptcp: pm: avoid computing add_addr size twice Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-mptcp-add-addr6-port-ts-v4-4-cea393fa33a2@kernel.org> References: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> In-Reply-To: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5869; i=matttbe@kernel.org; h=from:subject:message-id; bh=4KYzjII7LngqTrNcmnHgBg1pFSxsyuqSO5EiItHvIg4=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqGQZWkbtujNXp+SUlApnyrClFsRWFNy4rS/VuA StPyizwhkeJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCahkGVgAKCRD2t4JPQmmg c7OXD/9ctvQVU2PaYfxC8UYbMr0zKBulK7x84j3sh5SSgFzwm9a8qa4Iha7PBk6n3NO+Ai4RZW6 Ygha25QXmO8WsU6C30JVMViUJ3CGefv2dkqkVc7L4brs/9rmbDixaX87Gg7bG18SYqLQSNdBbe/ 0xuzSiRs8rU7Us2oEXSSA46bunsW1VN9Cxoz1aGOVFIhzL/14S8cCXVa0hm2HrtJogWe1V/Uf+S wtF77nIHH+hfAaqpp4suXmErCU0LmkVkSF9ftIMwkWj+CBBHS05spCRsZQSCi3va7fSxLM2eFfx 0b3EIZU+TiTo/kjRcnxRt3r3W52olnhUT1jqTRQpfjvxkmcurGXECuQ545ywonb2L8Eu0yFLESo IWvtHT6KcX3Vdx0EuzC6D3MaKBzFjT8hfIB5E5GRrP14dMrm+F73tuLiquRDPrqNx7NKFaBwIkg poZiMKSMWFzjgu4hkGDBcV8JXUOlt3ItHDyQEUGPOf3qu31S5wM21g2CcfF2EU2MkuJXP3VU/WZ DJpoH/xiH7egC6snsRGkzCnlCJC4YWhS9NWIYxGxzzBhBjuGcABcNub82STOhk9hyFXlCim24TD dnwK7eM0Guj8phcO9TaDZR0N+4p7BS3SL7fT4kaZ0jnsajn6ZFe375N8qPKC2TO/iYcOt+Sulal gRaE8QBnE1WrbFA== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 mptcp_add_addr_len helper was called twice: in mptcp_pm_add_addr_signal, then just after in mptcp_established_options_add_addr. Both to check the remaining space. The second call is not needed: if there is not enough space, mptcp_pm_add_addr_signal will return false, and the caller, mptcp_established_options_add_addr, will do the same without re-checking the size again. Instead, mptcp_pm_add_addr_signal can directly set the size. Note that the returned size can be negative when other suboptions are dropped, e.g. to send an echo ADD_ADDR with a v4 address, and no port. While at it: - move mptcp_add_addr_len to pm.c, as it is now only used from there - use 'int' in mptcp_add_addr_len for the size, instead of having a mix - use a bool for 'ret' in mptcp_pm_add_addr_signal Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Mat Martineau --- v2: reset size in mptcp_pm_add_addr_signal if other options are dropped. --- net/mptcp/options.c | 16 +++------------- net/mptcp/pm.c | 26 ++++++++++++++++++++++---- net/mptcp/protocol.h | 17 +---------------- 3 files changed, 26 insertions(+), 33 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 3960c6d93177..9525b22c3db8 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -660,34 +660,25 @@ static bool mptcp_established_options_add_addr(struct= sock *sk, struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); bool drop_other_suboptions =3D false; - unsigned int opt_size =3D *size; struct mptcp_addr_info addr; bool echo; - int len; =20 /* add addr will strip the existing options, be sure to avoid breaking * MPC/MPJ handshakes */ if (!mptcp_pm_should_add_signal(msk) || (opts->suboptions & (OPTION_MPTCP_MPJ_ACK | OPTION_MPTCP_MPC_ACK)) || - !mptcp_pm_add_addr_signal(msk, skb, opt_size, remaining, &addr, - &echo, &drop_other_suboptions)) + !mptcp_pm_add_addr_signal(msk, skb, size, remaining, &addr, &echo, + &drop_other_suboptions)) return false; =20 /* * Later on, mptcp_write_options() will enforce mutually exclusion with * DSS, bail out if such option is set and we can't drop it. */ - if (drop_other_suboptions) - remaining +=3D opt_size; - else if (opts->suboptions & OPTION_MPTCP_DSS) + if (!drop_other_suboptions && opts->suboptions & OPTION_MPTCP_DSS) return false; =20 - len =3D mptcp_add_addr_len(addr.family, echo, !!addr.port); - if (remaining < len) - return false; - - *size =3D len; if (drop_other_suboptions) { pr_debug("drop other suboptions\n"); opts->suboptions =3D 0; @@ -698,7 +689,6 @@ static bool mptcp_established_options_add_addr(struct s= ock *sk, * options */ opts->ahmac =3D 0; - *size -=3D opt_size; } opts->addr =3D addr; opts->suboptions |=3D OPTION_MPTCP_ADD_ADDR; diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 3d5dc711a866..ae6eabdc2ac1 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -888,14 +888,30 @@ void mptcp_pm_mp_fail_received(struct sock *sk, u64 f= ail_seq) } } =20 +static int mptcp_add_addr_len(int family, bool echo, bool port) +{ + int len =3D TCPOLEN_MPTCP_ADD_ADDR_BASE; + + if (family =3D=3D AF_INET6) + len =3D TCPOLEN_MPTCP_ADD_ADDR6_BASE; + if (!echo) + len +=3D MPTCPOPT_THMAC_LEN; + /* account for 2 trailing 'nop' options */ + if (port) + len +=3D TCPOLEN_MPTCP_PORT_LEN + TCPOLEN_MPTCP_PORT_ALIGN; + + return len; +} + bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, - unsigned int opt_size, unsigned int remaining, + int *size, int remaining, struct mptcp_addr_info *addr, bool *echo, bool *drop_other_suboptions) { bool skip_add_addr =3D false; - int ret =3D false; + bool ret =3D false; u8 add_addr; + int len =3D 0; u8 family; bool port; =20 @@ -910,7 +926,7 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, * if any, will be carried by the 'original' TCP ack */ if (skb && skb_is_tcp_pure_ack(skb)) { - remaining +=3D opt_size; + len -=3D *size; *drop_other_suboptions =3D true; } =20 @@ -927,7 +943,8 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, family =3D msk->pm.local.family; } =20 - if (remaining < mptcp_add_addr_len(family, *echo, port)) { + len +=3D mptcp_add_addr_len(family, *echo, port); + if (len > remaining) { struct net *net =3D sock_net((struct sock *)msk); =20 if (!*drop_other_suboptions) @@ -943,6 +960,7 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, } =20 ret =3D true; + *size =3D len; =20 drop_signal_mark: WRITE_ONCE(msk->pm.addr_signal, add_addr); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index e9d97fb471ce..7379a49342e6 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1209,23 +1209,8 @@ static inline bool mptcp_pm_is_kernel(const struct m= ptcp_sock *msk) return READ_ONCE(msk->pm.pm_type) =3D=3D MPTCP_PM_TYPE_KERNEL; } =20 -static inline unsigned int mptcp_add_addr_len(int family, bool echo, bool = port) -{ - u8 len =3D TCPOLEN_MPTCP_ADD_ADDR_BASE; - - if (family =3D=3D AF_INET6) - len =3D TCPOLEN_MPTCP_ADD_ADDR6_BASE; - if (!echo) - len +=3D MPTCPOPT_THMAC_LEN; - /* account for 2 trailing 'nop' options */ - if (port) - len +=3D TCPOLEN_MPTCP_PORT_LEN + TCPOLEN_MPTCP_PORT_ALIGN; - - return len; -} - bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, - unsigned int opt_size, unsigned int remaining, + int *size, int remaining, struct mptcp_addr_info *addr, bool *echo, bool *drop_other_suboptions); bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, --=20 2.53.0 From nobody Mon Jun 8 07:26:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E48F62E7397 for ; Fri, 29 May 2026 03:22:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024930; cv=none; b=WEWXCVU6xmfMVcGKcUmAuVLp2k4/KmD0CbJee8SJxs++3BaCEzW8snGWdlxjRHZR+VyEfuQq/sGjIXklIZmy5htJzSmmqFZ7ix1MTEPiRNZvoZLARrCzndGSgbGtfAyg3m98m2Hnm3X809bLB+gzNWgjKJOxLsIzPPp1gQ8yIjY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024930; c=relaxed/simple; bh=QGOP5umiIFrQez8kjzAIOJJM4Q4KmApZmA+N59A+c5I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pNjYEr6Ugug/zoxghoReXzZ6HespNIChcqvNZZIA4YR4p+AHZFp0v7n8vc1KtI1Tbl8ShM0xG6pST4oO84xucs6ubKKxT6Nxfusq7fMqHw7l339e8fOmddOWllvRu2WQ05ZTnbOHcqVYFrNA3CGHQnfJLiDZ8hnPZ33wbdG06Qc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YcXtsAQs; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="YcXtsAQs" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E805B1F00A3A; Fri, 29 May 2026 03:22:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780024926; bh=lGEk3Dyom8Wisfeh9yaoXbXopBrlEz7hvkqzDr5JJzM=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=YcXtsAQszlVfRB/ebs7XsqRNeuxfY9BtwCOKkbSgqAnG8bvZfPOeSJkOgyGPjBX+F NFSgH0ef78ZvEtzH5FJm92dzaGAFzFjhQn6m8AITpff/70fXs2/oVR7cy4tuFYnp2e qXGDxXe4dk4HnUk22NrCcSEEWEeubzKH2gKqxGSyXp4LVxdwIgBi1i/hPcskDpHN8D EED7hJGc+BN2m0X26SIae7T15CGHR3oavCN8RslqQPJ7oyjEKv4ZJsATXqNq9oJJVa cLbZBPqpBS9IFlkQm2H/xQ0uClHraNKK1WhZPkL+/SLRhVE1H5IMNgJG0r0GAhGmzU 0dl6XNG8KNSFg== From: "Matthieu Baerts (NGI0)" Date: Fri, 29 May 2026 13:21:43 +1000 Subject: [PATCH mptcp-next v4 05/15] mptcp: introduce add_addr_v6_port_drop_ts sysctl knob Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-mptcp-add-addr6-port-ts-v4-5-cea393fa33a2@kernel.org> References: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> In-Reply-To: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5509; i=matttbe@kernel.org; h=from:subject:message-id; bh=QGOP5umiIFrQez8kjzAIOJJM4Q4KmApZmA+N59A+c5I=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqGQZWVmgjIXOREzX36rC5blAXWy06gp694eDf9 DyZ0ZhIp5OJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCahkGVgAKCRD2t4JPQmmg cxGNEACYTMtBKsYFlAe035KdCkR41UmDGHxiSuUkfPQlrl3rEY6BiHE5ymZgIRY9hVSeJ7h5d0P IfqIUGjLrG4oknGaGWEsTFGaoUGzby4JmfjvNU3ealm77MOZarRWzom5lXtF0oKsmUFKgSgABHr kNIbalNlBdIlX+DIsVGbJ5KQwp9ucV4jpS3lGTblmr5hoT9rgdZklEA9R9ibakuNQ+++O9lrVmC qVADQ5tH7mr7rsu5DwJ5tjuae0Srtax5nDAXAB0c3H7BCTOAZ/nedzUwrWgF4pQx35FQcf5rDR4 +ajwwDwnGfXogQuSy1v7Uh1qTfITd4UaJImLyjPL398td1X65OWHvmN9N8/iC1Vs+RRDnqFOoxl iEbUnU08tfatpSdKcA7n9oJdHeU0KrhvrXaqcRMp31Zqai2symIh+9f8THpNORCMKxjQO5B2Vec EjvqjrFiWf3jkQWrwVjAOSCp4JeOoOywWqwTnEI2L5kZkDHjKVFfhgIlKT5IaPRUAsHcfyTlXJ3 XXiHr236oOo3NyNczXEwEG/muQLzuG6r/ULEXp27UsURzP/HElJQAI7SHRUyikstoQSa/bC7DxV +IDUn1Y/JpSdXWdycdaaa8HBR6n1L9qS6jWMw8EAvOu0IEGjeJgqiMTPh4TNBXtPqEB70KSnuFK mWdVZQ/AgD4KFEQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 This sysctl is going to be used in the next commits to drop TCP timestamps option, to be able to send an ADD_ADDR with a v6 IP address and a port number. It is enabled by default. This knob is explicitly disabled in the MPTCP Join selftest, with the "signal addr list progresses after tx drop" subtest, to continue verifying the previous behaviour where the ADD_ADDR is not sent due to a lack of space. While at it, move syn_retrans_before_tcp_fallback down from struct mptcp_pernet, to avoid creating another 3 bytes hole. Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Mat Martineau --- v2: split (Paolo) + fix new sysctl name in selftests. --- Documentation/networking/mptcp-sysctl.rst | 13 +++++++++++++ net/mptcp/ctrl.c | 18 +++++++++++++++++- net/mptcp/protocol.h | 1 + tools/testing/selftests/net/mptcp/mptcp_join.sh | 1 + 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/Documentation/networking/mptcp-sysctl.rst b/Documentation/netw= orking/mptcp-sysctl.rst index 1eb6af26b4a7..b9b5f58e0625 100644 --- a/Documentation/networking/mptcp-sysctl.rst +++ b/Documentation/networking/mptcp-sysctl.rst @@ -21,6 +21,19 @@ add_addr_timeout - INTEGER (seconds) =20 Default: 120 =20 +add_addr_v6_port_drop_ts - BOOLEAN + Control whether preparing an ADD_ADDR with an IPv6 address and a port + should drop the TCP timestamps option to have enough option space to + send the signal. + + If there is not enough option space, and the TCP timestamps option + cannot be dropped, the signal cannot be sent. Note that dropping the TCP + timestamps option for one packet of the connection could disrupt some + middleboxes: even if it should be unlikely, they could drop the packet + or block the connection. This is a per-namespace sysctl. + + Default: 1 (enabled) + allow_join_initial_addr_port - BOOLEAN Allow peers to send join requests to the IP address and port number used by the initial subflow if the value is 1. This controls a flag that is diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c index d96130e49942..c94a192f4118 100644 --- a/net/mptcp/ctrl.c +++ b/net/mptcp/ctrl.c @@ -32,12 +32,13 @@ struct mptcp_pernet { unsigned int close_timeout; unsigned int stale_loss_cnt; atomic_t active_disable_times; - u8 syn_retrans_before_tcp_fallback; unsigned long active_disable_stamp; + u8 syn_retrans_before_tcp_fallback; u8 mptcp_enabled; u8 checksum_enabled; u8 allow_join_initial_addr_port; u8 pm_type; + u8 add_addr_v6_port_drop_ts; char scheduler[MPTCP_SCHED_NAME_MAX]; char path_manager[MPTCP_PM_NAME_MAX]; }; @@ -94,6 +95,11 @@ const char *mptcp_get_scheduler(const struct net *net) return mptcp_get_pernet(net)->scheduler; } =20 +unsigned int mptcp_add_addr_v6_port_drop_ts(const struct net *net) +{ + return mptcp_get_pernet(net)->add_addr_v6_port_drop_ts; +} + static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet) { pernet->mptcp_enabled =3D 1; @@ -108,6 +114,7 @@ static void mptcp_pernet_set_defaults(struct mptcp_pern= et *pernet) pernet->pm_type =3D MPTCP_PM_TYPE_KERNEL; strscpy(pernet->scheduler, "default", sizeof(pernet->scheduler)); strscpy(pernet->path_manager, "kernel", sizeof(pernet->path_manager)); + pernet->add_addr_v6_port_drop_ts =3D 1; } =20 #ifdef CONFIG_SYSCTL @@ -362,6 +369,14 @@ static struct ctl_table mptcp_sysctl_table[] =3D { .mode =3D 0444, .proc_handler =3D proc_available_path_managers, }, + { + .procname =3D "add_addr_v6_port_drop_ts", + .maxlen =3D sizeof(u8), + .mode =3D 0644, + .proc_handler =3D proc_dou8vec_minmax, + .extra1 =3D SYSCTL_ZERO, + .extra2 =3D SYSCTL_ONE + }, }; =20 static int mptcp_pernet_new_table(struct net *net, struct mptcp_pernet *pe= rnet) @@ -389,6 +404,7 @@ static int mptcp_pernet_new_table(struct net *net, stru= ct mptcp_pernet *pernet) table[10].data =3D &pernet->syn_retrans_before_tcp_fallback; table[11].data =3D &pernet->path_manager; /* table[12] is for available_path_managers which is read-only info */ + table[13].data =3D &pernet->add_addr_v6_port_drop_ts; =20 hdr =3D register_net_sysctl_sz(net, MPTCP_SYSCTL_PATH, table, ARRAY_SIZE(mptcp_sysctl_table)); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 7379a49342e6..1c9376c5e8f0 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -799,6 +799,7 @@ unsigned int mptcp_close_timeout(const struct sock *sk); int mptcp_get_pm_type(const struct net *net); const char *mptcp_get_path_manager(const struct net *net); const char *mptcp_get_scheduler(const struct net *net); +unsigned int mptcp_add_addr_v6_port_drop_ts(const struct net *net); =20 void mptcp_active_disable(struct sock *sk); bool mptcp_active_should_disable(struct sock *ssk); diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index f008a14006b9..d894efe1fb02 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -3313,6 +3313,7 @@ add_addr_ports_tests() if reset "signal addr list progresses after tx drop"; then pm_nl_set_limits $ns1 0 2 pm_nl_set_limits $ns2 1 0 + ip netns exec $ns1 sysctl -q net.mptcp.add_addr_v6_port_drop_ts=3D0 2>/d= ev/null || true ip netns exec $ns1 sysctl -q net.ipv4.tcp_timestamps=3D1 ip netns exec $ns2 sysctl -q net.ipv4.tcp_timestamps=3D1 =20 --=20 2.53.0 From nobody Mon Jun 8 07:26:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 84C8D36C5A9 for ; Fri, 29 May 2026 03:22:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024930; cv=none; b=s4jtrOpWPLBnK4IveMH6la7MjlLnlvq6LASs5kpbNd9QZYiWeNcNNL9WWdOM6eHaMR7liRlW+lDedWneA11q7tQ1aOJkmTNX6XgMT0ccV2cGENCO+0fYXVEvezV0LOSjeB/gQdeU7feePCpF7oCDyXQ6uVxZ46fOQK3zoddFUH8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024930; c=relaxed/simple; bh=sC5TB5TRy4dy0oiuZvSxQSlfvKiIDoOWhZcz0dsX208=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GHXrBJT7cZ1hB2FyDoaTNIpy1exvPWsqXcq1WoQnZBE18nFhC/JEhCduqBhmsb0hPB6wVmRRzhSMH7uoFlBq6BI4/ck5tzrHX5pTvwx3wJSKHisF58IGNP5I0zVg3QyFkpki4DazZY3tZiqoDnPFgtxkFKaf5Ya670aIOYGiyAY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XsCKuQvs; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="XsCKuQvs" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2E7621F00A3C; Fri, 29 May 2026 03:22:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780024927; bh=ZDIrS5/A9M7SYi/ShQKavE18hc6ufNphJhIJlVT46d8=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=XsCKuQvsZRHWX+OSLFNfZjCWhMOJZwEi60HxKd0OchGs2LyJZZRURDYinT27Hxy1d 3lwAcyLzrf6QbSYW1UgbYVV71FO37eLv3afOW9bVVuv6d/GOAgwx992+UqR0gFhkcW imOgEqiP31tzGnwWLJaB3JJeXHZX/NPOj68Kw4WJQMIljQIPQJLrqLL5H4DFUbtfkd gWScUuy7lXKFd8Y6RtUJcdF7nr2uOf+Ifhl5vmRetUpdULNO3ZHKfWsgYGsHeYibrU xuQIsgaPqU0TuBZV5rtWM/7ZuxwT8GvL6cIU3WLwl3O28fNDk3M8KbCICBAqFc54BL Jm9jBs0E8st6A== From: "Matthieu Baerts (NGI0)" Date: Fri, 29 May 2026 13:21:44 +1000 Subject: [PATCH mptcp-next v4 06/15] tcp: allow mptcp to drop TS for some packets 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: <20260529-mptcp-add-addr6-port-ts-v4-6-cea393fa33a2@kernel.org> References: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> In-Reply-To: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4943; i=matttbe@kernel.org; h=from:subject:message-id; bh=sC5TB5TRy4dy0oiuZvSxQSlfvKiIDoOWhZcz0dsX208=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqGQZWcS0Syy1D3TCrXmfrZ9poYHGriIUWXoWQ2 nCLRuib7ESJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCahkGVgAKCRD2t4JPQmmg czGmEADVvndEtuk7GZjfl5vTsIuKnce+rbO+2gM7ywvqcyFFr7wuPzPpt696kWC7pLSNisdl1T9 nyPNMz6d7chAzPmJBfijSXJc1FSxHyIcdB7PS+xsHn/QAKOu0orTHyopXgXdXfgZLCowMwOHCTy KeG1cg11M+cfbSap6XlqWN3JcKvJc+ubGeCv3tAL9qIIVeY59N61j0pnBxRM7tWKtOBm87Htq/Q 6gxwvYf/YY9KXWA0aGh71TgcJT3yvuGc1ow2MwrMsme2A3+T8XYWFVOsMBs7S1lFkgnhn1A7OES BBqE/7KDpAyb3Im49XNZ8KXgcD+tmDsx5lRmlu8Vb0gCT9IUIlQ+CN39zMDm5MiaNj38a71nrxA Dk13LfOfiZmLMAGC/BMj7ojRFrTDTIwmorb3dMW/PGVSJYTl2IghfDWkmB8sebisB4KIziCJtIm vevSkaKYeQj0y4EAOwuKlRqFgaeX60LjXtMOT4BDOM3qp4yNVDAc8X1BEcYyyDRmZDfsuTua92P aPKXidNU2Qscyr48MhH5HNWZPVo853qz2LY691+XydSTssZ/Ngy7VeSnOUvQM0JCS5Uian35Qi4 p/927lRrc8uAyg61bOdXj/SNv+ViFJe18XXcX9zbLXvHOHCoNhH0VjHHqyLPEd9kBvVPSDj1wmR LkjOHPonIdRFJwg== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 With TCP-timestamps (padded) taking 12 bytes and ADD_ADDR IPv6 + port taking 30 bytes, the 40-byte limit for the TCP options is reached. In this case, it is then not possible to send the address signal. The idea is to let MPTCP dropping the TCP-timestamps option for some specific packets, to be able to send some specific pure ACK carrying >28 bytes of MPTCP options, like with this specific ADD_ADDR. A new parameter is passed from tcp_established_options to the MPTCP side to indicate if the TCP TS option is used, and if it should be dropped. The next commit implements the part on MPTCP side, but split into two patches to help TCP maintainers to identify the modifications on TCP side. This feature will be controlled by a new add_addr_v6_port_drop_ts MPTCP sysctl knob. It is important to keep in mind that dropping the TCP timestamps option for one packet of the connection could eventually disrupt some middleboxes: even if it should be unlikely, they could drop the packet or even block the connection. That's why this new feature will be controlled by a sysctl knob. Note that it would be technically possible to squeeze both options into the header if the ADD_ADDR is first written, and then the TCP timestamps without the NOPs preceding it. But this means more modifications on TCP side, plus some middleboxes could still be disrupted by that. About the implementation, instead of passing a new boolean (drop_ts), another option would be to pass the whole option structure (opts), but 'struct tcp_out_options' is currently defined in tcp_output.c, and would need to be exported. Plus that means the removal of the TCP TS option would be done on the MPTCP side, and not here on the TCP side. It feels clearer to remove other TCP options from the TCP side, than hiding that from the MPTCP side. Yet an other alternative would be to pass the size already taken by the other TCP options, and have a way to drop them all when needed. But this feels better to target only the timestamps option where dropping it should be safe, even if it is currently the only option that would be set before MPTCP, when MPTCP is used. Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Mat Martineau --- v3: split from the next commit --- include/net/mptcp.h | 3 ++- net/ipv4/tcp_output.c | 6 +++++- net/mptcp/options.c | 3 ++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/include/net/mptcp.h b/include/net/mptcp.h index aef2dbeb847b..e3adeee04962 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -153,7 +153,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, @@ -272,6 +272,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 ef0c10cd31c7..53ee4c8f5f8c 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -1181,12 +1181,16 @@ static unsigned int tcp_established_options(struct = sock *sk, struct sk_buff *skb */ if (sk_is_mptcp(sk)) { unsigned int remaining =3D MAX_TCP_OPTION_SPACE - size; + bool drop_ts =3D opts->options & OPTION_TS; unsigned int opt_size =3D 0; =20 if (mptcp_established_options(sk, skb, &opt_size, remaining, - &opts->mptcp)) { + &drop_ts, &opts->mptcp)) { opts->options |=3D OPTION_MPTCP; size +=3D opt_size; + + if (drop_ts) + opts->options &=3D ~OPTION_TS; } } =20 diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 9525b22c3db8..c5635c8781ae 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -818,7 +818,7 @@ static bool mptcp_established_options_mp_fail(struct so= ck *sk, int *size, =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); @@ -827,6 +827,7 @@ bool mptcp_established_options(struct sock *sk, struct = sk_buff *skb, int opt_size =3D 0; =20 opts->suboptions =3D 0; + *drop_ts =3D false; =20 /* Force later mptcp_write_options(), but do not use any actual * option space. --=20 2.53.0 From nobody Mon Jun 8 07:26:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8E41336BCDD for ; Fri, 29 May 2026 03:22:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024930; cv=none; b=d/TA6XM06XEIslDijYB7v06tQh2LuNKxmE4GbbxXFP44bwKNwbm+P1/k15YvrCcfV9xzcQbOxcKuRyB97UHxQTzOcuV4uk4kNxPIFgyn74mxNJy+XF/EGfhG6NEi31yXpqtQannpG7D73qGCEp7+oqXxFcD/9iUju/FdLMDJSYo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024930; c=relaxed/simple; bh=HsUi+/WYX9tn1HmmHrLbARUCYzFRpKlky51VHQKhB2I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sl1vJpFz9KkyEUulcVTactSjCzc9HF8LkGhUkSK9pnIhrB5Yj4ucy3mBrZa+lGuVwvDTNEheqFT3ug03eV1JVZ9NbGXW5gNjn5a8DNPP0tCYB0hegrYTj6BYKvUlpyF6yedHDvfq8Jl7eIaQW+XJ7OlWfCD41xpEanoH0bsFMOQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=h+gk0Rc5; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="h+gk0Rc5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7F0771F00A3D; Fri, 29 May 2026 03:22:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780024929; bh=NU6BbE28DVQHvcfdbBEgRDs1MNlxhhdK7wzNxwfnjso=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=h+gk0Rc5bCxuEb1G8xdEOxalQ+a8FASBE9YAp0CxM0A/REge6JBxMAyBBN0/ZaRUN Occkt+PpSWLSf4i4Kuy/mBram+IwAcN5od71hurIGVdIWgxAMAyZTxOywNKHee8BES 3od2zHl9ruw3AfrT6Pd9+oIgSI2QTkVuSfLWzvgLX+ol7iIpkoE9pCeKPzwSFSo7IH lgxsHYGI/JVcinkuGC30ivndvzrhexI0wO7qSYfip8OzF+Z2LOKbbmkVzFzhe6OD79 8vDPbpZ8JLB/KRTbUJRCWEYoizc0sznMCrhN3WsPtutt3d9Sq6pbFkSsJEmhe9TWN9 d4aO9lweIJDmw== From: "Matthieu Baerts (NGI0)" Date: Fri, 29 May 2026 13:21:45 +1000 Subject: [PATCH mptcp-next v4 07/15] mptcp: pm: drop TCP TS with ADD_ADDRv6 + port Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-mptcp-add-addr6-port-ts-v4-7-cea393fa33a2@kernel.org> References: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> In-Reply-To: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4952; i=matttbe@kernel.org; h=from:subject:message-id; bh=HsUi+/WYX9tn1HmmHrLbARUCYzFRpKlky51VHQKhB2I=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqGQZWh5Nvwrdi85wQmfA7jVFAM5kj4AyqtApS3 YI7+v4bM1OJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCahkGVgAKCRD2t4JPQmmg c9VLEADisZRJBWNQ6dN1JLEtWKPu+b6QNIe16Jo4EVRBVREyAyuq94WpsHvEVW5z/oSZLHfRqRG 3NMddw0pi50s8QCXGxmF18s7I5ocO0bcOoIQ6Hb/FmMwzOC5MmJ+z7OmErgq3zHyrlOr6Z2DBaf 4mXw6NflF+NFuHJTDHvNzDkglqYaWaoYE8F6h7aJEila0E/QV24sbjFL8FEEIp9Y4iUidHMFTlg hJoexv6EmArxdI5g7JxwJNkI0+vsSXaYmpYNwsU6EfQwYVzyMAbbCfQe9K46RIKzJ/nlaTyH7Gy uibn9T5ZJ6j1Ut8UsglO71N46VhRTy396h3nYBp6px43RKSntrdauHzkcFx465J0RLpzOURfGaS JXWttNgoQUGYXmZLSpERvVWIdLNW/uMxgtGQPuGr1oNJ+wIzn1v1UDLa+GJYCaHOmtv7Ag0NiGR c7X3v+tuWpekMm9ZVKzcVWDediCkXJAIfmcNQaYDy9KNWlulip6pliaRuv8rRV0YQwmFxDQ+7NK ukFoUlMxPVvpUi4nWo7Wm7XEZaO2cDuJTqR4I7vLm/W85z48AcaFqHL8z7lI8keH585dXO3BEBB Z7bi0NQXUDorPCAECwA81Hihf7ByXfOwXCbPNOqPZHIztjKzvpTuyTDalASllHtrgR7W7NFoTrf wP/Qz+4dx3TgPeg== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 With TCP-timestamps (padded) taking 12 bytes and ADD_ADDR IPv6 + port taking 30 bytes, the 40-byte limit for the TCP options is reached. In this case, it is then not possible to send the signal. To be able to send this ADD_ADDR, the TCP timestamps option can now be dropped. This is done, when needed by setting the *drop_ts parameter from mptcp_established_options. This feature is controlled by a new net.mptcp.add_addr_v6_port_drop_ts sysctl knob, enabled by default. It is important to keep in mind that dropping the TCP timestamps option for one packet of the connection could eventually disrupt some middleboxes: even if it should be unlikely, they could drop the packet or even block the connection. That's why this new feature can be controlled by a sysctl knob. Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/448 Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Mat Martineau --- v2: split + fix reverse Xmas tree order + change label (Paolo) v3: split the TCP part in the previous patch + s/has_ts/add_addr_drop_ts --- net/mptcp/options.c | 8 ++++++-- net/mptcp/pm.c | 12 +++++++++++- net/mptcp/protocol.h | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index c5635c8781ae..4673530018bf 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -655,6 +655,7 @@ static u64 add_addr_generate_hmac(u64 key1, u64 key2, static bool mptcp_established_options_add_addr(struct sock *sk, struct sk_buff *skb, int *size, unsigned int remaining, + bool *drop_ts, struct mptcp_out_options *opts) { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); @@ -669,7 +670,7 @@ static bool mptcp_established_options_add_addr(struct s= ock *sk, if (!mptcp_pm_should_add_signal(msk) || (opts->suboptions & (OPTION_MPTCP_MPJ_ACK | OPTION_MPTCP_MPC_ACK)) || !mptcp_pm_add_addr_signal(msk, skb, size, remaining, &addr, &echo, - &drop_other_suboptions)) + &drop_other_suboptions, drop_ts)) return false; =20 /* @@ -822,6 +823,7 @@ bool mptcp_established_options(struct sock *sk, struct = sk_buff *skb, { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); + bool add_addr_drop_ts =3D *drop_ts; bool snd_data_fin; bool ret =3D false; int opt_size =3D 0; @@ -872,10 +874,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, + &add_addr_drop_ts, opts)) { *size +=3D opt_size; remaining -=3D opt_size; ret =3D true; + *drop_ts =3D add_addr_drop_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 ae6eabdc2ac1..f63c6b117f97 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -906,7 +906,7 @@ static int mptcp_add_addr_len(int family, bool echo, bo= ol port) bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, int *size, int remaining, struct mptcp_addr_info *addr, bool *echo, - bool *drop_other_suboptions) + bool *drop_other_suboptions, bool *drop_ts) { bool skip_add_addr =3D false; bool ret =3D false; @@ -950,6 +950,13 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, = const struct sk_buff *skb, if (!*drop_other_suboptions) goto out_unlock; =20 + if (*drop_ts && mptcp_add_addr_v6_port_drop_ts(net)) { + /* OK without TCP Timestamps? */ + len -=3D TCPOLEN_TSTAMP_ALIGNED; + if (len <=3D remaining) + goto enough_space; + } + if (*echo) { MPTCP_INC_STATS(net, MPTCP_MIB_ECHOADDTXDROP); } else { @@ -959,6 +966,9 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, goto drop_signal_mark; } =20 + *drop_ts =3D false; + +enough_space: ret =3D true; *size =3D len; =20 diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 1c9376c5e8f0..bf4607c1fd04 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1213,7 +1213,7 @@ static inline bool mptcp_pm_is_kernel(const struct mp= tcp_sock *msk) bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, int *size, int remaining, struct mptcp_addr_info *addr, bool *echo, - bool *drop_other_suboptions); + bool *drop_other_suboptions, bool *drop_ts); bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, struct mptcp_rm_list *rm_list, int *len); int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); --=20 2.53.0 From nobody Mon Jun 8 07:26:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 274D7369992 for ; Fri, 29 May 2026 03:22:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024932; cv=none; b=MKkGXqB9xbqRshnh5RHjrvhRvNWtytSfSr2OtSBtBdfybmpi29XVmgmEVvz9G14gH1EJEcFPzK0njzhpp9J8tPEGETShNzqEiEbm5+tK54MKiW3zAB0O/pbpZE25iqvNCZPc6vgtPbfc+hAQgRcOjQgDRZE7PDKHmJLM7piRkgM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024932; c=relaxed/simple; bh=3nwANGrh2kWYU2kKS8sds1qac5JfcT5k+G8m3TnYOs4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SX5qBI0rWy3QQN/hGQg2iGPczn7j3DPoe9QhhFmD1M/kyWV1RheBVYazEEwxCDHPm+fJbQgfxhFdp4irL8iuy1S+vL72j2r+VbDM4EYdocNYVmKUP6h95lCY+zNK4LPfTAK1OnbXW6UTwVW5xNoxD1wEz/pp+57mmiI6JGzofCA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hwDQ377k; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="hwDQ377k" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E93B81F00A3E; Fri, 29 May 2026 03:22:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780024930; bh=49SfBerD6PAjf6FO2wL2dyRDxp+iVNh8r+rbjyWOW5M=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=hwDQ377koZZ4f36ajiFRMJHeuBe8anl/Ew/Jg/jHajQeBf/uE1cn20cKtgfkiVoag GKYoGveSmsaicsC+co1uv0K2NQ9BFPESqF8StCkIdHQJn2Mg9s85Uz0cQcVPX9gZco Z1kJUVhqorVAE1io0V62b6mnusOsIAYRfyPA4vf2xVzQZxkF86Hdb8L+mAOUt6smcn /DCIow6vWeIrrnB8rhqPLg+EC1kRDO4vR9P8V/aKhTBScjy1wgwfWm9akAef2J8LVb ez2R6Tmbtdslsf0PrcMzgxfd4DFGYQhQ8pd76dKAKF/reHZmkVJ/VAucJkNXqlxGRn jzRKNwanyYqlw== From: "Matthieu Baerts (NGI0)" Date: Fri, 29 May 2026 13:21:46 +1000 Subject: [PATCH mptcp-next v4 08/15] selftests: mptcp: validate ADD_ADDRv6 + TS + port Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-mptcp-add-addr6-port-ts-v4-8-cea393fa33a2@kernel.org> References: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> In-Reply-To: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1566; i=matttbe@kernel.org; h=from:subject:message-id; bh=3nwANGrh2kWYU2kKS8sds1qac5JfcT5k+G8m3TnYOs4=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqGQZWx2UA5/i3EYqxnyOt3UhHehBPZgKFAL225 X4AWviFggKJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCahkGVgAKCRD2t4JPQmmg cxwOEADF/bzoealLIFpER6Y6tMbvw4G2/6NAScOhFnb6EQtb1+LzvgO7fkw5i0ku2tSX+uOoYr4 a0qHdja9pQjDeVCVSdsB+zBRMW/49rIJ16LWh6+FTR/XxSpgP48XSpQrhb2zs7TMDsCTJ+/5F4f 3WvdKyHYwmSQfbHGTCGFSgpbXMEJV71zH3Kk/uBtsPqQctBCynmWNvgP4XoUzFMnxrHq29lwLz8 OJG9Nx3K7USwJNrPh/uTCDP2Wl+tegAjZY/nuPo4ncCfktd1/G7NPXImYYC+O8PO5b39QegjknR yz50PvbUCd/X4uFH/VB5RExcPZP54r7Ygf4lQbuo/lw3X0lXzv9XScrw9TmVWPcmODKLydzGR+h Xk30/idpFgtqNiCMSMVaJo9Ncgb7rXO8yx2Drar6U1zjyl9adQXpgKMHacCHqveOplvoL1Xz5Tw I5ArHVYRmfzXQnb1B6s8Zz7RNvsju0GntEu3Xs0KgEKTM6/GsrkRAN85V0oz46WnsW6pNFchNno ERpl2pu6/me80DNVSIUTc3KHxazAoTUrKdW+u+fQPwnfJLKqUo6/X6g6Y0zxlFYQxpzPUeq/oRz 1Vr/Led4wqRmyF4MejjlOLvM5Xl5JdeDHAf4BTOQKYNrCUixT95/WGTMGur8Ux1wWp3X9NRVJwT NHztqBR86tbuE6w== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 This validates the feature added by parent commit, where it is now possible to send an ADD_ADDR with a v6 IP address and a port number, while the connection is using TCP Timestamps. This test is simply a copy of the previous one: "signal address with port", but using IPv6 addresses. This test is only executed if the add_addr_v6_port_drop_ts sysctl knob is available. If not, it means the kernel doesn't support this feature. Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Mat Martineau --- v2: switch back to IPv6 for the main connection to use a v6 socket. --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index d894efe1fb02..30dbdcdf5e4a 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -3214,6 +3214,17 @@ add_addr_ports_tests() chk_add_nr 1 1 1 fi =20 + # signal address v6 with port + if reset "signal address v6 with port" && + continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/add_addr_v6_port_d= rop_ts'; then + pm_nl_set_limits $ns1 0 1 + pm_nl_set_limits $ns2 1 1 + pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal port 10100 + run_tests $ns1 $ns2 dead:beef:1::1 + chk_join_nr 1 1 1 + chk_add_nr 1 1 1 + fi + # subflow and signal with port if reset "subflow and signal with port"; then pm_nl_add_endpoint $ns1 10.0.2.1 flags signal port 10100 --=20 2.53.0 From nobody Mon Jun 8 07:26:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ECF8434A78F for ; Fri, 29 May 2026 03:22:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024934; cv=none; b=PiJAhih4HZgFxd5LevYgQLHIvQnTaCN9ycmtSz5KCuyEe+KnGG9IJfQATutuBst/C0Bs0b/Z30VJQCBiOVNRgE4+hk6X+vkmw99j/lW8E6qGt/gU2mTwrQwC3tXNqwQ+Jy9D9FES/wc6TfTqcL1Bat1aIscsld39gyuRlnWxgxU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024934; c=relaxed/simple; bh=eFRRUtLlaSDK5M12HoqIyj6tzF//osJkq7wWoc6D3dM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=R3+9HzA6FbOaB877jFeQUdFV5Dv8bBdoTE5oWYNSBhYcrNd4R2pNirruaESdnjTpC2bYypfsZ6WiwQNI+nxEjWzYw+YndEmIfAWtc1AgaZKqtDoXw83nSRyPtQ5B0fvCehvwLRYry2hHG36Mxs/uK6IoGBPn34CQI7muIkKS+lA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QZy/1NH8; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QZy/1NH8" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4817B1F000E9; Fri, 29 May 2026 03:22:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780024932; bh=S7CxZcapsEoPHXEpGpGH8EjVqlEvdqKsoyORIItShRs=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=QZy/1NH8hZi8UZOGhJ+TQuAPEo5w3ngb8Js2vVhmsvq7d0Uj22L5csvbkTtEe5Auv S93TMbo+IpfPbR8UuwkUxOyUlM/Xt/MH2eoreaxEbysk64trcRUc5pNoDDz+r5n46s q1jVTZUhplgU3SLmZ7Gqso7kksqDgn0Cr2wMMYq1QHIpNWsXL1+ldmA7wDQR9wAnkQ Zl4wdN1upFj6ldNOFaoLB8JfhYRZ+TQZhNapsQB0V7r59JnDSzpSOQ5pwbE2cTsLCG TOaKdh1jOTtoB5i8fnulKSW/b4AxtWf09fl5cX6T1oIGfrS7JAhbmCPr2uL60rTzge q8aKHoGjAjM6g== From: "Matthieu Baerts (NGI0)" Date: Fri, 29 May 2026 13:21:47 +1000 Subject: [PATCH mptcp-next v4 09/15] selftests: mptcp: always check sent/dropped ADD_ADDRs Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-mptcp-add-addr6-port-ts-v4-9-cea393fa33a2@kernel.org> References: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> In-Reply-To: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@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=eFRRUtLlaSDK5M12HoqIyj6tzF//osJkq7wWoc6D3dM=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqGQZWNU80FV3CVzeubJZIo3G5B1zTlGfBg28C6 pe5ZXqWv4iJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCahkGVgAKCRD2t4JPQmmg c70BEACJE/WBaGZ/fwBE5Xui2EmwJbwK/BpqJtGAi7c/cX4tFCSzJiAU8tZ9qs/TPqcdgtMBuYb KbNgFdb+FNCBsdtOGUGn25jUw+lm0cvmxLhal4Bc0em2bLz1ctD85h702KwHBjV9qMWFcgB6Xrp UQLE79uy3j5IeOrBWKC5UE6laLwZeaMYMUkYzmAp9uD5lY/66ZF5uMIjBRLpQhpnuXacjYpr291 sASIEBkW7xqoGYP1fxED7JTMqGyus7KU1ZmvINTHtvn9mQt+JgODkHBD24q2yu2ZWnYxHv3x9r9 aRKivkgeaMl5pU8MYyUrKpjLApDROkQ6M2AeLjoszAIzVGDHYClxkb+TcIdUmyS9/MVUf/q7mFB sTjDE7L/Am7hBxRm/MnDkr28OVAPu42BOKpwIE8SnbWJxbmDWI7lbObNN4whBp5TEwF9oDRuxv6 bxJG6DrkxSk5JTqnufAtcn6phzazDBsTGGSwXZsHQZ2NeL5KR+D5m2yX8G690vB7A7UIG5jj/BW udHYT3S3OJTk8WQSpxUq1fLiDNDyCuTdX5vm+pVXGCFvflA6GthpMVYSrAcNMNo1qUjeS4BEmW4 9lTh6cwa27DRLFB4SyTkTlxmd7Rk+SUvTl6pyGX7+RnW3dXgldSSDVac35furVeDvQsXYRfWBa0 YEsjhLFEtq8sMkA== 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) Reviewed-by: Mat Martineau --- 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 30dbdcdf5e4a..550a6b6117a9 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -87,6 +87,10 @@ unset fb_mpc_data unset fb_md5_sig unset fb_dss =20 +unset add_addr_tx_nr +unset add_addr_echo_tx_nr +unset add_addr_drop_tx_nr + # generated using "nfbpf_compile '(ip && (ip[54] & 0xf0) =3D=3D 0x30) || # (ip6 && (ip6[74] & 0xf0) =3D=3D 0x30)'" CBPF_MPTCP_SUBOPTION_ADD_ADDR=3D"14, @@ -1710,6 +1714,9 @@ chk_add_nr() local ack_nr=3D$port_nr local mis_syn_nr=3D0 local mis_ack_nr=3D0 + local add_tx_nr=3D${add_addr_tx_nr:-${add_nr}} + local echo_tx_nr=3D${add_addr_echo_tx_nr:-${echo_nr}} + local drop_tx_nr=3D${add_addr_drop_tx_nr:-0} local ns_tx=3D$ns1 local ns_rx=3D$ns2 local tx=3D"" @@ -1811,50 +1818,25 @@ chk_add_nr() print_ok fi fi -} =20 -chk_add_tx_nr() -{ - local add_tx_nr=3D$1 - local echo_tx_nr=3D$2 - local count - - print_check "add addr tx" - count=3D$(mptcp_lib_get_counter ${ns1} "MPTcpExtAddAddrTx") - if [ -z "$count" ]; then - print_skip + count=3D$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtAddAddrTx") # Tolerate more ADD_ADDR then expected (if any), due to retransmissions - elif [ "$count" !=3D "$add_tx_nr" ] && - { [ "$add_tx_nr" -eq 0 ] || [ "$count" -lt "$add_tx_nr" ]; }; then + if [ -n "$count" ] && [ "$count" !=3D "$add_tx_nr" ] && + { [ "$add_tx_nr" -eq 0 ] || [ "$count" -lt "$add_tx_nr" ]; }; then + print_check "add addr tx" fail_test "got $count ADD_ADDR[s] TX, expected $add_tx_nr" - else - print_ok fi =20 - print_check "add addr echo tx" - count=3D$(mptcp_lib_get_counter ${ns2} "MPTcpExtEchoAddTx") - if [ -z "$count" ]; then - print_skip - elif [ "$count" !=3D "$echo_tx_nr" ]; then + count=3D$(mptcp_lib_get_counter ${ns_rx} "MPTcpExtEchoAddTx") + if [ -n "$count" ] && [ "$count" !=3D "$echo_tx_nr" ]; then + print_check "add addr echo tx" fail_test "got $count ADD_ADDR echo[s] TX, expected $echo_tx_nr" - else - print_ok fi -} =20 -chk_add_drop_tx_nr() -{ - local drop_tx_nr=3D$1 - local count - - print_check "add addr tx drop" - count=3D$(mptcp_lib_get_counter ${ns1} "MPTcpExtAddAddrTxDrop") - if [ -z "$count" ]; then - print_skip - elif [ "$count" !=3D "$drop_tx_nr" ]; then + count=3D$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtAddAddrTxDrop") + if [ -n "$count" ] && [ "$count" !=3D "$drop_tx_nr" ]; then + print_check "add addr tx drop" fail_test "got $count ADD_ADDR drop[s] TX, expected $drop_tx_nr" - else - print_ok fi } =20 @@ -2267,7 +2249,6 @@ signal_address_tests() pm_nl_add_endpoint $ns1 10.0.2.1 flags signal run_tests $ns1 $ns2 10.0.1.1 chk_join_nr 0 0 0 - chk_add_tx_nr 1 1 chk_add_nr 1 1 fi =20 @@ -2545,8 +2526,8 @@ add_addr_timeout_tests() speed=3Dslow \ run_tests $ns1 $ns2 10.0.1.1 chk_join_nr 1 1 1 - chk_add_tx_nr 4 4 - chk_add_nr 4 0 + add_addr_echo_tx_nr=3D4 \ + chk_add_nr 4 0 fi =20 # add_addr timeout IPv6 @@ -2557,7 +2538,8 @@ add_addr_timeout_tests() speed=3Dslow \ run_tests $ns1 $ns2 dead:beef:1::1 chk_join_nr 1 1 1 - chk_add_nr 4 0 + add_addr_echo_tx_nr=3D4 \ + chk_add_nr 4 0 fi =20 # signal addresses timeout @@ -2569,7 +2551,8 @@ add_addr_timeout_tests() speed=3D10 \ run_tests $ns1 $ns2 10.0.1.1 chk_join_nr 2 2 2 - chk_add_nr 8 0 + add_addr_echo_tx_nr=3D8 \ + chk_add_nr 8 0 fi =20 # signal invalid addresses timeout @@ -2582,7 +2565,8 @@ add_addr_timeout_tests() run_tests $ns1 $ns2 10.0.1.1 join_syn_tx=3D2 \ chk_join_nr 1 1 1 - chk_add_nr 8 0 + add_addr_echo_tx_nr=3D7 \ + chk_add_nr 8 0 fi } =20 @@ -3331,9 +3315,8 @@ add_addr_ports_tests() pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal port 10100 pm_nl_add_endpoint $ns1 dead:beef:3::1 flags signal run_tests $ns1 $ns2 dead:beef:1::1 - chk_add_drop_tx_nr 1 - chk_add_tx_nr 1 1 - chk_add_nr 1 1 0 + add_addr_drop_tx_nr=3D1 \ + chk_add_nr 1 1 0 fi } =20 --=20 2.53.0 From nobody Mon Jun 8 07:26:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C51A07082D for ; Fri, 29 May 2026 03:22:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024934; cv=none; b=JzMREdySf96acTqycI5S2pKREAhB61Di3QcC6MoUVt9q4jntPP1lv17jXXPtY1djCnX/4olMu1iVeC0fFnZFB5UG0Y2JgJhE3elj1AtONQQKspg2WCUFtl0BZGsrtPCZaFHyl0xAfqMcbVcA3Bj2LD87gD1sd2nL/TVfddxukUk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024934; c=relaxed/simple; bh=KLJjoQk3knGnd478jSo84lYpTH/0kBtbEzSIxHwUUpw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qe2QU7XyzLRZrjd5NyfE938KibbUWTzv/IzJsLg/KdXmpR64Z8wsxwDL/SuJzgKdFQi0VZmc3L4SEm3F4tphGzbKNK27TpatpfVtKkdZdVRYujmBds3oXA+1ggszVIeOCta/QJR6wurJJs/4XdwmYLSZCc2fNWBy3CdT8YzEvZ8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MSwf8wnH; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MSwf8wnH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C84301F00A3A; Fri, 29 May 2026 03:22:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780024933; bh=tplI13hOHUxE0HDL81Lp9//6cwD13Qq7Tu3aTqXovd0=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=MSwf8wnHM9TxRa9TxLSpDyeRv4bxHpMkQaleFQknjGKSDAdFfA+n7mIdSI4hRraUV KJsnAF92/Py/5hePNNmQs7WT6//cazub0iIw70BN9ihxOnED0DsqGHG+3ehva8JwPw +aZ8omK8gM/H1o7ACHotE0TK2kYlWa4vYwzyLQgpgoJVHW9+Ddy5vSgfWvUv8b7bjC Dqmz128ke5+W+NPk2vmHp5ZFO6ugITeBk7M9SlaRtGaq2WHAdszIhAtbUdON0KTVlT TEj3W5WQuiroNd2TSjErk0YdIOFheUFSyxPjNegob7oId4WzGcpLu9uoU62VleU7lQ ebiRiOeEQj3dQ== From: "Matthieu Baerts (NGI0)" Date: Fri, 29 May 2026 13:21:48 +1000 Subject: [PATCH mptcp-next v4 10/15] mptcp: pm: use for_each_subflow helper Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-mptcp-add-addr6-port-ts-v4-10-cea393fa33a2@kernel.org> References: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> In-Reply-To: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@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=KLJjoQk3knGnd478jSo84lYpTH/0kBtbEzSIxHwUUpw=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqGQZWUu1CCKFswTVicyp4mDWFImwk0MWE8xt6m yWmGYdd8CGJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCahkGVgAKCRD2t4JPQmmg c5KdD/4iuGK5YlsyFpwRA0TPdEphxNbVJrrIMvB/QxnNfMgnqBI63BaW4fR4piTs+NT822qHoKX gQpR+E0w5I9jz8QBRB19eHoR9VnvWlBYGurwDGURiv0jMCJaIoeVTm4p35IiNTmV1I4rBIr3Y1O XgUtF3sZt7HqHmcKeDke+TEPVjEBy98H7qGzXQAkpzK9jWNRlwXO+blVTZwc8fNt78CUgSuEHm4 VMdPFhdTbMGJ2jVasnyKU2hWFsNflquO3FC5oyhXR5an6bW0LRVqOcLXk4aQu3AbBgkxPHpHZiL pFhqnan6ZhbBAAdJ8uQCRm6L8m/xh3Elc9+Hn23EdTi70yJROyck2cqhzlPxHekreSPHETqTgFB byQrMaXFFz1z8qOP8DEoOOeSo0Een+M05mqf6VHclqGyT5sPPxvqFjDueu5TyU7sIHXa0P8Mjwe E+bk5bKXfT4WMypFYIxQM92x9jAUk6v8h5JqVIAvad1VcmB52Nvzj6rhQ0xbSEetvBGMYIllqY8 Gx5rsSnoMVNHl1yNLZsQdint6fo2DWIuc3Uq+FIqmgvOHre6ds1tmMe+dE2qXZVZiGoqUsPa5R9 W3rk7Rih4IaEqigVchYB5oYdzNJP4BbgDikCKwZKzFAYmWlOCogD0C+pZztqdj7UWLwxgRn25Xl CQDYhpuYy05dIRw== 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) Reviewed-by: Mat Martineau --- 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 f63c6b117f97..08d06090a0a0 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 d285df7d41d2..74d00b2f2a76 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 bf4607c1fd04..1d9834252515 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 Jun 8 07:26:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E43742E7397 for ; Fri, 29 May 2026 03:22:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024936; cv=none; b=lG2x67i/oOgnwPljVBrAk5+wGshnyt1I8JSQ5dXv4pioS1ePWdjJG7ksJHxoYWTcpuNxnrRpLfi0R0HVrt5nho5Mdr2Q/gipGIjPw9p6UsqmuzTeIxJQkvn8IleLLfgt3URetInOhA99d3DH6qTHbOtQiLOXNlHCVG2iTVAYsUY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024936; c=relaxed/simple; bh=68FxwL4sYU3QKtoem93zSbxBS5PaCwBlE1GZuWL0q48=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=m+0T5wEqWIneOcYvPyclDpZmac4VZ6jXvFZpAIx9n9RVxV9QwSjtE0zKNNNlZGddk5sbxKQVkDGtpLgE8gGHM81E6JlSap0v2TyE6xoaaedMVX2YIU3hE8v/C9zplddCOI6K9f3sHKms9IQ2IRywoLLOVWMkSegtMJyW0LRDi5g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=E21cA5k7; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="E21cA5k7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0D84E1F00A3C; Fri, 29 May 2026 03:22:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780024934; bh=DpGFWX5sH5x3NiULMC+ThpJbHAA0MwLxWaqsfDFrSY0=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=E21cA5k7A6ZznaC4q78IGpgQowgSFclIECIdRugvbb7EsXYrCqK3R8WTf+8yM6TRq kf8m6bvYZv9MuOdok8ULirKI2nXCVBuWNk3IL7bAHByQ0LOsWhN4hFNchoyfqZhkxI CXxU4YXaxLAN24ZAlbfHpRkUah4VkLryR6gmtUy5B0/wEbWZmaW0eaMEFaqYIoPtsg cyCzyLzzebhhAJEaaW2y3Gp1kjhscvXcYUH4uqekkFv3aAK1OJAhKLsW2/uV02VX50 4rKuhbCT3r4qQLTkSshVt0oMO5ayYFI06iM/NPgK6y1L8ECcj6y9o6661rhjo67DPA vVfUMUrXtzLyQ== From: "Matthieu Baerts (NGI0)" Date: Fri, 29 May 2026 13:21:49 +1000 Subject: [PATCH mptcp-next v4 11/15] mptcp: pm: rename add_entry structure to add_addr Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-mptcp-add-addr6-port-ts-v4-11-cea393fa33a2@kernel.org> References: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> In-Reply-To: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3971; i=matttbe@kernel.org; h=from:subject:message-id; bh=68FxwL4sYU3QKtoem93zSbxBS5PaCwBlE1GZuWL0q48=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqGQZWGjzebOrNJi1pc3GdBRZzuOEDF0zqutdJA zDCssZgybOJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCahkGVgAKCRD2t4JPQmmg c8WmD/9wFOyDNsji0YzkYMunYgVtUqbZ3eRgSk0d6Ou1/ycKMLq2kMcQvy/EojdKYh6QunaRU6y UWRxVMWuyzs5hVqpxu6KBEurIRr/CFsiAq5OD3Lku5t/cDylx523ixN6bgmSAdFyIQoMBQD0n/m mBBB95h3qdr5CASTA4SjR6qGuioJ5bk3NfoiI7QEcmCA9GTAipG1idv1NB4jhjKaUk6Qk+VdVzc vAsYwQbaEj0mLWCxdgzfmVosJGI6z2X7qn/5bT7Z+wKv58fPt2wpuZjasVXHc6+MV/CnugC1FiF xOKys7kPvMAs7/hkEaQlBXJo8PI4wkK8xD0hK4NKHd+EFXMIt8IKC+leG6ca8BWvzhXbZ1QHSuq PN4w5Ths5ptalS9BcQM7m3+VFU6TxOVwh6A79YsV6SbthicsY/ioy8MICPmWUUHXmB4AnNBLFCn NkW71BbWhU5ujIxS5r/jG86RZLF75gLJW4oz2W73U/QUF+ichNiUjBtJ4t3h4YyfXkt1FKG08p7 xw4/mqo0BHD30+iAiT2HxovsC4x7yZ6nLrmihVJLvphBcTvnZkzJFoUPLzzRchJZq7DaMpK54QJ dr2uaSjKTtIlCW0kIh/iwW5eHC2AdHoP6R7NnDZU+wueVIqcI6rN3EIjYSfQApyGbzE4VrpXpvy 50I/n58yYZ7fN0A== 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) Reviewed-by: Mat Martineau --- 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 08d06090a0a0..3d930298d9d8 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -12,7 +12,7 @@ =20 #define ADD_ADDR_RETRANS_MAX 3 =20 -struct mptcp_pm_add_entry { +struct mptcp_pm_add_addr { struct list_head list; struct mptcp_addr_info addr; u8 retrans_times; @@ -133,11 +133,11 @@ bool mptcp_pm_has_subflow_saddr(const struct mptcp_so= ck *msk, return false; } =20 -static struct mptcp_pm_add_entry * +static struct mptcp_pm_add_addr * mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk, const struct mptcp_addr_info *addr) { - struct mptcp_pm_add_entry *entry; + struct mptcp_pm_add_addr *entry; =20 lockdep_assert_held(&msk->pm.lock); =20 @@ -152,7 +152,7 @@ mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock= *msk, bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk, const struct mptcp_addr_info *addr) { - struct mptcp_pm_add_entry *entry; + struct mptcp_pm_add_addr *entry; bool ret; =20 entry =3D mptcp_pm_del_add_timer(msk, addr, false); @@ -164,7 +164,7 @@ bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock = *msk, =20 bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *msk, const struct sock= *sk) { - struct mptcp_pm_add_entry *entry; + struct mptcp_pm_add_addr *entry; struct mptcp_addr_info saddr; bool ret =3D false; =20 @@ -340,8 +340,8 @@ static unsigned int mptcp_adjust_add_addr_timeout(struc= t mptcp_sock *msk) =20 static void mptcp_pm_add_timer(struct timer_list *timer) { - struct mptcp_pm_add_entry *entry =3D timer_container_of(entry, timer, - add_timer); + struct mptcp_pm_add_addr *entry =3D timer_container_of(entry, timer, + add_timer); struct mptcp_sock *msk =3D entry->sock; struct sock *sk =3D (struct sock *)msk; unsigned int timeout =3D 0; @@ -397,12 +397,12 @@ static void mptcp_pm_add_timer(struct timer_list *tim= er) sock_put(sk); } =20 -struct mptcp_pm_add_entry * +struct mptcp_pm_add_addr * mptcp_pm_del_add_timer(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, bool check_id) { struct sock *sk =3D (struct sock *)msk; - struct mptcp_pm_add_entry *entry; + struct mptcp_pm_add_addr *entry; struct timer_list *timer =3D NULL; =20 rcu_read_lock(); @@ -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 1d9834252515..52af825c3f8e 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 Jun 8 07:26:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8776B367B73 for ; Fri, 29 May 2026 03:22:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024937; cv=none; b=qQMX19rIhvJgaujvY0WYq/D2Fm2sAOVa6Sz9mQRLSlDoUvzoeGH3B5+ahT4Ac6SFCSZU3ehEJc3sotkYiOoZRsBnaqNYSGhMvF3IDLwW+oy8mr03m+nnxwXke2AWTQRChkox/ZL7lkXfuUgCm7HK8uhkNqqZhw7MCWgI/Ue7Ov0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024937; c=relaxed/simple; bh=cDu2PJoVyYus6UJlUK7GmMifuBXngwm64cPHljMp+nE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=D0yRLH1aIOaHturDsngFSKEDaZQn8EutQRtmryVH2DR4sOxjAUAisjzTDgZRcBzzFhriRgZQKW0+PJivzrDWImYd5EZLj79awj3igfOJ9X4Y3/YCWvaW20BGiQW8C/P3Hv5S1lWDsUuMQc4eIbCqC/3ahBqLStckJy34lYieQQU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ldNMaWmy; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ldNMaWmy" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5E1EA1F000E9; Fri, 29 May 2026 03:22:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780024936; bh=h9UH6Za/FbaCCf1KuXteF/I0jIDe1aMJkIG/p3W26Eo=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=ldNMaWmy3S6GdPvOgEESWhZLaL45gi46ICnMzbbGaDe6iD+bSYDgKOOLMsW9dNC70 rPapO19nHJW/1deFg7A0Ee9JFqHAhF74BJO14V0SVPARBvlEUu7Kaxv3DQcnMdjkXy yK4gfT10lEVkti/D081Geen8MVFo0lOngEcPGFKK22CAKFQt9G2vqk7OtqdPk64ZV8 83q2in5K3BJ2aPYu1p69Wfzv/o5pvIMrVjMSIqqi8rAn12PaXgBii8K0n1xifdX1q6 lEpQBd7GgelsqQorLUi25bnxg6on8HqrSzahkBt5Ovl8G4OPAlD+PEKnx86LE3dYfu liL4/M+polzXQ== From: "Matthieu Baerts (NGI0)" Date: Fri, 29 May 2026 13:21:50 +1000 Subject: [PATCH mptcp-next v4 12/15] mptcp: pm: uniform announced addresses helpers Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-mptcp-add-addr6-port-ts-v4-12-cea393fa33a2@kernel.org> References: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> In-Reply-To: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=12026; i=matttbe@kernel.org; h=from:subject:message-id; bh=cDu2PJoVyYus6UJlUK7GmMifuBXngwm64cPHljMp+nE=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqGQZXL58Uq7OS9pmi3bGjMGiswnjrsFqC0eYJi QD2RBVY2J2JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCahkGVwAKCRD2t4JPQmmg cwSfD/0Xj6HfagXkIs35KfYBr2W2kR8QdSwoQN9MsasutTMD+nfYtMtGWSQnADOhg9GSN7E+fyh ultEFQSVDh4Yexn9eXFX+lNOsLS5q7p3ebDwvsOtQnaz65/W+LS4YplF4U79aqYO37fnYrWBRo0 i7DXszaDnjOOCqG7S+qnCDH2NRZIKNpUb2T26o3ySOp8hYd8UPZHiHeWWXfbWIHL9c4KbNGffMZ uZ32vdLWFF/2//Kch2I+gF+Zd9/YwANh5ne0ZuJJmg/Ng1R5h6s2ZDyXscNPHLLYx1nAfZSx4LB jCmIUUnkmzUCLtPK+4+3DzQsNvo45rRSM6rEbvzgbaITv5xRK+3Z5xDWksG6+X8Lt5iCHYGnpnX KykW6VcIJFi+18fC5AvxEvR7xCyOorl7X5hGGSsydbVmoxhTGywmyfc3gpGepNUM0y6+XrAN+j1 PK2p/xAEZ998fKbuX1ygo4pZA2WYpdc8CtULo9p+DZbuvdG2LK1sCnUiBMzyt1r0P8zjGDf6JrI VBe5TaMi7OjvDpCQVott8/tB1GblDJbRGX/oV/farkorE1NYtJ+/jdLnMWz0IIMeTKyFIMsnfD7 xbh5rFJav11dWviCBmUsaAG4fdf7gL8Y7hTz0QTMPkRi12DVWEYdoevwI65dJuXlyTQSZUKTIEb 5DHqc56QyrTx0qw== 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) Reviewed-by: Mat Martineau --- v2: also update comment mentioning mptcp_pm_announced_del_timer. --- net/mptcp/options.c | 2 +- net/mptcp/pm.c | 35 +++++++++++++++++------------------ net/mptcp/pm_kernel.c | 10 +++++----- net/mptcp/pm_userspace.c | 4 ++-- net/mptcp/protocol.h | 12 ++++++------ net/mptcp/subflow.c | 4 ++-- 6 files changed, 33 insertions(+), 34 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 4673530018bf..5d9bfd559310 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1218,7 +1218,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 3d930298d9d8..0f05222ecda2 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -134,8 +134,8 @@ bool mptcp_pm_has_subflow_saddr(const struct mptcp_sock= *msk, } =20 static struct mptcp_pm_add_addr * -mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk, - const struct mptcp_addr_info *addr) +mptcp_pm_announced_lookup(const struct mptcp_sock *msk, + const struct mptcp_addr_info *addr) { struct mptcp_pm_add_addr *entry; =20 @@ -149,26 +149,26 @@ mptcp_lookup_anno_list_by_saddr(const struct mptcp_so= ck *msk, return NULL; } =20 -bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr) +bool mptcp_pm_announced_remove(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr) { struct mptcp_pm_add_addr *entry; bool ret; =20 - entry =3D mptcp_pm_del_add_timer(msk, addr, false); + entry =3D mptcp_pm_announced_del_timer(msk, addr, false); ret =3D entry; kfree_rcu(entry, rcu); =20 return ret; } =20 -bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *msk, const struct sock= *sk) +bool mptcp_pm_announced_has_ssk(struct mptcp_sock *msk, const struct sock = *ssk) { struct mptcp_pm_add_addr *entry; struct mptcp_addr_info saddr; bool ret =3D false; =20 - mptcp_local_address((struct sock_common *)sk, &saddr); + mptcp_local_address((struct sock_common *)ssk, &saddr); =20 spin_lock_bh(&msk->pm.lock); list_for_each_entry(entry, &msk->pm.anno_list, list) { @@ -364,7 +364,7 @@ static void mptcp_pm_add_timer(struct timer_list *timer) =20 spin_lock_bh(&msk->pm.lock); =20 - /* The cancel path (mptcp_pm_del_add_timer()) can race with this + /* The cancel path (mptcp_pm_announced_del_timer()) can race with this * callback. Once cancel updates retrans_times to MAX, suppress further * retransmissions here. If this callback acquires pm.lock first, one * final transmit attempt is still possible. @@ -398,8 +398,8 @@ static void mptcp_pm_add_timer(struct timer_list *timer) } =20 struct mptcp_pm_add_addr * -mptcp_pm_del_add_timer(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr, bool check_id) +mptcp_pm_announced_del_timer(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr, bool check_id) { struct sock *sk =3D (struct sock *)msk; struct mptcp_pm_add_addr *entry; @@ -408,7 +408,7 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk, rcu_read_lock(); =20 spin_lock_bh(&msk->pm.lock); - entry =3D mptcp_lookup_anno_list_by_saddr(msk, addr); + entry =3D mptcp_pm_announced_lookup(msk, addr); if (entry && (!check_id || entry->addr.id =3D=3D addr->id)) { entry->retrans_times =3D ADD_ADDR_RETRANS_MAX; timer =3D &entry->add_timer; @@ -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; @@ -739,7 +738,7 @@ void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, =20 spin_lock_bh(&pm->lock); =20 - if (mptcp_lookup_anno_list_by_saddr(msk, addr) && READ_ONCE(pm->work_pend= ing)) + if (mptcp_pm_announced_lookup(msk, addr) && READ_ONCE(pm->work_pending)) mptcp_pm_schedule_work(msk, MPTCP_PM_SUBFLOW_ESTABLISHED); =20 spin_unlock_bh(&pm->lock); @@ -983,7 +982,7 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, * let the PM state machine progress. */ if (skip_add_addr) { - mptcp_pm_del_add_timer(msk, addr, true); + mptcp_pm_announced_del_timer(msk, addr, true); mptcp_pm_subflow_established(msk); } return ret; @@ -1171,7 +1170,7 @@ static void mptcp_pm_ops_release(struct mptcp_sock *m= sk) =20 void mptcp_pm_destroy(struct mptcp_sock *msk) { - mptcp_pm_free_anno_list(msk); + mptcp_pm_free_announced_list(msk); mptcp_pm_ops_release(msk); } =20 diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index 8436e66daab6..331f6fa99014 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -374,7 +374,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(stru= ct mptcp_sock *msk) /* If the alloc fails, we are on memory pressure, not worth * continuing, and trying to create subflows. */ - if (!mptcp_pm_alloc_anno_list(msk, &local.addr)) + if (!mptcp_pm_announced_alloc(msk, &local.addr)) return; =20 __clear_bit(endp_id, msk->pm.id_avail_bitmap); @@ -1054,7 +1054,7 @@ int mptcp_pm_nl_add_addr_doit(struct sk_buff *skb, st= ruct genl_info *info) return ret; } =20 -static void mptcp_pm_remove_anno_addr(struct mptcp_sock *msk, +static void mptcp_pm_remove_announced(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, bool force) { @@ -1063,7 +1063,7 @@ static void mptcp_pm_remove_anno_addr(struct mptcp_so= ck *msk, =20 list.ids[list.nr++] =3D mptcp_endp_get_local_id(msk, addr); =20 - announced =3D mptcp_remove_anno_list_by_saddr(msk, addr); + announced =3D mptcp_pm_announced_remove(msk, addr); if (announced || force) { spin_lock_bh(&msk->pm.lock); if (announced) @@ -1100,7 +1100,7 @@ static int mptcp_nl_remove_subflow_and_signal_addr(st= ruct net *net, =20 lock_sock(sk); remove_subflow =3D mptcp_pm_has_subflow_saddr(msk, addr); - mptcp_pm_remove_anno_addr(msk, addr, remove_subflow && + mptcp_pm_remove_announced(msk, addr, remove_subflow && !(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT)); =20 list.ids[0] =3D mptcp_endp_get_local_id(msk, addr); @@ -1240,7 +1240,7 @@ static void mptcp_pm_flush_addrs_and_subflows(struct = mptcp_sock *msk, if (mptcp_pm_has_subflow_saddr(msk, &entry->addr)) slist.ids[slist.nr++] =3D mptcp_endp_get_local_id(msk, &entry->addr); =20 - if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr)) + if (mptcp_pm_announced_remove(msk, &entry->addr)) alist.ids[alist.nr++] =3D mptcp_endp_get_local_id(msk, &entry->addr); =20 if (slist.nr =3D=3D MPTCP_RM_IDS_MAX || diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index 74d00b2f2a76..ad6ba658e5a5 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 52af825c3f8e..27a0354a1ebd 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 Jun 8 07:26:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A885036A36A for ; Fri, 29 May 2026 03:22:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024938; cv=none; b=uyFZwEMp5Sd2PJT56tlQiOgRAj3aF23eG+foA/opS0CyJ1okgba8XsMSB0JV/0JG1pAt6Lxo/rz8AkCzo1IH6JGXP4Vl7txj7lchEahown9xNb4CCuTS4X6hW+J9yLAaf+t7LE+QBD+O6Pt93G/Fct7oZkOQ4nz/6WxDRfhxJPI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024938; c=relaxed/simple; bh=0tAcJaJg7M+WY692YK0MRuA+nUvW5ayBe4Wvt8FSRUI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dxRYKjsWyxFplcaMNFg8hyZ84Nasf9XlHLXmyHN7QVnv1GA9hPImML7RjSGrqNlFRsHWnI5bxUVz+Cm/1IfT2jaODdG6Bdj5lGOnLY1DhTAmmYeCBD499bSLWVuHhctLyavoGPeCtaIQWQNg68eAUAzBg3znt7+TQIWceuLqF24= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TKPIV+MQ; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="TKPIV+MQ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id AD6421F00A3A; Fri, 29 May 2026 03:22:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780024937; bh=SYSlHs/PHrizoIPKvhzxLUIcZXJpbu9nlwn3/Sp1OBU=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=TKPIV+MQZTFvJJT/DJtt2TrlmpFtNJ8Qia6HCRHNRSFAYm/anxuU2pUZ7Oel5Il8O Akph9gZJGRX3ph5Qd4dcddClBqzCNtvcrYz9/c1idsvXphpxpZLRM26gpdEuqvIwCC NyI1uZ1gpEEsvSeWPKHHPSbbnhvrbOk6LfY3Wg5mmMfUYLzFHHUSEWRRGs//QBS4Nr UuFgq6EMQ6xFTarTg66bf9DKKy4k4EVy7yjQBkIfMuMsNCTN9J1j1T36IJqQsSUIxZ dr/0jcbP4Hqd325/Ww86dLHV6+RuNUxYHLjHkTkLacKOdoOQoq1i9anVvcBiil82lQ o90KLN0i6hGmA== From: "Matthieu Baerts (NGI0)" Date: Fri, 29 May 2026 13:21:51 +1000 Subject: [PATCH mptcp-next v4 13/15] mptcp: pm: remove add_ prefix from timer Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-mptcp-add-addr6-port-ts-v4-13-cea393fa33a2@kernel.org> References: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> In-Reply-To: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2718; i=matttbe@kernel.org; h=from:subject:message-id; bh=0tAcJaJg7M+WY692YK0MRuA+nUvW5ayBe4Wvt8FSRUI=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqGQZX4xN2v+IKQRdMbtKe7V/l5vvQ1HoPbkAHD /veeD8Cg7eJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCahkGVwAKCRD2t4JPQmmg c8pyD/9G2dvf+7vucnvvmukiHOkum/yNr/P/SJMoIHeOzN01Rana0anA8WgWV2w6484dvqq7qu9 ANPFxn6l4XeAIyWYhh7yyT2YnSJDzdVPsEQusTZJWi2m/wS6vDOGLpce/k8/1eyaA4Ra3FtBdIY QqYYpXbs8Czi/4H+14glwrBpWopd0tAt+jMNlzDm7V2SH6TRo7jTbPhArlDnV9of30atsj15rmd DHzQWX9VwGnd0q0gutxWjFijmwG/q+maTAhabtyX1a81Id9yD1grufZ1yF/wlButn9xY+AhEpRw EHmfdHft7RGUl2G6Q//TmpcLvPpm13a/0WJON9eDrvyorTpXuuFbMm2L2oQ7kLLLKsTZHEu5f+U 79MUHXizDpqZeL4OX4G9EPPc63qi26KX4gUpyuttIBxtZNRP07ZuC81K9kq0J2YE+UEGggygqXm n+f+whVqgOkmeqMj4pTs7nXBBlgcR2QvyuzdPNy3T55dWSFTh5qwfUadthka0/zU4kJY15/VugW WKMRuGBSMPz5D8Y4GJFgJvHF5R6ZRA4rqJoIEcblm2LIPmLF7Ye4p8TSsZvuBroGFhFlFmA5SgM oBZZfgz0p/j3UiBMn3Bs3EdUlNZFjTy41uCJK3i8AfCuqQtG/Ap3Pq4LYjvSWWWVZxsls2SsPpW MeiNEFy/1TPDCnA== 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) Reviewed-by: Mat Martineau --- 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 0f05222ecda2..6c0468f1609b 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -17,7 +17,7 @@ struct mptcp_pm_add_addr { struct mptcp_addr_info addr; u8 retrans_times; bool timer_done; - struct timer_list add_timer; + struct timer_list timer; struct mptcp_sock *sock; struct rcu_head rcu; }; @@ -338,10 +338,10 @@ static unsigned int mptcp_adjust_add_addr_timeout(str= uct mptcp_sock *msk) return rto; } =20 -static void mptcp_pm_add_timer(struct timer_list *timer) +static void mptcp_pm_add_addr_timer(struct timer_list *timer) { struct mptcp_pm_add_addr *entry =3D timer_container_of(entry, timer, - add_timer); + timer); struct mptcp_sock *msk =3D entry->sock; struct sock *sk =3D (struct sock *)msk; unsigned int timeout =3D 0; @@ -411,7 +411,7 @@ mptcp_pm_announced_del_timer(struct mptcp_sock *msk, entry =3D mptcp_pm_announced_lookup(msk, addr); if (entry && (!check_id || entry->addr.id =3D=3D addr->id)) { entry->retrans_times =3D ADD_ADDR_RETRANS_MAX; - timer =3D &entry->add_timer; + timer =3D &entry->timer; } if (!check_id && entry) list_del(&entry->list); @@ -458,12 +458,12 @@ bool mptcp_pm_announced_alloc(struct mptcp_sock *msk, add_entry->sock =3D msk; add_entry->retrans_times =3D 0; =20 - timer_setup(&add_entry->add_timer, mptcp_pm_add_timer, 0); + timer_setup(&add_entry->timer, mptcp_pm_add_addr_timer, 0); reset_timer: add_entry->timer_done =3D false; timeout =3D mptcp_adjust_add_addr_timeout(msk); if (timeout) - sk_reset_timer(sk, &add_entry->add_timer, jiffies + timeout); + sk_reset_timer(sk, &add_entry->timer, jiffies + timeout); =20 return true; } @@ -482,7 +482,7 @@ static void mptcp_pm_free_announced_list(struct mptcp_s= ock *msk) =20 list_for_each_entry_safe(entry, tmp, &free_list, list) { if (!entry->timer_done) - sk_stop_timer_sync(sk, &entry->add_timer); + sk_stop_timer_sync(sk, &entry->timer); kfree_rcu(entry, rcu); } } --=20 2.53.0 From nobody Mon Jun 8 07:26:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E8A8336A36A for ; Fri, 29 May 2026 03:22:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024940; cv=none; b=XUalLDDF1FkLUiuDAZCwXHZPjdLlDviQJCOqskP7ZqTegl5MFLBAyAI0lmPFXB/05OYxMaEh/XOlFPpCHgh3d2472b+zug1VC4Ivtf17xi5XTGP9k8u2qH4/yx9AbOHGq3tjLiTKeq3CDeLYzNM762rvqMvfsLCWbFgiL9DCRvs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024940; c=relaxed/simple; bh=YWlAulkQZABrXxcDww3dS+p57II8NsDMK5QfB5/sBeU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NKn+gHqnWNfY1bczva4lG0L5F/vcHZs6xOre3CaWPtcLJHJUK5wn/C/JofZjSzh1mE7K4CKa7FmLKzdQofdwSu/Xe5Rhcto4eUdW7c6HKMafDiOrs2Z81wkm9aQZN5vviQURHNwUqLhRkJXsZ6mHR0bbjCfaQc4+pi3oNjNurLA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=BUVZdWP5; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="BUVZdWP5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E45E21F00A3C; Fri, 29 May 2026 03:22:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780024938; bh=p7NsbMyuxlMZKFD/C68T+zFAFT9JsiDfSLo+E4UheuU=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=BUVZdWP5CfjvdJDVLWaYRUGYEZ8/d7FSuFT5Rm5qlc4oXPDZwjlcAmDaFEDABoAhO vQR0wFWnNNAUxcsmZb4Ld5/46rGJLms+W9KxTj0cXs4vvC0czVqWR8ByLOWL74fNzU Xfk/lDo341QI0nTTb3rAZzXx6fNYp6AayhgAKswjvxvd+644cKMtY5JZwhiFQVbtv+ ZQQRv5dzqlrr/pdseWeQGItiMz0sVv5mqBcFG4ET2u//kCUxfMgIHvH14s53Koe7/e CADXW6M8CEk+InF4aXPLzuI7dX68IfunqdCeiRaPK29Yc0WVIGa+lWgRedhPxW1WTp FlpanSZnkvtJw== From: "Matthieu Baerts (NGI0)" Date: Fri, 29 May 2026 13:21:52 +1000 Subject: [PATCH mptcp-next v4 14/15] mptcp: pm: make mptcp_pm_add_addr_send_ack static Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-mptcp-add-addr6-port-ts-v4-14-cea393fa33a2@kernel.org> References: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> In-Reply-To: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@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=YWlAulkQZABrXxcDww3dS+p57II8NsDMK5QfB5/sBeU=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqGQZXeiuhWePv3JxgVQssmj2zhoeZSTmq0o/z9 GH1vaQcp1OJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCahkGVwAKCRD2t4JPQmmg c0JXD/0V/K61TsA2Sgxo6AdpkJH7tKfgD37tpW8Jswdu9f3d0WdkJhHBUU0LpIKwucMq5DbmxXC nDF839sYSbY09wp2PoNV8a0GBDWJcwqcVeSH+n+TeCZdA83+7Vb60Xqy1zmz2aUhpi7YeKb9Vxl Lm/uF8jSMGEto5okCKEpfUtH5JbvhYjod34Lj4eT+o6wj6gbcgpErwFBD6jLbIRRrOBABS+ij9U KiJ7IL4EhluWTbWLbnBP+tDu7b0HrjOMRhsLScL12EkbnzeCP1tGbNUyWvsZzJe8MJjSiCvQV4j nHclJNrZ4Bs43U9qV3fDXDgq0nAg+JJEPNESoT9aIKwBoyRDVTkNE+5YNVaKp4VlCe7XJJuYoMF tsDnOXIEXlsoSCMWrdPwH3RmWoxaShX/9+qvqMvMehQFXiZQniPW3SWHHuvIgtdc2/pM/989x1Z W+P8P/d2Jqrf5HiYdSVhKrTxN9j3HsLQk+1CBvvCSv9lwGDeMooRTjIOyLVSgtG4GXRatzL4uqu 2rwAHGdCgIseNya4FjiwXyQtLrkAKG5qtqYmGTLfn5JZpLwiPMxnPsRKU3LIrQrlUzAzYKLMztz 6kjP70eNwWE33GTEb6ZP9l69vgeIRlpOW6QOX53+RuAdrgWdrDBFJuLH4zKB+6GoJgufYfpPHAK gKU/Hg0+2Rxtgdg== 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) Reviewed-by: Mat Martineau --- 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 6c0468f1609b..a781e21d74f3 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -226,6 +226,7 @@ static bool subflow_in_rm_list(const struct mptcp_subfl= ow_context *subflow, return false; } =20 +static void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk); static void mptcp_pm_addr_send_ack_avoid_list(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_list) @@ -744,7 +745,8 @@ void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, spin_unlock_bh(&pm->lock); } =20 -void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk) +/* To be called while pm->lock is held */ +static void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk) { if (!mptcp_pm_should_add_signal(msk)) return; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 27a0354a1ebd..71bb522483ef 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 Jun 8 07:26:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E2A236CE10 for ; Fri, 29 May 2026 03:22:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024941; cv=none; b=G68rKxEOQnqUmE3ReE+AHCHKJPXR9miUP1/en52lw6T6GJBE/S7BrJFmw1jfaq8rvx8adbrv6DgeEVVxeeBdZw9JwenOpgdQNq3jWDojIntbegRmsOLg0n1cKgvFGnnTh2EVhr3nS3J0ERej3m7nPttNfY13GPtieP8l7tU0mmU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780024941; c=relaxed/simple; bh=QtvvOy39OgkjhOQ05E7sEUnlKwGOqcasSvumz6pK310=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=r2mOc1Jyk2CBTAha+6Vq0nO9Qper94SxU3TLA7fALYmku+un8KYfu8Gyh6SNq+OfwqmNiRHyBnULEzIHvV5N/LeslvYXfN02LCNaM2mfKoczWol+WH878Ai7D6dL6feP28xBzAm0oHWS5eWUAb+44nWxvDjdc/ay+1/ejlmgm2o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ipUqeeB9; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ipUqeeB9" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5BA571F000E9; Fri, 29 May 2026 03:22:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780024940; bh=RIc4jdhURr53WQpzyLkumdAK//seYnVg7PqG2n83M7g=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=ipUqeeB9cQNXvPqdGkyqD12nR9jyk6WjHAIfGCwUWKI1RIEGMZNIP4OHVuL+0wcn+ OXtOmBH/Y8MkVDe7ATRkOyPL7Cprvyjk3whckr6nSjo5RqafhpH/P7sQcs51vesGXC H0AB5SiVNh8tPwbnCpc6hNibDrv3LBAZ5iuF/wYEDfFgKkUbSuJiEL55siIa5+Chlh tyMYKMlxDN8coepF5GuehMDLR5DMYELOYZ0AC0NYScFPSr6FcCH0Hq+0bYBFB4iCGO U8xiCcBiN51AC9QHn+mWff60J9TbKjikbMhNlV5Hz3mTZn9ORJvZf88NsFwX4cqoYc FpKI+JFH1gqYg== From: "Matthieu Baerts (NGI0)" Date: Fri, 29 May 2026 13:21:53 +1000 Subject: [PATCH mptcp-next v4 15/15] mptcp: pm: avoid using del_timer directly Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-mptcp-add-addr6-port-ts-v4-15-cea393fa33a2@kernel.org> References: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> In-Reply-To: <20260529-mptcp-add-addr6-port-ts-v4-0-cea393fa33a2@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5293; i=matttbe@kernel.org; h=from:subject:message-id; bh=QtvvOy39OgkjhOQ05E7sEUnlKwGOqcasSvumz6pK310=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqGQZXDXrpZI/Q3NMvLUPGUMuc97e+7YfQsAvIu BAbn+RCRuqJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCahkGVwAKCRD2t4JPQmmg czmdD/95Q5XhKTezoesugSqSl5OLkESaJGcr+x1WuHBaBwbHLcTobm2L7x8GdpYTMqHr4M9H3tL 2aKxicFhKLLQQQ9Sw2RPqSzhRVUm0pWFqcoR2l5kTNLUOa7yz2wyJ/dgZ80mtgw/xQXP2VnM+WE y76yUkziXpKGpBZZU+Wn6I0a+5UNNej1y9llbgzm8JxW7X3Ll0kIwQu8UJlqFi+tB+fK9wmj2rp gwECCbmzbspInJ9FaoKVZWPMcHSyyYNr8tZ6jwtb3DGuDxIWaFQk8oTcChrajPgvqamxuAapWg9 ylZ7P5s/aSYJb5I05bMO6exn0XItif0ZMSbrePRmqW5PYj2ha3Br4JMT1NskanNccbg0CN5r1d2 iDSwEkysLiUbluLyZ63mDYH8rsFpqS52kQYGwcp1t2c5nJZk49ftD7t0f8XVcnTAu0wUgXdgE7j LzPf6hzp7LH7Ynmuy4tEp2igjSVpCYIIyrRDDEKPf7d8D78DfqNfJHpRyejURs3l6DndYv71v+g jeGoesUtgyQC61Tka3qf16uI7mKLz+Pc1kEJai9TLz1dsmr87FSgI0r5caK4hHgW6cRt9El4lga X2HB5m1Tdyq12Jy5GhLLHWJTr4GblYQB4cbJtTra+v65pdc1vywTx5/LyzoUh6jl7CEeWsZkCiw C2wvPlH1UimKO2Q== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 mptcp_pm_announced_del_timer() removes the matched ADD_ADDR entry (if found) from the ADD_ADDR list only if check_id is false. That's dangerous, and not clear, because it means the caller should be free the entry only in some cases, and it easy to miss that. Instead, make it static, and call it from mptcp_pm_add_addr_echoed, which is the only other case where mptcp_pm_add_addr_del_timer should be called with check_id set to true. Bonus with that: a second call to mptcp_pm_add_addr_lookup_by_addr() can be avoided. Note that instead of adding the signature above to avoid a compilation issue because this helper is called before the definition of the function, the whole helper is moved above where it is first called. Its content is untouched, except the addition of the 'static' keyboard. Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Mat Martineau --- 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 5d9bfd559310..b8ef59632638 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1218,7 +1218,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 a781e21d74f3..452b17b9330c 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -149,6 +149,40 @@ mptcp_pm_announced_lookup(const struct mptcp_sock *msk, return NULL; } =20 +static struct mptcp_pm_add_addr * +mptcp_pm_announced_del_timer(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr, bool check_id) +{ + struct sock *sk =3D (struct sock *)msk; + struct mptcp_pm_add_addr *entry; + struct timer_list *timer =3D NULL; + + rcu_read_lock(); + + spin_lock_bh(&msk->pm.lock); + entry =3D mptcp_pm_announced_lookup(msk, addr); + if (entry && (!check_id || entry->addr.id =3D=3D addr->id)) { + entry->retrans_times =3D ADD_ADDR_RETRANS_MAX; + timer =3D &entry->timer; + } + if (!check_id && entry) + list_del(&entry->list); + spin_unlock_bh(&msk->pm.lock); + + /* Note: entry might have been removed by another thread. + * We hold rcu_read_lock() to ensure it is not freed under us. + */ + if (timer && check_id) + sk_stop_timer(sk, timer); + + rcu_read_unlock(); + + if (timer && !check_id) + sk_stop_timer_sync(sk, timer); + + return entry; +} + bool mptcp_pm_announced_remove(struct mptcp_sock *msk, const struct mptcp_addr_info *addr) { @@ -398,40 +432,6 @@ static void mptcp_pm_add_addr_timer(struct timer_list = *timer) sock_put(sk); } =20 -struct mptcp_pm_add_addr * -mptcp_pm_announced_del_timer(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr, bool check_id) -{ - struct sock *sk =3D (struct sock *)msk; - struct mptcp_pm_add_addr *entry; - struct timer_list *timer =3D NULL; - - rcu_read_lock(); - - spin_lock_bh(&msk->pm.lock); - entry =3D mptcp_pm_announced_lookup(msk, addr); - if (entry && (!check_id || entry->addr.id =3D=3D addr->id)) { - entry->retrans_times =3D ADD_ADDR_RETRANS_MAX; - timer =3D &entry->timer; - } - if (!check_id && entry) - list_del(&entry->list); - spin_unlock_bh(&msk->pm.lock); - - /* Note: entry might have been removed by another thread. - * We hold rcu_read_lock() to ensure it is not freed under us. - */ - if (timer && check_id) - sk_stop_timer(sk, timer); - - rcu_read_unlock(); - - if (timer && !check_id) - sk_stop_timer_sync(sk, timer); - - return entry; -} - bool mptcp_pm_announced_alloc(struct mptcp_sock *msk, const struct mptcp_addr_info *addr) { @@ -731,15 +731,18 @@ void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, const struct mptcp_addr_info *addr) { struct mptcp_pm_data *pm =3D &msk->pm; + struct mptcp_pm_add_addr *entry; =20 pr_debug("msk=3D%p\n", msk); =20 - if (!READ_ONCE(pm->work_pending)) + entry =3D mptcp_pm_announced_del_timer(msk, addr, true); + + if (!entry || !READ_ONCE(pm->work_pending)) return; =20 spin_lock_bh(&pm->lock); =20 - if (mptcp_pm_announced_lookup(msk, addr) && READ_ONCE(pm->work_pending)) + if (READ_ONCE(pm->work_pending)) mptcp_pm_schedule_work(msk, MPTCP_PM_SUBFLOW_ESTABLISHED); =20 spin_unlock_bh(&pm->lock); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 71bb522483ef..b63571400c6a 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