From nobody Mon May 25 18:11:40 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 A812D3BB68B for ; Tue, 19 May 2026 21:25:24 +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=1779225925; cv=none; b=fq9EtoafZh+VscBzYRZ/BGXhWvoG5SOX54jukKi70CLHABcQOaceocs4IyGDb405iooDVL3JIHeMZIGpTwXTMhXlEWX+FdyIExFgAcAOg5WjcFrpdIwuOF4eqcgBaEXN0vg41Bxzt6lZwhq4QYWzGD5mrxT6s06ftyFrz3cnDyg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225925; c=relaxed/simple; bh=mR0L5IhMzumzxywVJel6qYAyqVhXjzd8Qy6dYYVzRNU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=J564z7MQPV/ZYZlZrf6SlaO67OLxKbLBNmmFyQDtf8ow7ZqzYq4+z0FpWTpBupCYrm5bnMTZbJgfucE8sQBjVqSnfJpgPb1EnX6inQB357trwCxVBWQ0bfT2Oku2QXWQyeHPviKYM+fO6YsLJv/LekJP5giHLlk6/59seOABvto= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DBhe/DNi; 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="DBhe/DNi" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8FFAC1F00893; Tue, 19 May 2026 21:25:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779225924; bh=kVmzNYh7ytITgw1CMys8w0w6x9atevCJhI6CdeFkKgY=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=DBhe/DNiYiJSz9i5SSkU5grtMZLj99ZvngcQpDaye/YYgE1yaOM52gYBQKoSMA2FZ +7TSlsxW3iONaPyHww//AJ4VZ5du/7VrHFruKhNfg5qB7DqkE/6CZYDnnXK5ERX34L Q6U4+5s2EEap8b8+vaidrREDTucqJmxNkEc4RbLMs+/VmZck+9YvQEGjQNFlIS43He 2stFHO6Rs5iym+aZBAdNh62rNMpTCpR4jCepjj5J14MHqtDWQPJcl5v+627flNSc2E UirJbcdYUoGVqnq23gmg78QhEK6/K2Q8RaGGh1COB4z96YLIOuT3TiyJW2TcToJWrn FN5uzH8gQqPbw== From: "Matthieu Baerts (NGI0)" Date: Wed, 20 May 2026 07:25:12 +1000 Subject: [PATCH mptcp-net mptcp-next v3 01/16] 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: <20260520-mptcp-add-addr6-port-ts-v3-1-bffa658a7678@kernel.org> References: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> In-Reply-To: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@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=mR0L5IhMzumzxywVJel6qYAyqVhXjzd8Qy6dYYVzRNU=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqDNVAVOUyf+QmSNWQKIZQyghU5g5qE52TrnfC/ vAbdf0JoNWJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagzVQAAKCRD2t4JPQmmg cwRtEACKr/B0l7Rfr0ah9tjab5xKsuA+MvCdDeuFT1L/Q4aF++GlsU9cspOHus1MdUHD1aCFgGg EhfuDwcGDRCWlFUdCqbvOTDdzYgJkOnAnBXXpTZOrnMmCePPjQj3Jlm+IwHD3JISs6VAICENoHS qavgCE7EHbJs3tnuJudv/jwjw0LJhCfUBTloJIBsc9gpTOHnPNuy8M5BcWJg4BR1eZykE+HUBx1 PtUG+nkAk9mUVOV+NBR7cJHHQdzMkJuu5cziDoqznj43ymgfJ+m0DXPPJDHZcawgz51eQhJBK3W QUkjoPkGbDmAdyTKUMCJQnTdpXB+ceZWZuUzC1ISKLtMCy71kLs9vE9+EB3XKPPw/pN7fszoaCx tVb6Af0eY1+sSXbwajP71h5y420wt1rF/hI0sbZ1EKQ5+rdLMYWHLiIAIiyUA1zBFn+u7TSMHCm Y2PpsC+5xpLzJQLEdpoYcoj8smvshRpZqCCZW8B7UTmZYWl2Q5lCHEBoUEtD7b3aWJxY3EFq20n sGM/aBkiBMRglePxFXUWLqA54xO4ZIrb3yukm8ZxIovadz1e4vX/K9rW99uMRTxlAVZpGn9IsAK +JpuJaeggNiPOsZ3y7Nz90TM6AGtVt63BrOP2/VWCDDjGRPKXHLImPI7X4yzSKFD9okoDO9yCnF Db7lsCCItQdVfcA== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 sk_stop_timer_sync() calls del_timer_sync(), which spin-waits for the timer callback to complete on non-RT kernels. But on PREEMPT_RT, it can sleep. Sleeping inside an RCU read-side critical section might trigger a lockdep splat. Instead, keep a reference to the timer, under rcu_read_lock, and call sk_stop_timer*() without the RCU lock. While at it, apply the reversed Xmas order when declaring variables. Fixes: 426358d9be7c ("mptcp: fix a race in mptcp_pm_del_add_timer()") Signed-off-by: Matthieu Baerts (NGI0) --- For -net. 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 b460b153dc0f..4fc7d648b672 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 May 25 18:11:40 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 4FBFB31AA9B for ; Tue, 19 May 2026 21:25:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225927; cv=none; b=GOJNkYqqeRnBjDLPPEOzo6oSyayaD/YyjtgtCssM+ig6SS28OCYnibAvMK1rjadpV5ZD271JO2HGy1VKEU596dWCnjb1NTyp+iMGzgkFinztSwAtdV+fMsjnvXgmEe2DBK3/9rCYdQqJAnE1QkG6RZ8WE0SwhVhMvs2Uckgh4z0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225927; c=relaxed/simple; bh=1V/0E2Fp6bqGFvlNXIDG5IseSYm9DVjOBS+MuA0YryQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=h1m5vvbA17+XA4Vn+FlcRkaDmN7itme1/wfGjEmO8lCot7nOOJ0M/h39bRA/KxyEQ/kNKTxdKCSa8yn5shsit3ibvFX6cLl3K9vRPki57MIrJsQ4dmp7I2TBND0zKc4xguGDce2w/KCTaDWt3f0iusIL8us6s50su4yPNOrw4do= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=L2GYsigT; 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="L2GYsigT" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1AFC71F000E9; Tue, 19 May 2026 21:25:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779225925; bh=lW1Xl/o2x9TY6Qqx1v6ws4S2+j3E4UEmS90U3d0BfP0=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=L2GYsigT2MDCA8elyOLTOd2FCmu5vDO12zuKE2BeBb/3tLDT1mp91djDyDwPW2E/g cBbJvBk9ngKKtR04lUXurUg0b/1jKkV/DociXPg+AQceIUf7yf/YnSPbpssPG/llWk J92udYLRUGo8C+UYCS6z8CK8iHA9gWM9OGHEAEIEP7FDZat+la1tofdSpOx5lLzuGT 3YkSZU3lJXF8YwpblZXXNZ020cOynFemW/kipRk9xksI13p0Xlaw3YWadyvpg/iCT+ xUVeLDnTF1s0nzSrSwu5cy9rGsGr605RfoPoozEebyCFxVNv5RCebakF99BAmNOg9T 1GYPeq81EWbFQ== From: "Matthieu Baerts (NGI0)" Date: Wed, 20 May 2026 07:25:13 +1000 Subject: [PATCH mptcp-next v3 02/16] mptcp: options: ADD_ADDR size can be negative Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-mptcp-add-addr6-port-ts-v3-2-bffa658a7678@kernel.org> References: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> In-Reply-To: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1442; i=matttbe@kernel.org; h=from:subject:message-id; bh=1V/0E2Fp6bqGFvlNXIDG5IseSYm9DVjOBS+MuA0YryQ=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqDNVBaFZbs39fjuQg8ddvsJ2wYbdJGf/N1GRbX KPYhGSZsR2JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagzVQQAKCRD2t4JPQmmg c/+cD/0Sj70ut5j5VL1YSMzO4CaYcN7zmpO8y/14eJYIx68rAzc8D01MMr8opvYIDOSLF3rz9y9 ohGP/gttf0hgy2hpOywEt0ysGntd2r+AP9yej37PBEFZu4biUwjfCUv6jdAMkIfRH+e5YnG/tkI oQaLzOOwBB/4/jSBpY86vTbdv6PXwNA+IiOy8v0muWaZJKMq+IhCFptqzv5AbDzBnB1/TWoOr7j XLS0YEiSQMg/rHD9WOKMHwuEaTQjPYIRtb9YY9yoabq4Ul0oYOaZCMvhoyYqKoe+eOWohrVVY8O stYaQ1N/c1aRMWvBhlWZwilbQA/6dqg7zlcJP0HskN2ELL37hxx+n87aRmyVhAql+8FEERf39kq GYZfEKutLxIe87pqDJsMFlyNBttwSoSZt/XP4LEwswue+UZdnAp4ACO2IFd1tpvMZ2+fP7kyhxk Ny2IwwPuRdYyEEgGxo5Jp/KH7pWjY7toZAVpNJv3a1NAB+H1mHTKyBOD2cBq51SzUGP187+MxwJ 5lRC+o4ZJr+OaTTfrvviYLDT/T8ZvC1gB9OFQY5thcb9zndPl+Av2Jy71dTrnvn9jly9JwJ/Q3w XIElyAIo8v/sTyJghxB/ZmRtpHZDEqIzObkOzIqiLXwBNEDrppV/jsyeMlxW19PzQerkr2VSsDQ VrvsU2tJ3X7hJow== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Use a signed int for the returned size, because if other options are dropped, the size can be negative, e.g. to send an echo ADD_ADDR with a v4 address, and no port. The behaviour is not changed, because it was working as expected with an overflow. But it is clearer like this, and it will help later on. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/options.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 4cc583fdc7a9..966f6a867287 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -651,8 +651,8 @@ static u64 add_addr_generate_hmac(u64 key1, u64 key2, return get_unaligned_be64(&hmac[SHA256_DIGEST_SIZE - sizeof(u64)]); } =20 -static bool mptcp_established_options_add_addr(struct sock *sk, struct sk_= buff *skb, - unsigned int *size, +static bool mptcp_established_options_add_addr(struct sock *sk, + struct sk_buff *skb, int *size, unsigned int remaining, struct mptcp_out_options *opts) { @@ -842,9 +842,9 @@ bool mptcp_established_options(struct sock *sk, struct = sk_buff *skb, { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); - unsigned int opt_size =3D 0; bool snd_data_fin; bool ret =3D false; + int opt_size =3D 0; =20 opts->suboptions =3D 0; =20 --=20 2.53.0 From nobody Mon May 25 18:11:40 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 94E5631AA9B for ; Tue, 19 May 2026 21:25:27 +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=1779225928; cv=none; b=WP1y7KvHZBCWSYswfQHe5qjFd6Q+yw2DLkU98JVkdrYwid9QubZy8XUQ9oYtXTMJEXpYwlRNLYsCDAyPGPqZXXDx7yesm6ikrYZDZ2ZRu5EWd5+UuqbeBB8wedD68UmnaCs1+KEGysKvenxVmgktzcKMI7eaicx2pzB4W2JETfc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225928; c=relaxed/simple; bh=o+QRMk4/8Sn5CkbSCof+Mkfcf8eANTuQiTKu28jp2qA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RYv8l7MS7W9kFiedrVoq1S966A5/MUfXfxiLfDrEnp8zwSlASYPKU4Lr2IjDtq91hOoasQDC9RLNGYqD0E3L2qSI734QZgeotoVaefEBHKWVVUuquRszlnnbLqeK1gcFu/DZNi3lIKQpIDVdU1hOMoSE7OOfmYqUjW8+IEOcNfM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PPXIRFRj; 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="PPXIRFRj" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 67D4C1F00893; Tue, 19 May 2026 21:25:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779225927; bh=ZVSpbgYCztQJudy2SASrXJFkLjU30lYlel40XVRYaZ0=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=PPXIRFRjBOZjHkPGDkYjMsrJozDyfP88Bs7rEq0/z/dMJhZLeTV7p4mX0PJXuAmXP +ayAzSMtuJH14YSmlne+B/RlB+qzUg9hDa97D5Hm3ZUHrdgvXDgu7QQj2GqaJMBbXf lfbRGNguPZm6jnQjorsNfFHtLhnwOZYjG7xh//ydm4uEBI04R0783eqhRxV1fZLokK h3axcYNTegoesNytOyFD+WDk/J3qiAOSqIEchQyvNpok33WlujVocks9/yQRteJ8m+ K9pIRv19RC+adp+dS00PO4mNpujk7rQVIspkdBqW/7KRyt417zYiCiDnhiJNCcbBNm u0rGZrm7qYTFw== From: "Matthieu Baerts (NGI0)" Date: Wed, 20 May 2026 07:25:14 +1000 Subject: [PATCH mptcp-next v3 03/16] 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: <20260520-mptcp-add-addr6-port-ts-v3-3-bffa658a7678@kernel.org> References: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> In-Reply-To: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3708; i=matttbe@kernel.org; h=from:subject:message-id; bh=o+QRMk4/8Sn5CkbSCof+Mkfcf8eANTuQiTKu28jp2qA=; b=kA0DAAgB9reCT0JpoHMByyZiAGoM1UGghGnzqy0K0w+b3mFFT2xtp+PGgVgyGDmhuKBpQcYp4 okCMwQAAQgAHRYhBOjLhfdodwV6bif3eva3gk9CaaBzBQJqDNVBAAoJEPa3gk9CaaBzvgQQAOeh ZBGES0hNfgVGHn5RO3jNrK4jc6uMwnQs+1jDTyRAGSFbgCiWHrMJkEuPhGlOFod6v8EVRCIWEQ9 P/s7U03g33H3NNY4ic692/j7WHOyy1ZEB5u0KkBJE8Xo3sbS/yahCXuLhMUv8XL4Nygzl5jJpKJ PDtr8ycM3aCXheP/n5XUXVBrtl0PQ+qxdVfD5zMrEGh3fI41Zrd2QbyPiSlUyyA0aKDbOJXgjCn a4plq/CuGZkGdz0dmwQIXy/hxR/ds9bgdgE4cLHeKM081L3IoPnGeygQuaVnpH4huae/SRc6weD SSGZnr4vqTpTdhv9zTqKtE03jXLscBfYgKUQkp79aHgUl/ufaBSdqUtynTqmBzBRIfca11NDN2A 37E4tHSkI35i3RzoUMoqDE7Va80LELg9IAe0EFXMQQIwsJ7WaSndeVJNE+YVpsmaJBsJmFIBPIX 0gCQuKT4wEqyVLzpnE8DXhnRg0aLqLpSUtkn7j4Vdvc76W3HIEeftCJEX4A8OhhwGB/FJorF2Vg mEDH1GTlYjqSC7i9eAx177zC/WcpTDooEAi00ym7qejBdtMo5A8WAgzJbZ4Ak6wqWS4ceUfEvhL RwsYFMxzT8ZGX/E9Gj7Eb3N6vBafZhgF4AP+JYTod5PRIgOHkVbFCZGrleI83p1kEJvDQWSFL0i PBK6f X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 mptcp_rm_addr_len helper was called twice: in mptcp_pm_rm_addr_signal, then just after in mptcp_established_options_rm_addr. Both to check the remaining space. The second call is not needed: if there is not enough space, mptcp_pm_rm_addr_signal will return false, and the caller, mptcp_established_options_rm_addr, will do the same without re-checking the size again. Instead, mptcp_pm_rm_addr_signal can directly set the size. While at it, move mptcp_rm_addr_len to pm.c, as it is now only used there, once. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/options.c | 11 ++--------- net/mptcp/pm.c | 11 ++++++++++- net/mptcp/protocol.h | 10 +--------- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 966f6a867287..231010aaf163 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -723,19 +723,12 @@ static bool mptcp_established_options_rm_addr(struct = sock *sk, struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); struct mptcp_rm_list rm_list; - int i, len; + int i; =20 if (!mptcp_pm_should_rm_signal(msk) || - !(mptcp_pm_rm_addr_signal(msk, remaining, &rm_list))) + !(mptcp_pm_rm_addr_signal(msk, remaining, &rm_list, size))) return false; =20 - len =3D mptcp_rm_addr_len(&rm_list); - if (len < 0) - return false; - if (remaining < len) - return false; - - *size =3D len; opts->suboptions |=3D OPTION_MPTCP_RM_ADDR; opts->rm_list =3D rm_list; =20 diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 4fc7d648b672..e78a248414fb 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -960,8 +960,16 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, = const struct sk_buff *skb, return ret; } =20 +static int mptcp_rm_addr_len(const struct mptcp_rm_list *rm_list) +{ + if (rm_list->nr =3D=3D 0 || rm_list->nr > MPTCP_RM_IDS_MAX) + return -EINVAL; + + return TCPOLEN_MPTCP_RM_ADDR_BASE + roundup(rm_list->nr - 1, 4) + 1; +} + bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, - struct mptcp_rm_list *rm_list) + struct mptcp_rm_list *rm_list, unsigned int *size) { int ret =3D false, len; u8 rm_addr; @@ -981,6 +989,7 @@ bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, un= signed int remaining, if (remaining < len) goto out_unlock; =20 + *size =3D len; *rm_list =3D msk->pm.rm_list_tx; WRITE_ONCE(msk->pm.addr_signal, rm_addr); ret =3D true; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 661600f8b573..6f3c73ad4284 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1224,20 +1224,12 @@ static inline unsigned int mptcp_add_addr_len(int f= amily, bool echo, bool port) return len; } =20 -static inline int mptcp_rm_addr_len(const struct mptcp_rm_list *rm_list) -{ - if (rm_list->nr =3D=3D 0 || rm_list->nr > MPTCP_RM_IDS_MAX) - return -EINVAL; - - return TCPOLEN_MPTCP_RM_ADDR_BASE + roundup(rm_list->nr - 1, 4) + 1; -} - bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, unsigned int opt_size, unsigned int remaining, struct mptcp_addr_info *addr, bool *echo, bool *drop_other_suboptions); bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, - struct mptcp_rm_list *rm_list); + struct mptcp_rm_list *rm_list, unsigned int *len); int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc); int mptcp_pm_nl_dump_addr(struct sk_buff *msg, --=20 2.53.0 From nobody Mon May 25 18:11:40 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 118403E8351 for ; Tue, 19 May 2026 21:25:28 +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=1779225930; cv=none; b=sYXqIGk131PqRMoPNZoEet4RJvKS/Kd3UhCESxvD88sGghERlUy7dzmih8BpJQ6LJlIwDP50UZyhr9U4W0qdKO//k6/CRaRchkB6R6Gk/XysO4hv8PaM3y0vJGETQnt6KlwgFheC/w7XoxNkoT0vmZympbUrax/5KN1gZLYTOcw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225930; c=relaxed/simple; bh=MRA/5S+yfCdHDYlhXMI4SHgvPdtDpzOdulmVjTbIzQ4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lIEGqgK0ZyUmt5VwncA31tFGkQpE9e6wL4NGBjf/jx8jhrOjIKj87+uDXnoX5QPRC9lbT6N3Uk8VrGjWRE9vAkOnKK6xAqTsi12niQ8m1bx2KSUstQSDiXJtM4H4u0EJCRPNdWr/Y504HRQj2ttomnvzRwhim9mlzns8kNUIsII= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VD5xwwEF; 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="VD5xwwEF" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D45361F000E9; Tue, 19 May 2026 21:25:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779225928; bh=/6eHH2Op8TmbbJIG2liZr4Hv+XSnAUtmEUnowncPPK8=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=VD5xwwEF8n6/tTEYuDDnqdFzeMLcJfPbXTCIQMjnjkk/epnzH513xPwT+1VdgUqd0 SMaLf7KMpDPKrrro6bxvYN0XU5ZvQzBCADUcTX1nK1kbH5u48IpAAVMmWX14yfa/x4 7JUcK9b3qvnIGDHpTxaIPSHsiw8LyxPAZC9MvGNHE0VgSVcoTW77VcGv0jGSuY34gF W6h5CURKYaK3YLjKXi3J2E6FZtZOumrahiI8shKtZVcewwk5x2Es3KbUkwDUwT+xBD TH7FqMYSdipbC75uRONGdlDp6LCHnD5W1QH4TgjsVp4M0LIJeb6x62KLKrET+uuRfS tJZgu5hp/WBCA== From: "Matthieu Baerts (NGI0)" Date: Wed, 20 May 2026 07:25:15 +1000 Subject: [PATCH mptcp-next v3 04/16] 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: <20260520-mptcp-add-addr6-port-ts-v3-4-bffa658a7678@kernel.org> References: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> In-Reply-To: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5802; i=matttbe@kernel.org; h=from:subject:message-id; bh=MRA/5S+yfCdHDYlhXMI4SHgvPdtDpzOdulmVjTbIzQ4=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqDNVBuywOe1/GiRR9R5VveTavrxWQCJXQ62U7+ BWROIcWVnyJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagzVQQAKCRD2t4JPQmmg cxduEADb6Mje99X1WScGpl+H+HEsLdr+brrFKLhJ/tFQsVcA8mSm5FZdbOJvyS0IUEohSXdr57v rR/AXnAnu1EXC2JWfbo4bSDdfvyfor5fbmradbZxCz+tQjI0HSlq7YrhZX1hbMn2OgxoRYk57Rb qF+RC5HF8o96zcfNShPDuXfie5Rgzz+V8If+B/iq4LB/bIfesn0OxH/J3vHjeiJ/iyQa8jK2rFw 54zjmSL5EGgoPKxkTsHRT4lYGK3vMLmHls6jNfVn6PHkGArPHTwq+Ttpksj1sonTqNMd0mAtF7/ xyOxWvTgIwFug3nk6r1VM7VlMlz6Mz6f5zRJin04yx88kjCqKSlhTirRtioDpaoLHnaNsJnQVdy YL5zyLbpGKK0HMrpqmfkF8Ya0Ob6FsK6BPKw+Ru82ZcFkxvVF13/DVWp2KUHDSh0m5pWu0BY9Qk V2OX0hKfUoNOTYw0TN5ZS5Bv/LNyz+s6oarXcdqmdSvQyJ7rY7KAywQzoicCc9XohNM6WRyM8aF pNSb3vr1MRt2BEhVVByOHVCNootE57UkHJAXLiRtzn2vpcKifeTdIuR23DKMwyOBnjBvYPMzsIG PE8fb4VPQ/MX6wu2NlNT/Fw9RZJa40073GIPzJ2NufhlVPWOwwWfVgJbtARH53ZqIO0p/ZNl4kI V504jWikCHQOiIQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 mptcp_add_addr_len helper was called twice: in mptcp_pm_add_addr_signal, then just after in mptcp_established_options_add_addr. Both to check the remaining space. The second call is not needed: if there is not enough space, mptcp_pm_add_addr_signal will return false, and the caller, mptcp_established_options_add_addr, will do the same without re-checking the size again. Instead, mptcp_pm_add_addr_signal can directly set the size. Note that the returned size can be negative when other suboptions are dropped, e.g. to send an echo ADD_ADDR with a v4 address, and no port. While at it, move mptcp_add_addr_len to pm.c, as it is now only used from there, once, and use a bool for 'ret' in mptcp_pm_add_addr_signal. Signed-off-by: Matthieu Baerts (NGI0) --- v2: reset size in mptcp_pm_add_addr_signal if other options are dropped. --- net/mptcp/options.c | 16 +++------------- net/mptcp/pm.c | 26 ++++++++++++++++++++++---- net/mptcp/protocol.h | 17 +---------------- 3 files changed, 26 insertions(+), 33 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 231010aaf163..c6d57997110d 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -659,34 +659,25 @@ static bool mptcp_established_options_add_addr(struct= sock *sk, struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); bool drop_other_suboptions =3D false; - unsigned int opt_size =3D *size; struct mptcp_addr_info addr; bool echo; - int len; =20 /* add addr will strip the existing options, be sure to avoid breaking * MPC/MPJ handshakes */ if (!mptcp_pm_should_add_signal(msk) || (opts->suboptions & (OPTION_MPTCP_MPJ_ACK | OPTION_MPTCP_MPC_ACK)) || - !mptcp_pm_add_addr_signal(msk, skb, opt_size, remaining, &addr, - &echo, &drop_other_suboptions)) + !mptcp_pm_add_addr_signal(msk, skb, size, remaining, &addr, &echo, + &drop_other_suboptions)) return false; =20 /* * Later on, mptcp_write_options() will enforce mutually exclusion with * DSS, bail out if such option is set and we can't drop it. */ - if (drop_other_suboptions) - remaining +=3D opt_size; - else if (opts->suboptions & OPTION_MPTCP_DSS) + if (!drop_other_suboptions && opts->suboptions & OPTION_MPTCP_DSS) return false; =20 - len =3D mptcp_add_addr_len(addr.family, echo, !!addr.port); - if (remaining < len) - return false; - - *size =3D len; if (drop_other_suboptions) { pr_debug("drop other suboptions\n"); opts->suboptions =3D 0; @@ -697,7 +688,6 @@ static bool mptcp_established_options_add_addr(struct s= ock *sk, * options */ opts->ahmac =3D 0; - *size -=3D opt_size; } opts->addr =3D addr; opts->suboptions |=3D OPTION_MPTCP_ADD_ADDR; diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index e78a248414fb..07536d5ba1ab 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -887,14 +887,30 @@ void mptcp_pm_mp_fail_received(struct sock *sk, u64 f= ail_seq) } } =20 +static unsigned int mptcp_add_addr_len(int family, bool echo, bool port) +{ + u8 len =3D TCPOLEN_MPTCP_ADD_ADDR_BASE; + + if (family =3D=3D AF_INET6) + len =3D TCPOLEN_MPTCP_ADD_ADDR6_BASE; + if (!echo) + len +=3D MPTCPOPT_THMAC_LEN; + /* account for 2 trailing 'nop' options */ + if (port) + len +=3D TCPOLEN_MPTCP_PORT_LEN + TCPOLEN_MPTCP_PORT_ALIGN; + + return len; +} + bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, - unsigned int opt_size, unsigned int remaining, + int *size, int remaining, struct mptcp_addr_info *addr, bool *echo, bool *drop_other_suboptions) { bool skip_add_addr =3D false; - int ret =3D false; + bool ret =3D false; u8 add_addr; + int len =3D 0; u8 family; bool port; =20 @@ -909,7 +925,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 @@ -926,7 +942,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) @@ -942,6 +959,7 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, } =20 ret =3D true; + *size =3D len; =20 drop_signal_mark: WRITE_ONCE(msk->pm.addr_signal, add_addr); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 6f3c73ad4284..6fb5caeebc35 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1209,23 +1209,8 @@ static inline bool mptcp_pm_is_kernel(const struct m= ptcp_sock *msk) return READ_ONCE(msk->pm.pm_type) =3D=3D MPTCP_PM_TYPE_KERNEL; } =20 -static inline unsigned int mptcp_add_addr_len(int family, bool echo, bool = port) -{ - u8 len =3D TCPOLEN_MPTCP_ADD_ADDR_BASE; - - if (family =3D=3D AF_INET6) - len =3D TCPOLEN_MPTCP_ADD_ADDR6_BASE; - if (!echo) - len +=3D MPTCPOPT_THMAC_LEN; - /* account for 2 trailing 'nop' options */ - if (port) - len +=3D TCPOLEN_MPTCP_PORT_LEN + TCPOLEN_MPTCP_PORT_ALIGN; - - return len; -} - bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, - unsigned int opt_size, unsigned int remaining, + int *size, int remaining, struct mptcp_addr_info *addr, bool *echo, bool *drop_other_suboptions); bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, --=20 2.53.0 From nobody Mon May 25 18:11:40 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 7594C3E5A2F for ; Tue, 19 May 2026 21:25:30 +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=1779225932; cv=none; b=BFcuRY+kdUSIqU4Hcoxefuw6rJH6nbmdnUoNdenKOwLhbrWtlTPJjZAE8GY5ZhhMnpJ+z4GPTulhXhxmZ5Km8pD8Kd3k71BCrkWHPl1JjmgODkMYEu++QkFDno3J8DQfOCCLb9YHZiLrEeVbex6IK98zyup2HIsx0RjyJtiOfMM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225932; c=relaxed/simple; bh=Lfapml52c4YxQaCIFzES2KyoPMvS4GYxDPJ6FVcELjc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UgqksyND6kR/Imls9Z0OQTwGwPnOj+URJ7baS/5+d1QJOrSTwLpuW88zd1uqDsk58delvmEehW+/ntGGVzpmXCGqEvwukPDFjYIpNhKtJHQSfESrZ0m2xvfctFCzflXiWthJFBh/rcaUV8uY3OCFc7//MZViVAZt0ad383Tpowc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GSL1/drw; 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="GSL1/drw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 62DC11F00893; Tue, 19 May 2026 21:25:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779225930; bh=RkIwGgkOb2a4tyhLeRzD84fwjk97EFA2htu9ktcQIR0=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=GSL1/drwHJrc3HMHuh/U64cWfNU4rjTR/i1wNv8EeEBthb15BTg8hY9r50zhwsZm9 Meh5Y38u6kNFukoO9qPmJDhC/t7+T4t8DrhUwAKCmIzwdn3BnEykvG6HdFleLafbw9 hQvwBadyZlsqZDDWQa4ZchlECsKGwq/IMgZLVC6EjaE6oDSD9GFC8g2wtWZVLAm/an Qknu0/gajxHYoTKEoQf7RoJNrgD/H6f75nsdIq243wADaMLSxEm8b4LBcAUSryNUxz bu3+Bb4+pXv1zR4hhWLTJSw/RdiCvKs5/e6xp5dspBhNcCy50eiPzfa+AOv5qp++2c uqdsAsrg8f2Gw== From: "Matthieu Baerts (NGI0)" Date: Wed, 20 May 2026 07:25:16 +1000 Subject: [PATCH mptcp-next v3 05/16] 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: <20260520-mptcp-add-addr6-port-ts-v3-5-bffa658a7678@kernel.org> References: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> In-Reply-To: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5509; i=matttbe@kernel.org; h=from:subject:message-id; bh=Lfapml52c4YxQaCIFzES2KyoPMvS4GYxDPJ6FVcELjc=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqDNVBN6a21V3Ble81rB9Ar3z/bJo1CT1x9Qxxt uzF9a2DvFKJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagzVQQAKCRD2t4JPQmmg c5/mD/9qYt2PMvMfCpG+u9wJlpEdG6wKOUQtDGZcEnqjV/StYC5PzH2nWXrmsrfAkOBI7xdeIj5 T4DtUNqTaq6EriGYojAvJD4OTa1Gu5HYbil1dm9J4wiprYNMSWEAuJ3qcrfmAFbOysbEji4AZbO zM5hK/habZikuZvxyw8DWYiBLBRGzFJSEJfW2bWiixuv8xfimS/tzyaCXXyouzM96wsPzcZ5u1J WobTOpMhbj/vd9khO9RCdfN+pqDjKSvTCBRRStLtOW6Rf3v2abJ/j7iEI9x8YpgG/yAiI68woBW hklTUE1+ma+J76gGj/yeVsRIfp5EqfwbEWPYoL9gj2phRbpW7uLcSrgJoXmN9ofviKLg/j6E3Il heysSmQ2s5jZ3oUPoZuCtJZ71w0/lRlXYElR3Jiz5H3UY4mBx6CypsHA6+idhEWRZ6I2OWzs5mM d0w0JoBxrsJYfmm2zP4JzWEC+CWOcDcbYSzudI7MYDISWUJGmxNgD+atLlHlStmwfXy+fmbCfxS Ic/2KjiEhEZPgUWxc7H6L1qn72rX32NNhNhLWtudZ3d8ibb2oPo4sn/Eq7Sm5gatrsjnwRbjGVz KdnTmF6RPhtPt3usT7M3HJTcdbv/PuUhbe+Q4yUyTKpYz/ir5AH6uCyafpD+jttrhI6Khhgu9nJ vBooAefLKIzlijQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 This sysctl is going to be used in the next commits to drop TCP timestamps option, to be able to send an ADD_ADDR with a v6 IP address and a port number. It is enabled by default. This knob is explicitly disabled in the MPTCP Join selftest, with the "signal addr list progresses after tx drop" subtest, to continue verifying the previous behaviour where the ADD_ADDR is not sent due to a lack of space. While at it, move syn_retrans_before_tcp_fallback down from struct mptcp_pernet, to avoid creating another 3 bytes hole. Signed-off-by: Matthieu Baerts (NGI0) --- v2: split (Paolo) + fix new sysctl name in selftests. --- Documentation/networking/mptcp-sysctl.rst | 13 +++++++++++++ net/mptcp/ctrl.c | 18 +++++++++++++++++- net/mptcp/protocol.h | 1 + tools/testing/selftests/net/mptcp/mptcp_join.sh | 1 + 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/Documentation/networking/mptcp-sysctl.rst b/Documentation/netw= orking/mptcp-sysctl.rst index 1eb6af26b4a7..b9b5f58e0625 100644 --- a/Documentation/networking/mptcp-sysctl.rst +++ b/Documentation/networking/mptcp-sysctl.rst @@ -21,6 +21,19 @@ add_addr_timeout - INTEGER (seconds) =20 Default: 120 =20 +add_addr_v6_port_drop_ts - BOOLEAN + Control whether preparing an ADD_ADDR with an IPv6 address and a port + should drop the TCP timestamps option to have enough option space to + send the signal. + + If there is not enough option space, and the TCP timestamps option + cannot be dropped, the signal cannot be sent. Note that dropping the TCP + timestamps option for one packet of the connection could disrupt some + middleboxes: even if it should be unlikely, they could drop the packet + or block the connection. This is a per-namespace sysctl. + + Default: 1 (enabled) + allow_join_initial_addr_port - BOOLEAN Allow peers to send join requests to the IP address and port number used by the initial subflow if the value is 1. This controls a flag that is diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c index d96130e49942..c94a192f4118 100644 --- a/net/mptcp/ctrl.c +++ b/net/mptcp/ctrl.c @@ -32,12 +32,13 @@ struct mptcp_pernet { unsigned int close_timeout; unsigned int stale_loss_cnt; atomic_t active_disable_times; - u8 syn_retrans_before_tcp_fallback; unsigned long active_disable_stamp; + u8 syn_retrans_before_tcp_fallback; u8 mptcp_enabled; u8 checksum_enabled; u8 allow_join_initial_addr_port; u8 pm_type; + u8 add_addr_v6_port_drop_ts; char scheduler[MPTCP_SCHED_NAME_MAX]; char path_manager[MPTCP_PM_NAME_MAX]; }; @@ -94,6 +95,11 @@ const char *mptcp_get_scheduler(const struct net *net) return mptcp_get_pernet(net)->scheduler; } =20 +unsigned int mptcp_add_addr_v6_port_drop_ts(const struct net *net) +{ + return mptcp_get_pernet(net)->add_addr_v6_port_drop_ts; +} + static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet) { pernet->mptcp_enabled =3D 1; @@ -108,6 +114,7 @@ static void mptcp_pernet_set_defaults(struct mptcp_pern= et *pernet) pernet->pm_type =3D MPTCP_PM_TYPE_KERNEL; strscpy(pernet->scheduler, "default", sizeof(pernet->scheduler)); strscpy(pernet->path_manager, "kernel", sizeof(pernet->path_manager)); + pernet->add_addr_v6_port_drop_ts =3D 1; } =20 #ifdef CONFIG_SYSCTL @@ -362,6 +369,14 @@ static struct ctl_table mptcp_sysctl_table[] =3D { .mode =3D 0444, .proc_handler =3D proc_available_path_managers, }, + { + .procname =3D "add_addr_v6_port_drop_ts", + .maxlen =3D sizeof(u8), + .mode =3D 0644, + .proc_handler =3D proc_dou8vec_minmax, + .extra1 =3D SYSCTL_ZERO, + .extra2 =3D SYSCTL_ONE + }, }; =20 static int mptcp_pernet_new_table(struct net *net, struct mptcp_pernet *pe= rnet) @@ -389,6 +404,7 @@ static int mptcp_pernet_new_table(struct net *net, stru= ct mptcp_pernet *pernet) table[10].data =3D &pernet->syn_retrans_before_tcp_fallback; table[11].data =3D &pernet->path_manager; /* table[12] is for available_path_managers which is read-only info */ + table[13].data =3D &pernet->add_addr_v6_port_drop_ts; =20 hdr =3D register_net_sysctl_sz(net, MPTCP_SYSCTL_PATH, table, ARRAY_SIZE(mptcp_sysctl_table)); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 6fb5caeebc35..2d6c8b1829cd 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -799,6 +799,7 @@ unsigned int mptcp_close_timeout(const struct sock *sk); int mptcp_get_pm_type(const struct net *net); const char *mptcp_get_path_manager(const struct net *net); const char *mptcp_get_scheduler(const struct net *net); +unsigned int mptcp_add_addr_v6_port_drop_ts(const struct net *net); =20 void mptcp_active_disable(struct sock *sk); bool mptcp_active_should_disable(struct sock *ssk); diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 5d4d0f127f79..23b17957686a 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -3313,6 +3313,7 @@ add_addr_ports_tests() if reset "signal addr list progresses after tx drop"; then pm_nl_set_limits $ns1 0 2 pm_nl_set_limits $ns2 1 0 + ip netns exec $ns1 sysctl -q net.mptcp.add_addr_v6_port_drop_ts=3D0 2>/d= ev/null || true ip netns exec $ns1 sysctl -q net.ipv4.tcp_timestamps=3D1 ip netns exec $ns2 sysctl -q net.ipv4.tcp_timestamps=3D1 =20 --=20 2.53.0 From nobody Mon May 25 18:11:40 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 B0B6A3E7BB3 for ; Tue, 19 May 2026 21:25:31 +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=1779225932; cv=none; b=ltBAzLHK3qF9KCa8Mo2b3HvPs+uR6Wla5i/+z2p4HWasOenHNaxgb6H9yuQRRsPfLMdY8txk8K/eM3KEw/HtUV0j1nTkIiOvXsuwmmuExq9KfpU+lJTLEyFaYJ4ZgQZNuWQlfEgfPLec2FBc9w+3vHoETUtpf8fncWRAJ9MBBkU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225932; c=relaxed/simple; bh=wck0HWGKvoFvEux7M3uOGWGO0lZfCsVIZ081QzTv0cs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ScxagVYuZLZZvAcJVish4gaUmi82ahjvgTNYMI81So3cQTI/tibpZpseJHb/ko7oIVxkfwGZwZIISYVBtvfSmizu5RaEj3QfiiO+cTZqgRQ7rPrRhmYip6KdUugu6SnPi6DQO67olzAV6mNpzGvTrMIkG76A/iXtMAEovLdWPjk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jVhiIDqC; 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="jVhiIDqC" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B85361F000E9; Tue, 19 May 2026 21:25:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779225931; bh=EROsK5D10kLmYq30DCvG1M2tX7VvimZMgYjqr4mJeM0=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=jVhiIDqCTLYaVWlGJpKKDnuGCplHSmzziBUvNv4dZeZyARk7ZAVUyGsRk10E61Qrb FP23A5aL1eZOJSAh9ohRF7ulwCShw1xxL8CdrsaXg/rwFgtoQW6scMki0ByFd+ZUVM K60kyeAKiD/ScCNV4JQc6TLOuMutx0gh77zUctH8eiRJlpGCvNXaWsnfXHDBszMidR yfE22XLjNEcwTh+QUXoCjOnCs59fOEhNYuJKXsH/JiYjgkIqrd8unprMzZFSowT9sh PyyGX9iImgfT5xmF6diCpOfcb8KE66qv+EhIMrROODLEmo12XsEC6EFUup9gPssnr9 pHm1IP252Ej6A== From: "Matthieu Baerts (NGI0)" Date: Wed, 20 May 2026 07:25:17 +1000 Subject: [PATCH mptcp-next v3 06/16] 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: <20260520-mptcp-add-addr6-port-ts-v3-6-bffa658a7678@kernel.org> References: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> In-Reply-To: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4932; i=matttbe@kernel.org; h=from:subject:message-id; bh=wck0HWGKvoFvEux7M3uOGWGO0lZfCsVIZ081QzTv0cs=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqDNVB6JVYoPUT5PRFjz+NVmqNAUdrTkwEpWykG 9mppCfxp0SJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagzVQQAKCRD2t4JPQmmg c0g1EADkb5SWC3C6KDc50OeAOrJB6Z6T1DOfD4tMHtxKE230MyI2ieXglKxfqy+lgEAqBPPGayY TLTVsQzORp98Br7xzdQjSjqG2ZBakX0LeEkWcyUXRQMrnKzUs6wjZuvehc63yzgkZvIlQ6IUQfR KX7HM1OW3K6jETmIecTyE4pGcGaExp9kvwa5izzey7QmpLWKNNG2mAcQWeCibx4kjNthT3+VcIv UqCWeL4mddtgrXMhEa70QyjXkyoiQ/aa61anQ1vkgC1vOnqMwIJgguyM/Q1jOydiQMbkfr6F6CK 4gfna2RIVqNqzkyvGC39dIAnZ/e2igNU1qySUh7uMYAEpY7ZjUUfxjvv2lsRE7MJbQ162glptBs SOjRDV40tk+6jzSOzhROG2PVJGBy8V0AK3cfiY6mtb/JGrvmr6WCaB6ZIkBUVpymNPjEnWZ+QjH puZnhSEHHz6C8xsAoswvE3mawyd2xC+TmXIFqfyhvDhWcFAmDoIwTLk30ydrHDwFtoYR+ek1Sh/ evRPN6mkA6b9WmmLHXQ7l58dgYcURwDmuS1iqQNuGmodk9+95DtCEHvFty6sjruWkILF1Wak/qA ao291PBFC6vqECzC5vNL2ASxiBNEdRBsuOXqpbXiuwLjjTG/8l/d8NsLOGVIz9XtuioUv9gGUHl 98TgSocq1pzjpSA== 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) --- 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 4cf59e83c1c5..b14e98b60958 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -157,7 +157,7 @@ bool mptcp_synack_options(const struct request_sock *re= q, unsigned int *size, struct mptcp_out_options *opts); bool mptcp_established_options(struct sock *sk, struct sk_buff *skb, unsigned int *size, unsigned int remaining, - struct mptcp_out_options *opts); + bool *drop_ts, struct mptcp_out_options *opts); bool mptcp_incoming_options(struct sock *sk, struct sk_buff *skb); =20 void mptcp_write_options(struct tcphdr *th, __be32 *ptr, struct tcp_sock *= tp, @@ -276,6 +276,7 @@ static inline bool mptcp_established_options(struct soc= k *sk, struct sk_buff *skb, unsigned int *size, unsigned int remaining, + bool *drop_ts, struct mptcp_out_options *opts) { return false; diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 47647a99e324..f5552928303b 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -1181,12 +1181,16 @@ static unsigned int tcp_established_options(struct = sock *sk, struct sk_buff *skb */ if (sk_is_mptcp(sk)) { unsigned int remaining =3D MAX_TCP_OPTION_SPACE - size; + bool drop_ts =3D opts->options & OPTION_TS; unsigned int opt_size =3D 0; =20 if (mptcp_established_options(sk, skb, &opt_size, remaining, - &opts->mptcp)) { + &drop_ts, &opts->mptcp)) { opts->options |=3D OPTION_MPTCP; size +=3D opt_size; + + if (drop_ts) + opts->options &=3D ~OPTION_TS; } } =20 diff --git a/net/mptcp/options.c b/net/mptcp/options.c index c6d57997110d..94c182d845a4 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -821,7 +821,7 @@ static bool mptcp_established_options_mp_fail(struct so= ck *sk, =20 bool mptcp_established_options(struct sock *sk, struct sk_buff *skb, unsigned int *size, unsigned int remaining, - struct mptcp_out_options *opts) + bool *drop_ts, struct mptcp_out_options *opts) { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); @@ -830,6 +830,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 May 25 18:11:40 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 205003E8C44 for ; Tue, 19 May 2026 21:25:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225934; cv=none; b=Q4s4EQd6iuKc9JYpKI/H4+OPgQ26WbfQMguZ9q47BrWPmcoclp8Xqi6wuOib4Pz+fW8YbFxH6NZBCMihbJS7RhwU4l1tpQFvR9LtDLyInr6LSrhu/MVpELTCQJCTpG8ERvNV+jOd8ZoOzqV7Ytjnr16eQChLBYQKrrsEycWZH6A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225934; c=relaxed/simple; bh=YrR4b2q+p22vMH2nHVoM29MHIk6a7m1eKf8ryuslchY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bgTAryYZc70gRZM5LF0UalSq0dXPNdSXHnvppIn/zrQyJ6Qcm2TeySwLIwKKWt89/Nq5CMuukdSY5sb1H2nVwHWM/lQ1WFld6qS0MZFfiL/kVepkCfxgTXuCNo7N9Qc44aeGOF1AD6vu1WhUUHzBNih+ollho+K9LE1UW4uQeOE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HBmmI2V7; 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="HBmmI2V7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 061AD1F00896; Tue, 19 May 2026 21:25:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779225932; bh=M7jY/+zsdQ5a4qabsuVjKuycu673lfxGVxABS9PHXuI=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=HBmmI2V7/bIK5XvTwGWyeYXUWPwlBpJlfknQYgKtKCwO27sogmEvcxnoZW1a8nQll Jq3RF3TlZze72asMS3YxF+Iuiyl9rRr1RH6eNFnjsSAEVdli+2pdMpefJHy47h97H8 x70LycXc/nIoqS3WDFbZF5BNxAqSARTKNpCSZUFzPxBw0xOpWFSfzB3EA+nQ7tNcQ+ KHTdF6B6mEeuB0vNLro1o+NY7tnAWttOT4Y4wYvEx7xBgrtsP7KMqxmW+8H30XgW3e 6IV4NFXQac+ms7DIb2xGh6r3bCABjM/lQ/0CPZSzVBxOeEO/bU2udYSgQsFfRXi9cK JHMaq8H+Ru06w== From: "Matthieu Baerts (NGI0)" Date: Wed, 20 May 2026 07:25:18 +1000 Subject: [PATCH mptcp-next v3 07/16] 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: <20260520-mptcp-add-addr6-port-ts-v3-7-bffa658a7678@kernel.org> References: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> In-Reply-To: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4970; i=matttbe@kernel.org; h=from:subject:message-id; bh=YrR4b2q+p22vMH2nHVoM29MHIk6a7m1eKf8ryuslchY=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqDNVBHqcMaEGn6w3WMbC6mK8LR+AsgpcC3rvzQ ss1STt/11+JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagzVQQAKCRD2t4JPQmmg c7AWEADj0neH0J7QO3ZWwq8Ldp9N4hDJp+cZP92Yg9ItW2XlrsT4T+qX0NLFkz9zWg2qPVaqQ8u sYjlmQAU4AnjGVuK0jzabP774NDNJg/hNLpwgWpdSptPHd3TF5UgABhBTrn8lc911F3wS9Zp/6x fuFgeOYwR09TlI+h2p/tI7biMUvW9gQY6UA8GUcNOpr8+5/XAVmCROquMPRgVnzUz4/wAz2MVl5 EKWfKhEXnN6qqkwfRGvbJAlJssQSQeJKmvXiO/8FGWK1BvH/s4JZOHthAryUDenxHxyhWi4Yovs qT79XwJLd+ikm3ZK7FqQUsawfxwlG9kP/Xflt7xnVRu/ea/O0EdBlxQ64ZahV9S3tum4wrCX1aG aCyyQz/WzyLymu/Lbx2p0FpoCrSHQJSnIUfz7MLXYolnX3B52kYlCyC5EMmcsY7CJlkcgooq+0t 0R2u+55RtTtUw2MEktpEiCUWGRkb7rEKiTumzOzQLUecXou4Qcknp457dcR+kPtk4StlZYwrKQF u6/GKrHH5ENtsWtiwam2v1xz8A/46ahxHl1DwPIWT+ugNZze5u7+Bq2QJfKbsqBOWInzEy34qAv 6Q+lztEfkj+abYIX/H5dJGN0fT2IMd77IECmPs/Kgndle/9JBhVHxQgKgP2UauSwmzTt0zngqeG 6iwedqobj2ECwMQ== 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) --- 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 94c182d845a4..398ece479aa7 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -654,6 +654,7 @@ static u64 add_addr_generate_hmac(u64 key1, u64 key2, static bool mptcp_established_options_add_addr(struct sock *sk, struct sk_buff *skb, int *size, unsigned int remaining, + bool *drop_ts, struct mptcp_out_options *opts) { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); @@ -668,7 +669,7 @@ static bool mptcp_established_options_add_addr(struct s= ock *sk, if (!mptcp_pm_should_add_signal(msk) || (opts->suboptions & (OPTION_MPTCP_MPJ_ACK | OPTION_MPTCP_MPC_ACK)) || !mptcp_pm_add_addr_signal(msk, skb, size, remaining, &addr, &echo, - &drop_other_suboptions)) + &drop_other_suboptions, drop_ts)) return false; =20 /* @@ -825,6 +826,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; @@ -875,10 +877,12 @@ bool mptcp_established_options(struct sock *sk, struc= t sk_buff *skb, =20 *size +=3D opt_size; remaining -=3D opt_size; - if (mptcp_established_options_add_addr(sk, skb, &opt_size, remaining, opt= s)) { + if (mptcp_established_options_add_addr(sk, skb, &opt_size, remaining, + &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 07536d5ba1ab..cc07cfef67dc 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -905,7 +905,7 @@ static unsigned int mptcp_add_addr_len(int family, bool= echo, bool port) bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, int *size, int remaining, struct mptcp_addr_info *addr, bool *echo, - bool *drop_other_suboptions) + bool *drop_other_suboptions, bool *drop_ts) { bool skip_add_addr =3D false; bool ret =3D false; @@ -949,6 +949,13 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, = const struct sk_buff *skb, if (!*drop_other_suboptions) goto out_unlock; =20 + if (*drop_ts && mptcp_add_addr_v6_port_drop_ts(net)) { + /* OK without TCP Timestamps? */ + len -=3D TCPOLEN_TSTAMP_ALIGNED; + if (len <=3D remaining) + goto enough_space; + } + if (*echo) { MPTCP_INC_STATS(net, MPTCP_MIB_ECHOADDTXDROP); } else { @@ -958,6 +965,9 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, goto drop_signal_mark; } =20 + *drop_ts =3D false; + +enough_space: ret =3D true; *size =3D len; =20 diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 2d6c8b1829cd..6323b5195b3f 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1213,7 +1213,7 @@ static inline bool mptcp_pm_is_kernel(const struct mp= tcp_sock *msk) bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff= *skb, int *size, int remaining, struct mptcp_addr_info *addr, bool *echo, - bool *drop_other_suboptions); + bool *drop_other_suboptions, bool *drop_ts); bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remainin= g, struct mptcp_rm_list *rm_list, unsigned int *len); int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); --=20 2.53.0 From nobody Mon May 25 18:11:40 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 14A6E3E8C67 for ; Tue, 19 May 2026 21:25:34 +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=1779225935; cv=none; b=mPQtVKodwdXUpBZb/b7q/CojcsRhrrTAEzbEXHmMyPz9J2iNwE+nPGZniXNmGlUJct4Yr278KhWPHrRlI/PAq6HzELu0dBjRvmzyfDkDXOUPyYEg1aS3UASf6Wxfu+dVOLAiI/DJRohdtnza++bE9GabHNluJA5x8s4Y8zwti/A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225935; c=relaxed/simple; bh=QFJQTxhkD2AgZ9YctJ1WtjN2BjqjUAK9Ui/9GaTBWQo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s4a01v/Ogp+maQcTErv1mZoQnKcDCKvg8Pc5n3UtBE7pD8o5fvSLRofkLbwe9WksfWQdCuXnkBXMixNMPSWTrQK6fe7AhVbh96MGeWkCEnCVM2wKJYL5qFTDp7sAXpQQploIajl4QRxlZiEGslwwYDHcdx1fosV7I6wI73ohOps= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=G099jug3; 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="G099jug3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5B7E61F000E9; Tue, 19 May 2026 21:25:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779225934; bh=OjQowhfODzG2mycXkj3A2VJWiOc3DbyvDzkq/m2dH18=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=G099jug36/BuoQg6JAUArwjxzwRmJm9+TuPe95y2VO0v7vO2roVSuDo168lRi0nBk OMxuA+w2/4NPNsH1M1uLIrFEZbdxMfhKeLWWENFh2zGyLeBbLDyxXywyIaGlRFfKX7 J9JqgLLx+7ventFgvEQWdTnykrTzLmzuUtrix4AkW5Qv6UEaRyBvBM29PMJ5QSyeyg YJd+wA0WtmhaX4L67tLf6MwlSc3Bn5c2W89jFi0xBoaPXw+L9Za6w6cG8ZB1O/CsTn Ist11EwtjnGsKkVClCrNt7jRUd72SHKDlL08P4zm46NEVElAbs4oc7gMwiyk819TwV ez+H9M9lEBJdg== From: "Matthieu Baerts (NGI0)" Date: Wed, 20 May 2026 07:25:19 +1000 Subject: [PATCH mptcp-next v3 08/16] 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: <20260520-mptcp-add-addr6-port-ts-v3-8-bffa658a7678@kernel.org> References: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> In-Reply-To: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1566; i=matttbe@kernel.org; h=from:subject:message-id; bh=QFJQTxhkD2AgZ9YctJ1WtjN2BjqjUAK9Ui/9GaTBWQo=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqDNVBK+A3xD/hrXNAWxLSuUnVEDDEh2EcKWw8s IXUfbXS5feJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagzVQQAKCRD2t4JPQmmg c5DAEAC6Gt4oWR/96Lso28mkRKBH6d9ZvAdDbqVLIrVJ36srDKgCpi8K+L82WVxQvbcLS5KJhz9 lKvVc5gp0kIfF4IH6LAwNmODM77H2/n8RxQ3W1brtbTyYHylCKALXeQu0izVFO0qCNi2NUUgeel Mpr2Iub3kQkQAAJY7dsoa88rB7GMSnaT5NPOHGQiGVnX5TpTWCcm56RkLeA86Z4jXASFvCkZHhD ZB/6cOZcETJdw5bG+u9NwNtzNezjl0Rmj6WoqGnPYiqmDLhLLnm5bLSnL2Y7oeFLoLZK6JTGxQ+ lRk7FPPPVKyR7M9Y7fAbd1EDELJtzMVyYs9kFpbwtvsU6OU++rJvx3Sv9PPSMtZCW8NL/I7OzdL jeFX64c89vc7MoHtBlM4k1C/vYIzOv3bjpJBZOMyG5ShFU2KUFRvp2NyMEkg7yeaUiQ8W2cyiKg ZQ7gqw6I+Vpw8QhVATcAgwgYAF4s32vZLqI9dQWw5kpBBtLqMcTcGvf9Cr/pDwpr+k++zeDMLSb qEan+y7RvU5M9C9kNiFy+LCPvcm1cytc1R8+yyZfaERbrfctbnZ/617yOjZ3k4Ef1E8zx0AKsDQ gjZaNPe6QAFKitqVTSB0hTKSg/8CG1QKQ2VTRFHEoh8wzx40PNLQWBzGC4qhNqCICfR7t5WW8ii hyiiHQ4VxkD8RTQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 This validates the feature added by parent commit, where it is now possible to send an ADD_ADDR with a v6 IP address and a port number, while the connection is using TCP Timestamps. This test is simply a copy of the previous one: "signal address with port", but using IPv6 addresses. This test is only executed if the add_addr_v6_port_drop_ts sysctl knob is available. If not, it means the kernel doesn't support this feature. Signed-off-by: Matthieu Baerts (NGI0) --- v2: switch back to IPv6 for the main connection to use a v6 socket. --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 23b17957686a..d491c3e964d6 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -3214,6 +3214,17 @@ add_addr_ports_tests() chk_add_nr 1 1 1 fi =20 + # signal address v6 with port + if reset "signal address v6 with port" && + continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/add_addr_v6_port_d= rop_ts'; then + pm_nl_set_limits $ns1 0 1 + pm_nl_set_limits $ns2 1 1 + pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal port 10100 + run_tests $ns1 $ns2 dead:beef:1::1 + chk_join_nr 1 1 1 + chk_add_nr 1 1 1 + fi + # subflow and signal with port if reset "subflow and signal with port"; then pm_nl_add_endpoint $ns1 10.0.2.1 flags signal port 10100 --=20 2.53.0 From nobody Mon May 25 18:11:40 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 7FD4A3E5EE8 for ; Tue, 19 May 2026 21:25:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225936; cv=none; b=aJtC0GlFRvNpVtFW3KAG7hr5LSoiO1Zl9SeGMU57iDjYjuz/Vq6MI5uRYOQR+i3xBcYSas9PNQPcUhs3C55BkQ0tT5VdVv1IdbxSAl3OoAmoLfd9vReqLrHTSwzJZH6K+zdV2PTfBHoEhhVNErSveTHoM5Fxg5KhJi7Jzm0ccoY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225936; c=relaxed/simple; bh=mRUZ8fUJ0RdPTACYZ38omEzQSXZElas6fU7vIj+n7VU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=l0T75FeoiAlnacPuCwmWokvJC9MUInSuc6AnjYGAz0WqEe9vOj41FHErP9QW5rxDPzEdcryz3xod5ZfkY9UkkvpH54L1ntVm7FwpLLs/yCIDWkqq/LKa3vGCfN8n7I0+JQagz3I1aNEau4dNmS43q98uf7jbXS/uXQ8r5hVqMw4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OSHvlEev; 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="OSHvlEev" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8B3AC1F00893; Tue, 19 May 2026 21:25:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779225935; bh=2Nz2b4R39HJ/RleNIijKDRgk7riODoAYKUDaMa2MMTk=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=OSHvlEeviOGdeWY0sRlDPNb2+hIwPTp+wTohieXH0xrBkhfF95Ari5w36bRhukIk8 hkrHSRUCFEVfSpkZvGd2XBz/2NeLYBpCpsh5K8/dSJ8twqvzmq2Jaa7HJpHcVZQBOe ehmR6CzlyzmBGLq6Wk0q2RJ1GKxtJh72hCeTVlhOruGEUbBmWE+CD+ewJwOH5GIqcB RJTGtNZGFhpgB9pwqCuEHifDvGLqHjkhYlm52Eh8O5vVGFD7Jlw7yYyHGZ1TYajmQk WVSq9aS0FuzT2Fgge5FnogUUoA9q2rFQ4BxFIFA+ALq1Ys5/jmVGrQ9lY0CKQ+FyfH Jqeg8BEMn5rmw== From: "Matthieu Baerts (NGI0)" Date: Wed, 20 May 2026 07:25:20 +1000 Subject: [PATCH mptcp-next v3 09/16] 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: <20260520-mptcp-add-addr6-port-ts-v3-9-bffa658a7678@kernel.org> References: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> In-Reply-To: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4863; i=matttbe@kernel.org; h=from:subject:message-id; bh=mRUZ8fUJ0RdPTACYZ38omEzQSXZElas6fU7vIj+n7VU=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqDNVBc4PumfqTVtO0kSE6ZOGUJ7DNO/el1qzb/ Iv+ZnukppCJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagzVQQAKCRD2t4JPQmmg cyQ6EACzAXu+QgHEOHbj+EXaPH/na/MTylqlV20Machvkfg02WauJkbwoQjDnV00th43cxMHI33 qmak0T/y6L33qTYsgYmDRqydNwmQFcfgHq8s9RwluxiLOJIY80e/E7sliMtTba1meK7E4SebNbs Q0HWCZqNTvV3DwRQuEa//WbTBOkC99+I2Bq5Hm/m3hpDpuCcMVMto+NR1SEQ+JMCDyDNN0F+g86 M6Ot+lqgqzyq9ujlTdPzab29gxRcgkmtRwT8pNvpDW7JclTXOUb5whRULR6DZq8lC5eMEle2074 nah3eOCHsu9ealpnmIYJyUZ+qG1/LdRjI1lroJN05ngzhnCeo5Jwhp1w+B1vLtezVWA1XDP/5cN QJUDKZEtpYxpPEO1mLUmKj0YVCCWjlpUNm9GA63KOjB9BN+pIkFDLZZcE0OU4PluCuTNeft8ziX 41ehaFICq9CtSHHXYCkBkGT960NBQ6PtTE0ik/9oZk/K8kjR+K2zU4wh1EZ6QlGOnmcdAVoMykV Czck/SpVqPAXgqkzY5FlFFJG6VSicqqFQ8QvzDPPjzNQU3zNX6wpjzAI62ov5ycEZ0BBN/yL/U0 GP8Rq8iD+LNJMw7Tpif/rJRuLd8byNOMt93DDtr2+D6fRTQDg8PQo/kNjG9Ux/sTYlnhCC8p7xr f4Bbgy1zrbVRhIQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Before, they were only checked on demand, but it seems better to check them each time received ADD_ADDRs are checked. Errors are only reported when the counter exists, and the value is not the expected one. This is similar to what is done in chk_join_nr: it reduces the output, and avoids a lot of 'skip' when validating older kernels. Also here, some tests need to adapt the default expected counters, e.g. when ADD_ADDR echo are dropped on the reception side, or it is not possible to send an ADD_ADDR due to the limited option space. Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 71 ++++++++++-----------= ---- 1 file changed, 27 insertions(+), 44 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index d491c3e964d6..82c0f7df3be2 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -87,6 +87,10 @@ unset fb_mpc_data unset fb_md5_sig unset fb_dss =20 +unset add_addr_tx_nr +unset add_addr_echo_tx_nr +unset add_addr_drop_tx_nr + # generated using "nfbpf_compile '(ip && (ip[54] & 0xf0) =3D=3D 0x30) || # (ip6 && (ip6[74] & 0xf0) =3D=3D 0x30)'" CBPF_MPTCP_SUBOPTION_ADD_ADDR=3D"14, @@ -1710,6 +1714,9 @@ chk_add_nr() local ack_nr=3D$port_nr local mis_syn_nr=3D0 local mis_ack_nr=3D0 + local add_tx_nr=3D${add_addr_tx_nr:-${add_nr}} + local echo_tx_nr=3D${add_addr_echo_tx_nr:-${echo_nr}} + local drop_tx_nr=3D${add_addr_drop_tx_nr:-0} local ns_tx=3D$ns1 local ns_rx=3D$ns2 local tx=3D"" @@ -1811,50 +1818,25 @@ chk_add_nr() print_ok fi fi -} =20 -chk_add_tx_nr() -{ - local add_tx_nr=3D$1 - local echo_tx_nr=3D$2 - local count - - print_check "add addr tx" - count=3D$(mptcp_lib_get_counter ${ns1} "MPTcpExtAddAddrTx") - if [ -z "$count" ]; then - print_skip + count=3D$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtAddAddrTx") # Tolerate more ADD_ADDR then expected (if any), due to retransmissions - elif [ "$count" !=3D "$add_tx_nr" ] && - { [ "$add_tx_nr" -eq 0 ] || [ "$count" -lt "$add_tx_nr" ]; }; then + if [ -n "$count" ] && [ "$count" !=3D "$add_tx_nr" ] && + { [ "$add_tx_nr" -eq 0 ] || [ "$count" -lt "$add_tx_nr" ]; }; then + print_check "add addr tx" fail_test "got $count ADD_ADDR[s] TX, expected $add_tx_nr" - else - print_ok fi =20 - print_check "add addr echo tx" - count=3D$(mptcp_lib_get_counter ${ns2} "MPTcpExtEchoAddTx") - if [ -z "$count" ]; then - print_skip - elif [ "$count" !=3D "$echo_tx_nr" ]; then + count=3D$(mptcp_lib_get_counter ${ns_rx} "MPTcpExtEchoAddTx") + if [ -n "$count" ] && [ "$count" !=3D "$echo_tx_nr" ]; then + print_check "add addr echo tx" fail_test "got $count ADD_ADDR echo[s] TX, expected $echo_tx_nr" - else - print_ok fi -} =20 -chk_add_drop_tx_nr() -{ - local drop_tx_nr=3D$1 - local count - - print_check "add addr tx drop" - count=3D$(mptcp_lib_get_counter ${ns1} "MPTcpExtAddAddrTxDrop") - if [ -z "$count" ]; then - print_skip - elif [ "$count" !=3D "$drop_tx_nr" ]; then + count=3D$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtAddAddrTxDrop") + if [ -n "$count" ] && [ "$count" !=3D "$drop_tx_nr" ]; then + print_check "add addr tx drop" fail_test "got $count ADD_ADDR drop[s] TX, expected $drop_tx_nr" - else - print_ok fi } =20 @@ -2267,7 +2249,6 @@ signal_address_tests() pm_nl_add_endpoint $ns1 10.0.2.1 flags signal run_tests $ns1 $ns2 10.0.1.1 chk_join_nr 0 0 0 - chk_add_tx_nr 1 1 chk_add_nr 1 1 fi =20 @@ -2545,8 +2526,8 @@ add_addr_timeout_tests() speed=3Dslow \ run_tests $ns1 $ns2 10.0.1.1 chk_join_nr 1 1 1 - chk_add_tx_nr 4 4 - chk_add_nr 4 0 + add_addr_echo_tx_nr=3D4 \ + chk_add_nr 4 0 fi =20 # add_addr timeout IPv6 @@ -2557,7 +2538,8 @@ add_addr_timeout_tests() speed=3Dslow \ run_tests $ns1 $ns2 dead:beef:1::1 chk_join_nr 1 1 1 - chk_add_nr 4 0 + add_addr_echo_tx_nr=3D4 \ + chk_add_nr 4 0 fi =20 # signal addresses timeout @@ -2569,7 +2551,8 @@ add_addr_timeout_tests() speed=3D10 \ run_tests $ns1 $ns2 10.0.1.1 chk_join_nr 2 2 2 - chk_add_nr 8 0 + add_addr_echo_tx_nr=3D8 \ + chk_add_nr 8 0 fi =20 # signal invalid addresses timeout @@ -2582,7 +2565,8 @@ add_addr_timeout_tests() run_tests $ns1 $ns2 10.0.1.1 join_syn_tx=3D2 \ chk_join_nr 1 1 1 - chk_add_nr 8 0 + add_addr_echo_tx_nr=3D7 \ + chk_add_nr 8 0 fi } =20 @@ -3331,9 +3315,8 @@ add_addr_ports_tests() pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal port 10100 pm_nl_add_endpoint $ns1 dead:beef:3::1 flags signal run_tests $ns1 $ns2 dead:beef:1::1 - chk_add_drop_tx_nr 1 - chk_add_tx_nr 1 1 - chk_add_nr 1 1 0 + add_addr_drop_tx_nr=3D1 \ + chk_add_nr 1 1 0 fi } =20 --=20 2.53.0 From nobody Mon May 25 18:11:40 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 076F43E5EE8 for ; Tue, 19 May 2026 21:25:36 +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=1779225938; cv=none; b=a39YaTaSN8+C+ULckzXVzMUXwczPbiF5Q4uAE0PsfvE14JRKVTgvgLmjel7iQZKeAQyPBFRIPrLWTBCqC6jTdEMrZDEOigiMxbGiZfyCYGJitSLfAbGZ22yydjGnrO9Vg9W7dQEfzu1Y/HdbOW7kAi6i1FSOw8l5u+fDHlvKg/o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225938; c=relaxed/simple; bh=+GeSStJqDp/Y/y9qQusHIJhJZQABlXmiVVzPEVe6NfU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=c04UPLYcA0VDm+GHLcEu43OQ1Dvu8QxS8cH7YHu9a08HELAA1lEJfVSaL0KTOvBAnkH2XluYdeb01XfaD9y5zQWntQMB69UcBIpV6/jbGH3WfPv1JRe8XCCNgLH2ap/CQdJGt77gbOMvnblXK3Gp/wc8Z7vGoQvHLr8W2jLGNzk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=m4g+LtO8; 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="m4g+LtO8" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0FEA81F000E9; Tue, 19 May 2026 21:25:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779225936; bh=8eYGKQrzfJHnh7qWtZy0+GYL4RwcEhLCYUfMuYp3RZw=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=m4g+LtO8HO/cmmKTvCipTVOWF9dDZehzReridQdtqn1PwxtCxa51ziU2+EbWDiEPj kN0Ggghc6KOKcpoCAKDO8zC5G/rb3z2t15qbjHNBngCLcnbp+nHqieryNwJov+QnoU Z1cg+6TSnpPZII44SasWZraY1fWyTQaz5vDa7V3NUW3OCaXcxT31mb24MRNENT/S2P ZWJ47QLV9k/3lbsJExpEOntPVRQqPXzD3Fa4sQyRpVuyJx6DWswIZS8NAPBsYi1qjN 8NnR7j+VynpTzdCgVIgQ1kge6qPZw+xNnm8nlx1Idh4s5UWhij7CQndckHpgJUmem0 iVXIDr8JiHu2A== From: "Matthieu Baerts (NGI0)" Date: Wed, 20 May 2026 07:25:21 +1000 Subject: [PATCH mptcp-next v3 10/16] 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: <20260520-mptcp-add-addr6-port-ts-v3-10-bffa658a7678@kernel.org> References: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> In-Reply-To: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@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=+GeSStJqDp/Y/y9qQusHIJhJZQABlXmiVVzPEVe6NfU=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqDNVBYPb2lxdaZelOFfK34+OU41j9R6sIVDBSt rZjcPS6/JmJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagzVQQAKCRD2t4JPQmmg c4GREACC6AFe9jUJCAYD+3CFx6RtqCArDPlAGO0LQaQFaSD9l6x5oFVG2NTdIcdv26CisyRh9pW Boea+OF/7RWeFAWNOgyYqnz6ANNMl9xECppJeLeujc5pYOFE6mvziWxVi6to2adqjmKswWpSXqX UK4VxH165jhI3+1O4D1UlBA0ZooMmeFY0g/eycm1fvVpRu4bshgNx8ryVAm/44waTKq5gSFEJsP zjkQLboB1u1eD4eIZYSHZrubrcObH7qtf6uBrbhkOc10snkwxDskPulmvyZfGoJKXrzAg7o3iK+ +u2GpBk08aBxPss4Pfd5guwtgholpuvt4yBNFu4h40OjiU3w0Yu4BY6gtexl/JI1o/yC5CjLY+P Ne/4uCfc2asVURbz9NfvXz+3CzmPkz7jMBfz8sRjXURwGX/cMVbIEjT8mqNMpKllu5g9cmMFPCP 3f9ov42yKPsvf44WX0+zaNQDyoBD7cBZVIhiwZiubdq6e6lAutAXyY4LPQFvFxif59VFnZBEhMN UITfItiWpN9+orpV3GZuGT2DSe5nKRjVQ4Gh0nX+bMwys/76P+hyx5OpM/rxUr85wSiKDdirw2t L+J1UVCn7WnDT47QX6qxfsbSFy3U29vm+ONEzYLSfQJJNCO2axd8iCaUBKBNB/2viGWIhaX7TRN Jj5afMwDfXYBiXQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Similar to most places in the MPTCP code. So instead of passing the subflow list and use list_for_each_entry(subflow, list, node), pass the msk and use mptcp_for_each_subflow(msk, subflow). That's clearer and more uniform with the rest. While at it, add 'pm_' prefix for the exported one to easily identify the origin. Plus replace 'lookup' by 'has', because a bool is returned. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 6 +++--- net/mptcp/pm_kernel.c | 12 ++++++------ net/mptcp/pm_userspace.c | 2 +- net/mptcp/protocol.h | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index cc07cfef67dc..f7d00be60ce5 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -115,14 +115,14 @@ static bool mptcp_pm_is_init_remote_addr(struct mptcp= _sock *msk, return mptcp_addresses_equal(&mpc_remote, remote, remote->port); } =20 -bool mptcp_lookup_subflow_by_saddr(const struct list_head *list, - const struct mptcp_addr_info *saddr) +bool mptcp_pm_has_subflow_saddr(const struct mptcp_sock *msk, + const struct mptcp_addr_info *saddr) { struct mptcp_subflow_context *subflow; struct mptcp_addr_info cur; struct sock_common *skc; =20 - list_for_each_entry(subflow, list, node) { + mptcp_for_each_subflow(msk, subflow) { skc =3D (struct sock_common *)mptcp_subflow_tcp_sock(subflow); =20 mptcp_local_address(skc, &cur); diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index ae28c96adb91..8436e66daab6 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -96,13 +96,13 @@ u8 mptcp_pm_get_limit_extra_subflows(const struct mptcp= _sock *msk) } EXPORT_SYMBOL_GPL(mptcp_pm_get_limit_extra_subflows); =20 -static bool lookup_subflow_by_daddr(const struct list_head *list, - const struct mptcp_addr_info *daddr) +static bool has_subflow_daddr(const struct mptcp_sock *msk, + const struct mptcp_addr_info *daddr) { struct mptcp_subflow_context *subflow; struct mptcp_addr_info cur; =20 - list_for_each_entry(subflow, list, node) { + mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); =20 if (!((1 << inet_sk_state_load(ssk)) & @@ -673,7 +673,7 @@ static void mptcp_pm_nl_add_addr_received(struct mptcp_= sock *msk) mptcp_pm_addr_send_ack(msk); mptcp_mpc_endpoint_setup(msk); =20 - if (lookup_subflow_by_daddr(&msk->conn_list, &remote)) + if (has_subflow_daddr(msk, &remote)) return; =20 /* pick id 0 port, if none is provided the remote address */ @@ -1099,7 +1099,7 @@ static int mptcp_nl_remove_subflow_and_signal_addr(st= ruct net *net, goto next; =20 lock_sock(sk); - remove_subflow =3D mptcp_lookup_subflow_by_saddr(&msk->conn_list, addr); + remove_subflow =3D mptcp_pm_has_subflow_saddr(msk, addr); mptcp_pm_remove_anno_addr(msk, addr, remove_subflow && !(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT)); =20 @@ -1237,7 +1237,7 @@ static void mptcp_pm_flush_addrs_and_subflows(struct = mptcp_sock *msk, =20 entry =3D list_prepare_entry(entry, rm_list, list); list_for_each_entry_continue(entry, rm_list, list) { - if (mptcp_lookup_subflow_by_saddr(&msk->conn_list, &entry->addr)) + if (mptcp_pm_has_subflow_saddr(msk, &entry->addr)) slist.ids[slist.nr++] =3D mptcp_endp_get_local_id(msk, &entry->addr); =20 if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr)) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index d838e8ea65fd..ff0bbd96cd09 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -283,7 +283,7 @@ void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk, /* only delete if either announced or matching a subflow */ if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr)) anno_nr++; - else if (!mptcp_lookup_subflow_by_saddr(&msk->conn_list, &entry->addr)) + else if (!mptcp_pm_has_subflow_saddr(msk, &entry->addr)) return; =20 alist.ids[alist.nr++] =3D entry->addr.id; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 6323b5195b3f..7a0f04e5b08a 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1139,8 +1139,8 @@ bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *m= sk, const struct sock *sk); struct mptcp_pm_add_entry * mptcp_pm_del_add_timer(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, bool check_id); -bool mptcp_lookup_subflow_by_saddr(const struct list_head *list, - const struct mptcp_addr_info *saddr); +bool mptcp_pm_has_subflow_saddr(const struct mptcp_sock *msk, + const struct mptcp_addr_info *saddr); bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local, --=20 2.53.0 From nobody Mon May 25 18:11:40 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 9C28D3BB68B for ; Tue, 19 May 2026 21:25:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225939; cv=none; b=nG3oJ0jO9NFqdjaNoIH/OYSFdnq/NWwE1F5zjDYniW3N1GQExnrDwDh0GfiwPFzDNSCOreMad6NgcRnHuDVGud6KVbttiME+9eu1BBe5ltcx7ICFMyGpH5p87r1aggMGaW7lU8374EGdFMsFN4rkpzs5ujJZZmIqJtSGNaHmlyU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225939; c=relaxed/simple; bh=fkqrKx+PwCe1bbat+ZBAv2GdFwm7LUcqkZV58wWlSnA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=o5Cx2jekNuTWSPwuOlcUyE9mqVVYOhHfqTa4vXNxfLZUFq7NQrgBS1md9yfU6jH+CE80rTnusfou4AzCsW2JcborNSsbmS+7YUDVqSEXicUp4z3EnAPnOVwxHq5iefjD4pUqu2fqXrh0NKfLWZusNao52RizZZdr8jO22bisAKo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nI+XFPJW; 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="nI+XFPJW" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 606041F00893; Tue, 19 May 2026 21:25:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779225938; bh=NilvR/TFPPN+XjLpPbz9qY3R/smhTLnFv8inJa/8UTs=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=nI+XFPJWIsx8NS8l8jQ2JFLo7acLLkvxlrHAepoJIyA6g5WbzDaQ4UyV8cPhpuXt3 Q7dSn09aXal5yBZP7+dwg+5sgi0huJSVCZi2ypqKOtsTwJoRwr79NAJcC++N8LNvNY h7FAIkpDT/UZyi8nXGAFeyWBxVxt64RsAknMD+CptCpueaKHelpsv6e07yQUAChDRd T+eEQdhrgQqLsvwrK2Z/pN7YkY8KeDrIE3CXG5U7FyobfORJNHAmCZbXTEh5ncWAct KY0tvL5w5d3ARggzMDz49VQv3Uvm1M09kzI8fYRNH3kWyUSEYzhHS2TUHQiGiyTYpG 4C6E6Y4I9iXXw== From: "Matthieu Baerts (NGI0)" Date: Wed, 20 May 2026 07:25:22 +1000 Subject: [PATCH mptcp-next v3 11/16] 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: <20260520-mptcp-add-addr6-port-ts-v3-11-bffa658a7678@kernel.org> References: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> In-Reply-To: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@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=fkqrKx+PwCe1bbat+ZBAv2GdFwm7LUcqkZV58wWlSnA=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqDNVBObkoSwULUtrMEb5jNm5df6nJf0nvIoJl0 pIhvPge5iyJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagzVQQAKCRD2t4JPQmmg cxQWD/92C8yMdzLjHqAqkMZn5sJH60aXSks1yp6mAWizbPcn57GFhGOoCsz/WoywtweRbWIxL85 v3cxVUOqMSHWmeLK7LZg+TBPKyB05Z3GnhPb8PJCU07qsIgLZwFG6OBk6fCiYQUATiKpXcMLF6i gTb6DjeDp+7Bcbrju5CA+Zd5m94FDF/fDkc44R10wvAmnqaXHEHcBiFM5ht/GnovAxiaNGFHIr6 EyYZ8BL9SMHRCigUiupnng+MtAM9QsRff86Yp4A40VvkqVAosuBtjkTYNmmQbwJiRkMNqCyOXkN Gs72VpVjAGh4LAyrFtqgWaKo+MWFnC/JIgGZAgYUBuZMd3eX8BTs4Y2GOGqhCOdfwWnrlmXuE8e PGWZYFXg/L5BarDmdWn2bL32RfD4Kc/yZ06UG9EDPnDNo1oSKNXFPc0fRffoL5pwwn8Qgi/hJO8 JTdeYxk7R+9kLw6/A2jhggITeEdEj/tYNI3I6i06W/Wnkn4uyq4gAxHGBszAqd8FkAVknm+Vrj+ PAldIKQig8SMf/r6diBFTODP0SwsNcvpkREbX9//kPtdJs+Xp28NVSjRE/gduvoheX0Ie0an6Z/ anpcizHmON6jAHCsu6p4wnuhqeeqB6SoBbB9m5xQMFTJFbDe4oMYF9/ILIpufkgKS+GBDXTCJUy 0nf/I7B04qSr8jQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Using only the 'add' prefix is confusing: does it refer to a generic added entry or address, or specifically to ADD_ADDRs. Using add_addr removes this confusion. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 22 +++++++++++----------- net/mptcp/protocol.h | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index f7d00be60ce5..e5d2d66193ed 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 7a0f04e5b08a..59603bb1308e 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1136,7 +1136,7 @@ int mptcp_pm_mp_prio_send_ack(struct mptcp_sock *msk, bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *msk, const struct sock= *sk); -struct mptcp_pm_add_entry * +struct mptcp_pm_add_addr * mptcp_pm_del_add_timer(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, bool check_id); bool mptcp_pm_has_subflow_saddr(const struct mptcp_sock *msk, --=20 2.53.0 From nobody Mon May 25 18:11:40 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 CED9C3E5A2F for ; Tue, 19 May 2026 21:25:39 +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=1779225941; cv=none; b=FHQm4u0IJKcIsMf6Or23OZBreFNmevhO0JDAh+I+eMfB848N6UY0jGFlPE7u14Agz4/b92It/WEQa/CElx1xPITyeitXBimE6a03TNBvUzH1VIplPfIO2u9Qxd63TcZ29C1vSNwdDzaYBawTjuRcF8EOkAD4cdoI/FWmZ3MbY08= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225941; c=relaxed/simple; bh=OQNku75TfkutcmrJAbdUjsyPVdd0FDzuA6IvaZLZj5k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Tu1x8UoaL7Sfnc3dK23f/yMCZ1duDgdYPWbyt7Z91aEYN6L0L/lUmXrQzEV1wd7XcvHvd9+sFfEWxhWmMDO+8/4UxQioGm431ZrL27EDRkK6/sEA+n/6dV8mNXo/HLh7F2t2Sn09tIGqEzMkQsdGmu5aRArBJqLQAqvJcYhleOU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OzxqMIIj; 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="OzxqMIIj" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D93F11F000E9; Tue, 19 May 2026 21:25:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779225939; bh=KiXgHq2SnLrq8CYz/aABzEgfXG0K3IAIz0oVOuwb1TI=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=OzxqMIIjTDlw4LvFQnYx8Hgs55tWIb1YDVt0w5DnD8r0et9r1pPJK+8w4mKu23c2h oKYhuEA0smyZfBmWHocg70eHTLvJSxen9c0NczZEePr2V2NKto+/D8wWyA0QY6BFqq JCjJpT7NHhNDqbk6XHQ+/coluW9ysG4OcPfXno+v87W8oUuiHRsagqKB2XdfMiRH19 AWv7TuQmS5nYFZp2i+qDyHlkCex+IrtKanPhDPNn20VZEW7eKtwVk0zw5hg0t5zGMe b4VAgFHblAMP7g+3HZRtuZFKxJGPvt7AT3b3SxiVfxHm/XgU1CBgyIpZfkhCpkE0X8 Q8FIub209CpQA== From: "Matthieu Baerts (NGI0)" Date: Wed, 20 May 2026 07:25:23 +1000 Subject: [PATCH mptcp-next v3 12/16] 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: <20260520-mptcp-add-addr6-port-ts-v3-12-bffa658a7678@kernel.org> References: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> In-Reply-To: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@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=OQNku75TfkutcmrJAbdUjsyPVdd0FDzuA6IvaZLZj5k=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqDNVBcSafwhZjGUjfKiD15/D6sjxUTMxpxUwDD 7T5ADZj6MOJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagzVQQAKCRD2t4JPQmmg c7+HD/40uuQy6ytbDv+FCa8j/epbvrotxNJZSGXw2HzrIDhdlNe8Gb5Nt+2+DESZxSpJbjogPRe 8/N8eAayTxQpxapJ09UnHiX6kVBHZcwttSSStW46YtUSpHTihoLDSqVEOccIFBQ8oQgTMtC6Sar toJ1QiJMpHhNyJLdTmv0QT9MiqSPF6n3TFEvXqTiBsQwZbmlut+Gslfzj9dbXS8/GMCn2iM4nu2 IrlCAYdgU8jfQdpGjYd73sVMo11J0/Vl559gg7k253kU0ryxhOKwEoFTkrTb/meXzc1pje9qk+E zsrpACm8wORYFSQT8cEoG8zJ08YN4Buz0E3cxl26oaDn39DXLhpYirQhlwSEMNNEPOrzBSn8xOT a/lJ8q6upqANcuEdc+M11Qa5meXJNZ0K67O/pD/8/sBForRLN1AokiOJz3oYPmYBom1/fLzvNzw PaInMSPJ81LVGCi9stSFDPyyATDH8Er1rNAV+5et18J1fjKhLofUGhzsUZfbkCUwk8NIqW87+9l NlFme+D1fWYAsOjSGZIc0KTsL+5/YmRAS82WOcCRE3L9DWRYApGBVmXdX9C/nLCEJP+hpjsFfOK 9VhIdJQBske5WyNN9AGqKNzO+KlfLSg3wdI/BwxXS/Ql+P2w5CkR8GWnxwMn+RcZ8Cmc//ivfzY 3bM+dkYVQ4Je32g== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Similar to the previous commit, only using the 'add' or 'anno' prefixes is confusing -- generally associated to the action of adding something, or the Latin name for "year" -- and lack of uniformity. This has been causing issues in the past, e.g. del_add_timer seemed to suggest the goal is to delete a previously added timer. Instead, use the mptcp_pm_announced_ prefix. While at it, slightly improves some helpers: - mptcp_lookup_anno_list_by_saddr: no need to specify what is used to do the lookup: mptcp_pm_announced_lookup. - mptcp_pm_sport_in_anno_list: it doesn't just compare the port, but the whole address linked to the sublow: mptcp_pm_announced_has_ssk. - mptcp_pm_alloc_anno_list: it allocates one item of the list, not a whole list: mptcp_pm_announced_alloc. Signed-off-by: Matthieu Baerts (NGI0) --- v2: also update comment mentioning mptcp_pm_announced_del_timer. --- net/mptcp/options.c | 2 +- net/mptcp/pm.c | 35 +++++++++++++++++------------------ net/mptcp/pm_kernel.c | 10 +++++----- net/mptcp/pm_userspace.c | 4 ++-- net/mptcp/protocol.h | 12 ++++++------ net/mptcp/subflow.c | 4 ++-- 6 files changed, 33 insertions(+), 34 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 398ece479aa7..259c77b40829 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1199,7 +1199,7 @@ bool mptcp_incoming_options(struct sock *sk, struct s= k_buff *skb) MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ADDADDR); } else { mptcp_pm_add_addr_echoed(msk, &mp_opt.addr); - mptcp_pm_del_add_timer(msk, &mp_opt.addr, true); + mptcp_pm_announced_del_timer(msk, &mp_opt.addr, true); MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ECHOADD); } =20 diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index e5d2d66193ed..05834e46bbc3 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; @@ -738,7 +737,7 @@ void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, =20 spin_lock_bh(&pm->lock); =20 - if (mptcp_lookup_anno_list_by_saddr(msk, addr) && READ_ONCE(pm->work_pend= ing)) + if (mptcp_pm_announced_lookup(msk, addr) && READ_ONCE(pm->work_pending)) mptcp_pm_schedule_work(msk, MPTCP_PM_SUBFLOW_ESTABLISHED); =20 spin_unlock_bh(&pm->lock); @@ -982,7 +981,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; @@ -1170,7 +1169,7 @@ static void mptcp_pm_ops_release(struct mptcp_sock *m= sk) =20 void mptcp_pm_destroy(struct mptcp_sock *msk) { - mptcp_pm_free_anno_list(msk); + mptcp_pm_free_announced_list(msk); mptcp_pm_ops_release(msk); } =20 diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index 8436e66daab6..331f6fa99014 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -374,7 +374,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(stru= ct mptcp_sock *msk) /* If the alloc fails, we are on memory pressure, not worth * continuing, and trying to create subflows. */ - if (!mptcp_pm_alloc_anno_list(msk, &local.addr)) + if (!mptcp_pm_announced_alloc(msk, &local.addr)) return; =20 __clear_bit(endp_id, msk->pm.id_avail_bitmap); @@ -1054,7 +1054,7 @@ int mptcp_pm_nl_add_addr_doit(struct sk_buff *skb, st= ruct genl_info *info) return ret; } =20 -static void mptcp_pm_remove_anno_addr(struct mptcp_sock *msk, +static void mptcp_pm_remove_announced(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, bool force) { @@ -1063,7 +1063,7 @@ static void mptcp_pm_remove_anno_addr(struct mptcp_so= ck *msk, =20 list.ids[list.nr++] =3D mptcp_endp_get_local_id(msk, addr); =20 - announced =3D mptcp_remove_anno_list_by_saddr(msk, addr); + announced =3D mptcp_pm_announced_remove(msk, addr); if (announced || force) { spin_lock_bh(&msk->pm.lock); if (announced) @@ -1100,7 +1100,7 @@ static int mptcp_nl_remove_subflow_and_signal_addr(st= ruct net *net, =20 lock_sock(sk); remove_subflow =3D mptcp_pm_has_subflow_saddr(msk, addr); - mptcp_pm_remove_anno_addr(msk, addr, remove_subflow && + mptcp_pm_remove_announced(msk, addr, remove_subflow && !(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT)); =20 list.ids[0] =3D mptcp_endp_get_local_id(msk, addr); @@ -1240,7 +1240,7 @@ static void mptcp_pm_flush_addrs_and_subflows(struct = mptcp_sock *msk, if (mptcp_pm_has_subflow_saddr(msk, &entry->addr)) slist.ids[slist.nr++] =3D mptcp_endp_get_local_id(msk, &entry->addr); =20 - if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr)) + if (mptcp_pm_announced_remove(msk, &entry->addr)) alist.ids[alist.nr++] =3D mptcp_endp_get_local_id(msk, &entry->addr); =20 if (slist.nr =3D=3D MPTCP_RM_IDS_MAX || diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index ff0bbd96cd09..8a342a65bd34 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -228,7 +228,7 @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, stru= ct genl_info *info) lock_sock(sk); spin_lock_bh(&msk->pm.lock); =20 - if (mptcp_pm_alloc_anno_list(msk, &addr_val.addr)) { + if (mptcp_pm_announced_alloc(msk, &addr_val.addr)) { msk->pm.add_addr_signaled++; mptcp_pm_announce_addr(msk, &addr_val.addr, false); mptcp_pm_addr_send_ack(msk); @@ -281,7 +281,7 @@ void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk, int anno_nr =3D 0; =20 /* only delete if either announced or matching a subflow */ - if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr)) + if (mptcp_pm_announced_remove(msk, &entry->addr)) anno_nr++; else if (!mptcp_pm_has_subflow_saddr(msk, &entry->addr)) return; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 59603bb1308e..d501cd625362 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1133,16 +1133,16 @@ int mptcp_pm_mp_prio_send_ack(struct mptcp_sock *ms= k, struct mptcp_addr_info *addr, struct mptcp_addr_info *rem, u8 bkup); -bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk, +bool mptcp_pm_announced_alloc(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); -bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *msk, const struct sock= *sk); struct mptcp_pm_add_addr * -mptcp_pm_del_add_timer(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr, bool check_id); +mptcp_pm_announced_del_timer(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr, bool check_id); +bool mptcp_pm_announced_remove(struct mptcp_sock *msk, + const struct mptcp_addr_info *addr); +bool mptcp_pm_announced_has_ssk(struct mptcp_sock *msk, const struct sock = *ssk); bool mptcp_pm_has_subflow_saddr(const struct mptcp_sock *msk, const struct mptcp_addr_info *saddr); -bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr); int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local, struct genl_info *info); int mptcp_userspace_pm_set_flags(struct mptcp_pm_addr_entry *local, diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index d562e149606f..8e386899ceb9 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -235,7 +235,7 @@ static int subflow_check_req(struct request_sock *req, pr_debug("syn inet_sport=3D%d %d\n", ntohs(inet_sk(sk_listener)->inet_sport), ntohs(inet_sk((struct sock *)subflow_req->msk)->inet_sport)); - if (!mptcp_pm_sport_in_anno_list(subflow_req->msk, sk_listener)) { + if (!mptcp_pm_announced_has_ssk(subflow_req->msk, sk_listener)) { SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_MISMATCHPORTSYNRX); subflow_add_reset_reason(skb, MPTCP_RST_EPROHIBIT); return -EPERM; @@ -926,7 +926,7 @@ static struct sock *subflow_syn_recv_sock(const struct = sock *sk, pr_debug("ack inet_sport=3D%d %d\n", ntohs(inet_sk(sk)->inet_sport), ntohs(inet_sk((struct sock *)owner)->inet_sport)); - if (!mptcp_pm_sport_in_anno_list(owner, sk)) { + if (!mptcp_pm_announced_has_ssk(owner, sk)) { SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_MISMATCHPORTACKRX); subflow_add_reset_reason(skb, MPTCP_RST_EPROHIBIT); goto dispose_child; --=20 2.53.0 From nobody Mon May 25 18:11:40 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 530D83E7BCD for ; Tue, 19 May 2026 21:25:41 +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=1779225942; cv=none; b=Y3lGp2ubBGabVbwyy1zYBpYWUgXWl6frHu45/n88aO+oYotgslwISiFi/+df0Tn56ARugDwjM7m1rd/texFCGmUGNcXk6CbYASJkFK6yGyO9cK7CQTs3T4bjxWh+2NYNwV76e0GRleSpnmeVl1cZiuVCRpt5wPHqy6h4pbAr+uQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225942; c=relaxed/simple; bh=gNApQefUnDpYq3GybcALHtLuaLoO4Lha+PfsT7614HA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NoRwwuxSIGDg0qs5nAKsbynXnCWaJit42WdRedmOHuXEIwhZCFK4E2U9Qmf95j12ZnoltzzHu4bSof3qLDK9yY7E39z+AheNFc2Och1/XwtD/nWuskok3u3z+oxaKwJvdfur476aZjlfWQgO9kaxbqhm2vidqhSm/fXZ/PNmJrI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ao+BwxqH; 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="ao+BwxqH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 582161F00893; Tue, 19 May 2026 21:25:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779225941; bh=IP28DG2SRVWJWls5ctZoXwr6XIKJ5LthOUI2ex7jVfQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=ao+BwxqHIHrePIQDu6W76YV5S+Pir8yxuneHikiCnbGdUEx38kc0IDIysLshHbgto +YydNhYhwyhe4taIcm0tdvws6BAoO9wGfASmTkmbtE85ZlljQ+A0TyGm8RP37ieHHY tiLcsI775I2knFmH3q3AGzBXq5Dntyhi/6x0lIKDABkIb0yyzcbu/tEEAWQlAlczQn JpN6yLXCtbmTnj3aGvr/6rzjJRO4rMsNXEykJguPaLJBGZluhqneAqOiJOR3z6LCYl YZUnvo+7yj3uwhomLbDMrOCJVrFlbKCoRWfrm+mFBd0hPVZkTs9mWF6JTHtcLL1rRc VsDVtW4PbYwHQ== From: "Matthieu Baerts (NGI0)" Date: Wed, 20 May 2026 07:25:24 +1000 Subject: [PATCH mptcp-next v3 13/16] 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: <20260520-mptcp-add-addr6-port-ts-v3-13-bffa658a7678@kernel.org> References: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> In-Reply-To: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@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=gNApQefUnDpYq3GybcALHtLuaLoO4Lha+PfsT7614HA=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqDNVBf51zYwo0ZTxI1Epoi5LyPyrqJIgP8FAA+ cRSipTDrQ+JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagzVQQAKCRD2t4JPQmmg czx0EADxJ6Sw1/FnkUsjAo3CRElmcReFJQ35BmEiU0buwqQh5je3oFA/Set3SYoiZPHZCopTQrR iN5hbY7Hp0NTcTp6ab6KdIdsVIFuJlU2ab75KoAqzFcAIZpGnVCYFEKQz3QFicKRzkw+Rxd5tb7 iOJvzroEzb/Fhya4EShF1xkjBzkyyetAdXyzVv0+ooQpJIiT/YhTbPL6IhTqz9IrMEpveCOpKO0 Cc/Eck4Inqzs48U/wsvBMIHistHQrvAijdbuRNgpl6MmWrtetPca6XfA9gZ+lhMVY9FdbryQF1o GC7btLW4nTr/LnmtPP8A4Ug0yLLq5cP8o/MHJRd8OWzGUdtVtxNUA7rUWXDrvwCauk87rvSnrwU g8b0urrKNqOt8y2wulVPyHTk6uQiCGBFEcbgbtNCZ7jkQOSPuRtl0fO0Iq61Vbl3N70+XMKNlHt nsiBZSvJEPVbgLHavDMwiru+TqfctcT8jwfli09LZegWVFyNUpfR1Bpd1ynCsaPsl7PLRpya4vN gCHdx0q0NVFIekaJoUFfT5LZk12ZX/ODE6NmLUnuVif1rVtOR4MTasmJSr/wiWCTU+2tS/BZ51r Vwj90cPplD0BsuZ/MS3VLtjG24ueahrGa0zcTp5Gb09r4UsUUYhbB26lnGoAGll202oj7Ld00m/ Qxm9vdwsRdaNuDA== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Similar to the two previous commits, using the 'add' prefix is confusing, also confirmed by [1]. Now that the structure has been renamed to include 'add_addr' in its name, easier to know the timer is linked to the ADD_ADDR, no need to add the confusing prefix, or an unneeded longer one. While at it, also update the ADD_ADDR timer helper to clearly specify it is linked to ADD_ADDR, and it is not there to add a new timer. Link: https://lore.kernel.org/20251117100745.1913963-1-edumazet@google.com = [1] Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 05834e46bbc3..d3469d3b95c0 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 May 25 18:11:40 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 ED3FB3E5EE8 for ; Tue, 19 May 2026 21:25:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225944; cv=none; b=dBWxqA9z/KCMs+2Tk6ZFyQAHHK/bm9YQYhsbivzAz3kFTwg70E36pWx6w+bvsd+9N15ZjhOoYJiMCiQO+/d7ZWxXzf2kJCDEkRcbXwlgPYp8Mu0itBcoOLS/Z3ZUwzuL6ZwSRPay8iaaA04EdnD+LILfIRsXf9jQWsm6ZPUD3Wo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225944; c=relaxed/simple; bh=N2cWfBo6wQKdWA1g/sCtdjmluldFfivRaOMnkgBQCw0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CyQIyH099m6mynNkh1Bud8nNovNdsqrJpgfDgJ7VEaNumfuDeE24+/Mo9U4U90FeEyvcgrVCo5b4qL8NLZbeMiOR8FTAKKXgKExAEqPrDvr6kvjusZA2ecD1K+IE7PYa6oUaoFXM8YsfYqpWvjBzbNx19f8E4DBNSjgu4zVqFvE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kkVDMJKm; 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="kkVDMJKm" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DBAAF1F000E9; Tue, 19 May 2026 21:25:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779225942; bh=USqrqqY0HxyYwr4v8e74t541pjv1sInsrgG2puRj9fo=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=kkVDMJKm8bH/K5V+5CTIzWNUmj4+wCnue7fvI82sjQM9pa+0sdstknAx14k/vS49D /kYaricHW8ws2WKaWiHampO+Jd6NzdgIVZT1cNEQdyII2TMCTOMX/1bq1vSyOP0c66 frtDYNTu4b+Vt8j4T0GE8swfzvS5DS2DuuhlO9DKDbAfa1CT5PBysCAWHrIoThhB02 aWhamFXp/RJTatokHbNTg59pxwDAOadFC1dkFZGLp6eMBgYm+4t9AGRuxpmPPCyPt6 R7M85b9zRPpg+oeSZ29frd9fL7wiNytuio5mkuX0v72Q/1zQEdUbt6GqNuroRI8hiq F0+9vz/iEmePw== From: "Matthieu Baerts (NGI0)" Date: Wed, 20 May 2026 07:25:25 +1000 Subject: [PATCH mptcp-next v3 14/16] 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: <20260520-mptcp-add-addr6-port-ts-v3-14-bffa658a7678@kernel.org> References: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> In-Reply-To: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@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=N2cWfBo6wQKdWA1g/sCtdjmluldFfivRaOMnkgBQCw0=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqDNVB+SkM1az5T3gwnhKk+zF2CqDMLf3WWH/tE AEqgN97DJKJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagzVQQAKCRD2t4JPQmmg c9a1D/9kO2zch8qnazBZ6ZYv36TU+sr+kAFTJNEl//RPasCp6dy8JDeaN74aGq3VYhV3epWc87O rlabzp6SNq8EU+VUQLjC6XjZu/q+ttWHyaqsRiGIBCwVg1E1c3NFUlpqMMK8T/8m9/AVw4nyZMW 7BoOmu5mxwnV5lo0san5BHme6dMmzvnCd3R4pCW1OjuOAbqFBYB3we1O6GbAs+QUAc8uZFvgct5 GSVdPObR2wIp8b+EpimmoBxsYmA6FZ2d18iEyEVy9MpRg3o6NUSdVSdMyrxjMda4kJPrmxjy5lx McmWMIop4W2OeMN0YP1ogUPGWoPSVWUD47enrrE8IevqM+ULJSkOcFerympIwOzJzdBmsd9nFId hbe4jkh4gRhnpExWBrxHzpBIBRCljTHWtjgc6/PJ5DKT3HIlNaaZPaxEPjQUimx1M0aiTe2pldu E431zwaSzQcGg7JMmG4WIxzRNJEhr4IK7tCxQtb4Raiq3Avyjhvl4nUvFLmTGkJ+AlGt7wBZtSS zqxUPG9KuIns6QQeb8iRlguO+D/IqIgqutxLa1qZPt54YUsCL8T9ce1CGh5Ml8gZGDkHCXVbdWU dYR8BYDjd6he7GNk6ZicyBUqKjQ2CWAIJ+aZ6apCPSHsBlXoWahbrtAUKGIkpg4+seSgGTbNiSO DKO4LwfM87JmczA== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Only used in pm.c. Note that the signature is added above: it is easier than moving the code around, because this helper depends on mptcp_pm_schedule_work which is declared below. While at it, explicitly mark it as to be called while pm->lock is held. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 4 +++- net/mptcp/protocol.h | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index d3469d3b95c0..7af4affa8ecf 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -226,6 +226,7 @@ static bool subflow_in_rm_list(const struct mptcp_subfl= ow_context *subflow, return false; } =20 +static void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk); static void mptcp_pm_addr_send_ack_avoid_list(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_list) @@ -743,7 +744,8 @@ void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, spin_unlock_bh(&pm->lock); } =20 -void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk) +/* To be called while pm->lock is held */ +static void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk) { if (!mptcp_pm_should_add_signal(msk)) return; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index d501cd625362..a0d2d72a5401 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1117,7 +1117,6 @@ void mptcp_pm_add_addr_received(const struct sock *ss= k, const struct mptcp_addr_info *addr); void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); -void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk); void mptcp_pm_send_ack(struct mptcp_sock *msk, struct mptcp_subflow_context *subflow, bool prio, bool backup); --=20 2.53.0 From nobody Mon May 25 18:11:40 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 6C13C3E5EE8 for ; Tue, 19 May 2026 21:25:44 +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=1779225945; cv=none; b=pE0PQuTNhwZ/4Bn0edNZAssWRxIbFYlfeoel8AqnGRuRRjOv2e3alxdgnx/3Dg5TTA5QVmrIoHuX7k55wuVDS6QDF7RJJk+Z//QVlOUB6XRNNvMLOt0vFqs4UKJFUnpvgNEzUFiZeex0ymZyK7WK/UM4HUx+0nTnMoiyhK6Ap9k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225945; c=relaxed/simple; bh=5iwVc/wGhW2h6ZkS85KdaUyWbfKw5Iouj003igkNqf0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UzyeGW6BxU0tNl7bPlmJAqE+HhiJgVygIhucr75I1ILGEcoX9BpTMdHjvDzATOP7Tu2sIY4p1vxSRUiU6fUO2q9/LFvLbjq4XFNoVMHRGD1i59ZJ5NwWYjOBuqAZ6Wy5WQHGRGgIHOTR144DvmdOZ1OrJvmjWXCPjCRAgYjotwE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=P86mcD4n; 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="P86mcD4n" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 51B5A1F00893; Tue, 19 May 2026 21:25:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779225944; bh=hONp9e+KXomYTQj/+J0dPGjvbi9dT974pnHzxKr+ZgQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=P86mcD4n6QbPDOiTWp59CwEnw45jI3NJQd7gDh1tadWq+uIB7qFSbVGS1O4VCtXCE JIFR/evOjvMF38HPcNBKDtTXL+Eo8xM29FJ7aRKjRxLhxEv78y/LzBuYivQX+1xPeh qlnUuQdKxkvCJP0TQWX//4PzSWx+r22TQERaCLKOurv7BnsfOxNoBtveskhzdGx1qw UtI60XwKP5SZyhlHMnfvUNKO8vHai4q5lEF0tVIMWWZv4WP3ctpHDxN1fRa03LZ9FX ZTYsuCG4055aGtciuBBgBoITe4d+4lY06gOgOteBY2gfwXCEH8aNt/frttIT9M6XcK FLZP4zjv8e2Iw== From: "Matthieu Baerts (NGI0)" Date: Wed, 20 May 2026 07:25:26 +1000 Subject: [PATCH mptcp-next v3 15/16] 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: <20260520-mptcp-add-addr6-port-ts-v3-15-bffa658a7678@kernel.org> References: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> In-Reply-To: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@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=5iwVc/wGhW2h6ZkS85KdaUyWbfKw5Iouj003igkNqf0=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqDNVBnIhBWDDVkbEKseA+RMwwOqewotvGDiTPz VpiyQVYDbuJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagzVQQAKCRD2t4JPQmmg c1B7D/4xfazZVc2HB5aOaS5rNIY88n9u3JsLdpAYDbpov+58+QShUksmKTLgz/sR3I1CZkn/oTm B43cu/QVoj5hdhjhqHAHlhVEVrDGMWEvhmMafVW7kMJCJkI5m6gGf7gFOnGpbva1xfpLK0Xlgti Ie+EqxtKaMV8CLi5lpqF2ZdqmTbnsgrSe/vrSSFF8IicAOfyk+wOAo9OLGAba/5M5p7rJpVyeuX Dgt+vKMJBtQwgqlecVL+acLHhhWZEYjmIHccwF/lbBYyu+mGdVgU2/9WvnR13m7acS6EC7OP4aK 1CQ40a2K/cyE1lfTmiH86mIt5sUj7HGIYrxE+6/GKgf8G8haTkjepCKSWYXqDxHwkoZ7KeSI+nv jaKDDHm47K6RiQ4nYEasq09exyDD5doXsx8Q7pNyE6nF0Ss9yPRs5DN/L2FtEgphl8kE4fugbCh RAkywq/K7xjOUY6GKtfrNcFOiJpDFQ1G4W7In3XFaI5rca/5m3wNgE5vJk4fQd1GmaqHseA0+9T 6QlZOUJb5qd7Kb+doFaxljZ/EWQNLmFYp/BQTApPgaOfsgNMIpY0Re+R9FkssjWei9M0YKLzSP5 StqUDnYCWJoD478QhTIMcQsXhErRQveWYsk2SXR8qJWDhdf3guosjJwpOuVurO8KtEso0EM2c/p wfXfagOa8tn1ljA== 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) --- 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 259c77b40829..e411324ec2e0 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1199,7 +1199,6 @@ bool mptcp_incoming_options(struct sock *sk, struct s= k_buff *skb) MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ADDADDR); } else { mptcp_pm_add_addr_echoed(msk, &mp_opt.addr); - mptcp_pm_announced_del_timer(msk, &mp_opt.addr, true); MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ECHOADD); } =20 diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 7af4affa8ecf..ad52dd73d7e8 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) { @@ -730,15 +730,18 @@ void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, const struct mptcp_addr_info *addr) { struct mptcp_pm_data *pm =3D &msk->pm; + struct mptcp_pm_add_addr *entry; =20 pr_debug("msk=3D%p\n", msk); =20 - if (!READ_ONCE(pm->work_pending)) + entry =3D mptcp_pm_announced_del_timer(msk, addr, true); + + if (!entry || !READ_ONCE(pm->work_pending)) return; =20 spin_lock_bh(&pm->lock); =20 - if (mptcp_pm_announced_lookup(msk, addr) && READ_ONCE(pm->work_pending)) + if (READ_ONCE(pm->work_pending)) mptcp_pm_schedule_work(msk, MPTCP_PM_SUBFLOW_ESTABLISHED); =20 spin_unlock_bh(&pm->lock); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index a0d2d72a5401..ddb0be7f19bd 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1134,9 +1134,6 @@ int mptcp_pm_mp_prio_send_ack(struct mptcp_sock *msk, u8 bkup); bool mptcp_pm_announced_alloc(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); -struct mptcp_pm_add_addr * -mptcp_pm_announced_del_timer(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr, bool check_id); bool mptcp_pm_announced_remove(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); bool mptcp_pm_announced_has_ssk(struct mptcp_sock *msk, const struct sock = *ssk); --=20 2.53.0 From nobody Mon May 25 18:11:40 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 AD6283E835B for ; Tue, 19 May 2026 21:25:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225946; cv=none; b=DJOtQLN3961xqLlEFyZ2WAz8OFkxNYr97gXmQkzr16JlvDWiPz/Q7YzlbaFBWy3aS8a6suB3zHGOp1zVBuweqY9z+7uUEylrYRA6FSPlmFbV4lRmXpMr9lR8dLrpQ8WECJ4aSQQJ1RshU956+GxEDOGRrZ9O0MGrT+B9cyj3tnM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779225946; c=relaxed/simple; bh=VirNZYsHxD2lI4CIKqHH6zJxScxSxlXM87JWQznKJDc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NtSU2ga8bY5oqH7uTcHOUdwnUUvpgOCNIei076W9CznnRnkm8UKyCQGrgxm4AsOMfkKr+B4LPSsxOiIO1AAIYOmviOCYLKsV1QYcPePp4sVkgHAAedcjHAss7hY61KmkuZOzg298pj1R/sbvz5vpIXCZRHeKBtX05K3+hWbba00= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NO2uJ1sO; 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="NO2uJ1sO" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BBF4F1F000E9; Tue, 19 May 2026 21:25:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779225945; bh=8RzvkXX3ElK29UwnS8pi/rAEEMB6/RA2ht9Q2AnYwPo=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=NO2uJ1sOf10Pf0Fz/pfHW50y7ZPLB25ZlD/LDtZRwmHUk1P5d4PHxLv7JhGnM0UQM gK0EwrL0qhK1ORQdLhl0lkjS4tfniB4F7ZOdXK/ApYp1nh91bXRg9zdtVmbZlYstCF ZQGNO7qthwTtn3FlqvXwgdVQbMNWQmk5mzFs+fwW8nObKu5h6OQSG2hY7y9pFt3er2 PP/FqTUih+S06/I43duyCHh0QF9b4Zh+UZlCRXBmdQgQGQx3wuqT0qsIhmXCwAsPKD L4SuW//Nz1XOFcyLAsLPHc87UYPkzwYnryB0/L3qkBFlAiSEynaAxe7DXi1S01v42e /eAiMGJ1VOF4Q== From: "Matthieu Baerts (NGI0)" Date: Wed, 20 May 2026 07:25:27 +1000 Subject: [PATCH mptcp-next v3 16/16] mptcp: pm: avoid confusing check_id in del_timer Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260520-mptcp-add-addr6-port-ts-v3-16-bffa658a7678@kernel.org> References: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> In-Reply-To: <20260520-mptcp-add-addr6-port-ts-v3-0-bffa658a7678@kernel.org> To: MPTCP Linux Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2953; i=matttbe@kernel.org; h=from:subject:message-id; bh=VirNZYsHxD2lI4CIKqHH6zJxScxSxlXM87JWQznKJDc=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBqDNVBtv/nzHfbqjLRsri8Tk2pEVeCmU5PNuvlX THHaWHfmFGJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCagzVQQAKCRD2t4JPQmmg czn1D/0TrJnrzsz2Numu8lNhfKn6VhDxkr+vjalxqpgb02G+Ml3BW2Ju98W020YVIbJqRvE7jmX c9cOnJcjCVvbjRWp/lEcFR7YRu8S/Z9f+q630OK+tBlC6VVflNHGfYvfGkCzuYYNXggrglsrT7l WPSQtMThA8JzNiZaI6gOCcZ5nS+bmp3NL+Z+F0orAu7RIjYkAiOUVYzKsVnQ3oCWVMVDlWapH6F lcTrP6qPybExoSScX7tEI1qsWb0ZTiLs5M0/5CxYn3ZNklSJanOV833VoYpbsLIOXiSU5CQrefS e31GzTatCI9TiDB5akYfLz2XermPwV6NMWB6sz2SFdrMlnSaCIFRAUWOKXNHCcbjAi2DMEtx4Iq MZuKhndg1DHJRrXarFNjkU48O4gVoW+PaQTnL9AAkRKT0lnisKKeaqM9pKi+J7hEwChUEHtLAxu BEajE5X1/xHE54vSwB/gvBIpOkYqf2vPS6U/AItAsHEERgy5PP3BHPQyiDhJ8Y71/NVQSlkJNh6 7iGFcaB9MHdm9qgja37OT4G4HsjpF8BaKRznUWhLnAAt826ouzCK8s7EEA6YeTIPsP6bGm3o3g7 6QEhwXYWga2Q9SFNJGXubcnlBFISLjcZNhsBqdm5GyL61yZsw/c0kzhhF+9dKTEcIDiDSFTnEnL fB7DYyJkUhsX19g== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 We an always check the ID in mptcp_pm_announced_del_timer: this check is needed when an echo is received, but in other cases, the caller will use an entry that was previously added in the list, so they have to match too, otherwise that's not correct. After having removed this extra check, the variable is only used to know what to do with the list and the timer. Use del_list instead of check_id: clearer that the action will remove the entry from the list. Signed-off-by: Matthieu Baerts (NGI0) --- v2: fix typo (check_id -> !del_list, '!' was missing in one case) --- net/mptcp/pm.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index ad52dd73d7e8..411893c476da 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -151,7 +151,7 @@ mptcp_pm_announced_lookup(const struct mptcp_sock *msk, =20 static struct mptcp_pm_add_addr * mptcp_pm_announced_del_timer(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr, bool check_id) + const struct mptcp_addr_info *addr, bool del_list) { struct sock *sk =3D (struct sock *)msk; struct mptcp_pm_add_addr *entry; @@ -161,23 +161,23 @@ mptcp_pm_announced_del_timer(struct mptcp_sock *msk, =20 spin_lock_bh(&msk->pm.lock); entry =3D mptcp_pm_announced_lookup(msk, addr); - if (entry && (!check_id || entry->addr.id =3D=3D addr->id)) { + if (entry && entry->addr.id =3D=3D addr->id) { entry->retrans_times =3D ADD_ADDR_RETRANS_MAX; timer =3D &entry->timer; } - if (!check_id && entry) + if (del_list && entry) list_del(&entry->list); spin_unlock_bh(&msk->pm.lock); =20 /* 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) + if (timer && !del_list) sk_stop_timer(sk, timer); =20 rcu_read_unlock(); =20 - if (timer && !check_id) + if (timer && del_list) sk_stop_timer_sync(sk, timer); =20 return entry; @@ -189,7 +189,7 @@ bool mptcp_pm_announced_remove(struct mptcp_sock *msk, struct mptcp_pm_add_addr *entry; bool ret; =20 - entry =3D mptcp_pm_announced_del_timer(msk, addr, false); + entry =3D mptcp_pm_announced_del_timer(msk, addr, true); ret =3D entry; kfree_rcu(entry, rcu); =20 @@ -734,7 +734,7 @@ void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, =20 pr_debug("msk=3D%p\n", msk); =20 - entry =3D mptcp_pm_announced_del_timer(msk, addr, true); + entry =3D mptcp_pm_announced_del_timer(msk, addr, false); =20 if (!entry || !READ_ONCE(pm->work_pending)) return; @@ -986,7 +986,7 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, c= onst struct sk_buff *skb, * let the PM state machine progress. */ if (skip_add_addr) { - mptcp_pm_announced_del_timer(msk, addr, true); + mptcp_pm_announced_del_timer(msk, addr, false); mptcp_pm_subflow_established(msk); } return ret; --=20 2.53.0