From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0A9BA171088 for ; Mon, 22 Jul 2024 19:35:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676954; cv=none; b=VNd4K83qLMfi3/KXjhKmIyAwl9Kw0HItcEHaCmNCP3u7BREF0DxgcW5Qayl8HDU3ivT+bMDjGmlQuaXocIB6ID3iAulUmVb+tYhapI43ymWMc6I01/jtBIqOJ/FNDXeVWwjv+1KWEmhQX+dDPhFX7/SYVIzFFbS9L9X6YEQhmEo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676954; c=relaxed/simple; bh=lVYzLe5JrCLEvvxaysYG3kgQy2v6ncdEAEe/A6edulI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AfTEI+lKpOfVg5t8GNv7b3+hWopjRCiurq++OoarCutSEyVBUCl2ZCF1lGsdX/EBeT9PBMkpxnqj7apenReTUBb7mFQt+BaaPZeyk+n1uhCdH9mcmII5Hl5azsV2JekVFfMi9k74N0s0zzgwxL8Ggy4eRtogfzTNULG6/jg1DHg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Kh1rzwha; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Kh1rzwha" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E6348C32782; Mon, 22 Jul 2024 19:35:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676953; bh=lVYzLe5JrCLEvvxaysYG3kgQy2v6ncdEAEe/A6edulI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Kh1rzwhacrLUnynAJhZL7V3mOagndZpAQqXaTP/V48o+dRPwGJ0gVgh0UmrtXEZzR LLTb+XV9MY/y7bWRXI0r4bmiSCKA4l2dwHFpXvXzBQ1IjruT4S9uypjLBCA244QpI+ B6zyqvT1ktrSB69PMKm/QFnZrV/2NJwtU9N57qH7ThEj3lsudG9LXCK+k6hkE9v10o jW8F86mPK95WgGrVdLn7AL2DGYL33+F8QLmZ367JY3Hqxy+yBYQzPUAL+vbK2dgsHo BbcUX4lPf510K1jOIwCtwW1GGn3/TVD4F2OaP/SBPlf36CfPpNNaYzkjSfpzgpr/7s cTquxJ5ddWoOA== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:39 +0200 Subject: [PATCH mptcp-net v4 01/23] mptcp: fully established after ADD_ADDR echo on MPJ 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: <20240722-mptcp-pm-avail-v4-1-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1655; i=matttbe@kernel.org; h=from:subject:message-id; bh=lVYzLe5JrCLEvvxaysYG3kgQy2v6ncdEAEe/A6edulI=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSWBS2rYPlzsU/sH5P0wZrdgEAuccol3XxZK o3Y6pde5/KJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lgAKCRD2t4JPQmmg c/cpEADYPWtqYVv6DNxc+ReC8bByC/W9nmOXGUgK7dHOUI7aRIZgX9nUVcNcgy0WVRr8g62CxJf nUNcyDhVTUPhv6sXJp5Te62J4RaUZR6shpTM5WuJmGoV0LhNuS/mfvPGPdjCDz+/3M0HEwR5dCh HDt41VEssGLSZUNLKn/AoeqT43R3DIBSImANU1mMQNGv5Q3Ra2w8AoEHT6V2+FpTZ4L3SY3FjIi 7CdRH37dre2FUoUEkv/+8Da1RxOkulUK7q8N7+UebLCqcFhmKGzypxSNGgKMOPC/vdRhagQeUzG R6O9WCvK2j9xL8wNeKP3MX8jPR4qrDj20yTsFHHkr9+2EaEZIoTdEsgnYu0k8BuPt5+aWZhoocW 8/NodnIMuuhFvzrnF3FTJYwOCFRXP5B20QebyCGQOORu5YRLfcXJDB0mQyuF6iOBkL0Y0KCn33H O3vwHFMzH8AorHVAP5XXbr8STXVfHxabbBzef1RlLwXVvnziJ5/XhxilQFixVOlSkc6zP1yYCu4 i0afjnkuD0hdLWCQwtayp979jdRUmwT+kUoNQ3gKc5QRkIe7cOEtLL0NaGVPslYxXMvsrHnk3Mc NevgCQEj5fppw4FlrNLSqvKsgfkD3wOGJURWO2o/3CQdz69WLeWhTRl2K783/pmATb1DcaGzLOZ X/PUNz/1yS43Cww== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Before this patch, receiving an ADD_ADDR echo on the just connected MP_JOIN subflow -- initiator side, after the MP_JOIN 3WHS -- was resulting in an MP_RESET. That's because only ACKs with a DSS or ADD_ADDRs without the echo bit were allowed. Not allowing the ADD_ADDR echo after an MP_CAPABLE 3WHS makes sense, as we are not supposed to send an ADD_ADDR before because it requires to be in full established mode first. For the MP_JOIN 3WHS, that's different: the ADD_ADDR can be sent on a previous subflow, and the ADD_ADDR echo can be received on the recently created one. The other peer will already be in fully established, so it is allowed to send that. We can then relax the conditions here to accept the ADD_ADDR echo for MPJ subflows. Fixes: 67b12f792d5e ("mptcp: full fully established support after ADD_ADDR") Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/options.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index c0832df3b0a3..4ee2e3605f5b 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -958,7 +958,8 @@ static bool check_fully_established(struct mptcp_sock *= msk, struct sock *ssk, =20 if (subflow->remote_key_valid && (((mp_opt->suboptions & OPTION_MPTCP_DSS) && mp_opt->use_ack) || - ((mp_opt->suboptions & OPTION_MPTCP_ADD_ADDR) && !mp_opt->echo))) { + ((mp_opt->suboptions & OPTION_MPTCP_ADD_ADDR) && + (!mp_opt->echo || subflow->mp_join)))) { /* subflows are fully established as soon as we get any * additional ack, including ADD_ADDR. */ --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EBF71171075 for ; Mon, 22 Jul 2024 19:35:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676955; cv=none; b=J6VVZNdMpijsxIO4P1cwWtyYe7z5s05VNiwdMS95+kHBAlcYLJCvQ5bFw7sYPRWxI9pnt3OVaSDzGuq+1ddMz/XDEc4SPuA0qL+T0otOcCGJRHyj6q/gd0QzCpXGRlwLdJalAaYHb4uEkgolszBsAc70ClYOhNb9HYsHz8O8Ons= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676955; c=relaxed/simple; bh=VTCYuWArzYhunK5hbwYMqWdj9fMJvYLpw+Ge9TGDPd8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Hp5GqlDULvtANuGSeUiA1AxX5UMjzlBQY8KsiDm/xveHbx8GusRw1VsBiR4vVeRr39lZ+03MJdyQPWNaX7spqj4jp1Y6tOTdg3zyI169qw3Dx7Kcv0MyIcvZu012sF2tP6VaewbaIClpYsdn0anBatClo6NgF/ga2hRpyd9ZPJk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cc1J5gjy; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cc1J5gjy" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 17FF1C4AF10; Mon, 22 Jul 2024 19:35:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676954; bh=VTCYuWArzYhunK5hbwYMqWdj9fMJvYLpw+Ge9TGDPd8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=cc1J5gjyG6mJAPvAzvKxqKDizj9BxN5ZpDLjtERqmrYF3LbX2gmI6mSrjFTYcg9N5 qGEEQ1ZmmZ3jPsnk/5+BktTiv2rxiytLy6xvVzJLuGk3XD6UHT9hLuVSv9TklfO8Vr jQGConEmUdoq/ZPJNHhjBT4buxGLATwPQILLxil+jTtua4O6qIP42UJZLrTLhqYQfV PZ83YzDO4DQJ8pYp6eUHGSHQGt9N4tjioHVwsB4162STyc4iffRno1wBgc8OUGuAAk 7DEKYKUceJNSPYiZ8otm4yOH4AxLkmEuDM7rTrqay/TTLExGF0m4EuXmWuZjVo0eQz zYZHObPRXVzlw== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:40 +0200 Subject: [PATCH mptcp-net v4 02/23] mptcp: pm: deny endp with signal + subflow + 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: <20240722-mptcp-pm-avail-v4-2-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1389; i=matttbe@kernel.org; h=from:subject:message-id; bh=VTCYuWArzYhunK5hbwYMqWdj9fMJvYLpw+Ge9TGDPd8=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSWCplLSmEhqiLDAtrmfOww8fScxa96maVuL VeSlNSDUYmJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lgAKCRD2t4JPQmmg c3huEACHd3pyanfqC1q9AGeZgAhyhtcI6kJhxjat6rmbNi8V4QL+R79OocWYnVv/LWO6GQ9utij 0U/hAV1Zr5Ty/VX31rc7LCAOdPIQdmqqaRMZEtaK/69bHb7Hlrm+Gn2e+MtAPkLZfSurm6uq3rj UQORGVtwvvhLZuTjVlmgYre/u39Vh1oTNV2IGLoWWRyteiAiSUzMD43NvBc8p8T2WGHLrc5NWhs NtnMA7kafKt9kgsVSCoGaGCsidVETLBicYe5d6zbAEtknAfVkUvsgxc+etkKUlOsmxbLYKzMWjC 31GKPSbmo0z0kLGTRBOS+rd91hpofKB9eYKWPnfODzhcuD3n1N7W0W8Fb+kvNHxqRJwvUljqb5o KEIeshWIR49efW8bx5m9aWaD/MByspsulBKIYOWvWGSgHLl8h+NJKdkX7yjgiJE6FzH538sPxSH olI2uzoz+ArJ1EkBWxMt2kS/UFBfFwvcBBxpazXbqJMrB+rWJ8oZew7U7DYWKoCcAgZeCubq+IK +9h0Rb0akI/IKA7Acv1DxCyZsJSNN5m+n9j7KZdDL23EAeukebN0dqHdqTNCqp/jkJmHYhwhGQF MJJMGPt5rEEkpWjcqGhc1lfcofaHfSSV6Tk5YBnw1gtWWiGJkCteOONi8wVpqyfXShO9pxQUV+R Kz/0JR9cvZ4xoNw== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 As mentioned in the 'Fixes' commit, the port flag is only supported by the 'signal' flag, and not by the 'subflow' one. Then if both the 'signal' and 'subflow' flags are set, the problem is the same: the feature cannot work with the 'subflow' flag. Technically, if both the 'signal' and 'subflow' flags are set, it will be possible to create the listening socket, but not to establish a subflow using this source port. So better to explicitly deny it, not to create some confusions because the expected behaviour is not possible. Fixes: 09f12c3ab7a5 ("mptcp: allow to use port and non-signal in set_flags") Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm_netlink.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index f65831de5c1a..c44b0ae51cdf 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -1311,8 +1311,8 @@ int mptcp_pm_nl_add_addr_doit(struct sk_buff *skb, st= ruct genl_info *info) if (ret < 0) return ret; =20 - if (addr.addr.port && !(addr.flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) { - GENL_SET_ERR_MSG(info, "flags must have signal when using port"); + if (addr.addr.port && !address_use_port(&addr)) { + GENL_SET_ERR_MSG(info, "flags must have signal and not subflow when usin= g port"); return -EINVAL; } =20 --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 57C7F17108C for ; Mon, 22 Jul 2024 19:35:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676956; cv=none; b=S+U+O4672HLMKgy3QAaE9NMqO/x20JlS1jwJ7BicgDqZh2VHXrrAszjz772rPvAGevbBsozE8rIcFYiHPVrvRp9VUJx/6UH0kbK6dPHSEyvcDLy/jSV7tG7egrvCQK2r4ysA2eLW8gyLN9fIx73EO23LOHdnN0+5kE708ZYJz2w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676956; c=relaxed/simple; bh=1jgdfRM0rWxjkBHjcFTDjH0KOPr1H9+0NK7hSE/rOyY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Vd/OnmevastJnutzGAHGaOR7XrhkgevRyuOLZcLdrRJ2/DroF/IO3+/3JV5UJjYFr23RFlGUbqFb54kyLCKwHhyLn91OBrFRNGNekzYTUI/B//wIi98S2/09LRLWxpty5T5Th7gO/6sQLsHw8ZS96AzW3w8iwUaSmtU3YpT4Gao= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=doyp7EFa; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="doyp7EFa" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3E222C4AF0F; Mon, 22 Jul 2024 19:35:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676955; bh=1jgdfRM0rWxjkBHjcFTDjH0KOPr1H9+0NK7hSE/rOyY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=doyp7EFa5rMkWXi71vTDHqsc0iLvW9g8TX7UEp/h4V3dBUnrwagk1r8utxvwm/CtC j9xltuuPG1BP8iID0f92fq5NefuSgZDKPg/wkfxSjwgg9E/MQs+yMb1zsr641rjyXI hV27VtZ+BNBoJRLRqnUgg8WdJqF9c2PGE+qX1qqHeELQZfVrb6FHUGjlE11YWeHEbA xcG35fKHaDE/qR1sRKzQk7DoYIbktbZ+lHfAvUEgQ4GBKe4s9MyIL/trvZJAkZDU0h ds3mz9uS8eJ3caUHQVgcL2S4PcNn7siC21A2oNbsT3+IyG5dMNlo3vUMa4abzbIRkG DuiHQNmpiDFAg== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:41 +0200 Subject: [PATCH mptcp-net v4 03/23] mptcp: pm: reduce indentation blocks 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: <20240722-mptcp-pm-avail-v4-3-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1379; i=matttbe@kernel.org; h=from:subject:message-id; bh=1jgdfRM0rWxjkBHjcFTDjH0KOPr1H9+0NK7hSE/rOyY=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSWbVwJTTxNfvAO4pJQEW06RervHaWzzIWvD OG4MEoEl0OJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lgAKCRD2t4JPQmmg c1VxD/99S9t7IQ4/YLHGJmYLpYod63LJTko5o1ZPCuLcdZftqbsxHNi6gfBel8jkN7n4WtvA3Yf ODyXJGo1GqBHP+khzsmT5mnm1B+d2lE3OiEOFYRZ/fYCZuSsAIPBt8Xnrg2pg+5RMC+F0Yh2YSJ fBJfWKN2jun6lwtg2on4atcnkU0cjOLjcmcYJlLWJnY7Tv1vlnsdkgmmPL8PMJ1jPA0CY1h/cRU x+vpMPGn1CKoGHUEEBEcsGkLoo2msZZdiaJD25K0mkmucW5qRsZGlGjKSs7rfbL+JEeC4w6suuB IvCqU0N6rKtGQ4rSUEgr2OlYBT0QA2iUYPoTQ3D5NCYBJylUG/RO90QwlPIa67WImwhntTwdIIg Bcw4V1VD3ULQhd+AGTs5HZsRfE56EOD0JuRCfBQ2iEMRh6FgARXICGRJAymHIIYPIqfbkuFeAMZ CvE2DkkuXB0r8rdt7TrmhXe061bJKfYhAc2vbbdHJI8TzalA0GjA826b1lc0SxWpIjUMsAbCDEd qo5A9bxPFvG0T6oEMnxdJwc4zmbV1VbrM7pwF4IKjiPp+TdSUTlryEZHSr5BqxIdLS+YUT6jhar tquh4Ld8wzdmQgTGEAHQQcnhaaMSLtL6/z46L8vQfitM6AX3xAZte6SjzT1iViw2ph/l1DoachX Z4qiJtx533/GM9g== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 That will simplify the following commits. No functional changes intended. Suggested-by: Paolo Abeni Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm_netlink.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index c44b0ae51cdf..adc0183b8d3f 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -568,16 +568,19 @@ static void mptcp_pm_create_subflow_or_signal_addr(st= ruct mptcp_sock *msk) if (msk->pm.addr_signal & BIT(MPTCP_ADD_ADDR_SIGNAL)) return; =20 - if (local) { - if (mptcp_pm_alloc_anno_list(msk, &local->addr)) { - __clear_bit(local->addr.id, msk->pm.id_avail_bitmap); - msk->pm.add_addr_signaled++; - mptcp_pm_announce_addr(msk, &local->addr, false); - mptcp_pm_nl_addr_send_ack(msk); - } - } + if (!local) + goto subflow; + + if (!mptcp_pm_alloc_anno_list(msk, &local->addr)) + goto subflow; + + __clear_bit(local->addr.id, msk->pm.id_avail_bitmap); + msk->pm.add_addr_signaled++; + mptcp_pm_announce_addr(msk, &local->addr, false); + mptcp_pm_nl_addr_send_ack(msk); } =20 +subflow: /* check if should create a new subflow */ while (msk->pm.local_addr_used < local_addr_max && msk->pm.subflows < subflows_max) { --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 770EE171094 for ; Mon, 22 Jul 2024 19:35:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676957; cv=none; b=LAQJYwGmiS2TFP2OQkm6NhP6E8+k9a/81eZo3wytYWSQkXPe3qMtb+Rinz7k6WUZJyPE2V9kIAzeBvqRqRtRaEhu4k4cYcA0uvOwzdpczAKzDjwYYycKr2Dr/2NksZN6qhy85kb/CDt46Kq5Ac0/+p2ugFFF9L6qd1gDAMVptQA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676957; c=relaxed/simple; bh=3bp0+EUTF1pd58//Srb/ytyXhrPRDQI38dewIb8zZ0I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HVyVvwRyAg4aoROE0AcMTPOPcFXacVKLnLCwWhnmmgJiGF7LJvcTIzIR7qlfrCpmeMQ73wyR5jnkxRVrI2XUgej8j+opmmPOAa4EQdn6OXrA/SjbDxiRNlnMIpKISthVfsRMA3JIbsAVnQLaEqp6mIHzkToyKzw5IVSsWkRuN6k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YNbuWlrR; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="YNbuWlrR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6347EC116B1; Mon, 22 Jul 2024 19:35:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676957; bh=3bp0+EUTF1pd58//Srb/ytyXhrPRDQI38dewIb8zZ0I=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=YNbuWlrRyo5Uyj9zNOwW0WVA/tikXUDh0XK62vlKwECB/7tgc12+XM+k6jmn7fBAG q5ypFd+NDOpma2HcpLX/cLAyX/2eASKQmKG23jbyJXfJHAoo0iRgYkKWG7dYoPUZDa zw7IwTLNunoOF5LfHefrE+ac5var+XrJCb3Ku2Vdz8rIY0bz1pQStvZgYqDKfSoszf 9JvcNErQJc7Y8QvqgnsASw4rfvfsnWYOBs/HE7LuyacfCMyFPaTJaR4DAaUMWa34mx ScsHNFnc95t1tWgNAGDP8wB5jAjjzhpbgBZUHDsLUdimlOi0k3qEtdCWLUG2b5PGNj 3xCDCaXP9JOtg== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:42 +0200 Subject: [PATCH mptcp-net v4 04/23] mptcp: pm: don't try to create sf if alloc failed 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: <20240722-mptcp-pm-avail-v4-4-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2161; i=matttbe@kernel.org; h=from:subject:message-id; bh=3bp0+EUTF1pd58//Srb/ytyXhrPRDQI38dewIb8zZ0I=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSWI3HG3wH+y11jUYGHOtc5Yz8etTEoOCc8e PbvIVZ/8lWJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lgAKCRD2t4JPQmmg c5FtD/9OmAgWtE/iViYQv9Nmq4CPf5Co7mWq2WOvOma7vnkqJmsnhmi6WNSbYMhDQh5+/Ngd+xo wGE1tDuxywbUHYmYIefZ9r14f8qAwWy7tbH9fknLP6/GJT/ODtOz5HrJBSvR4Ywb6WBix/Cw2Co cGp66CymUZeRmfF4Qp80mmWo9SQJCOQKDSfnJBgsy7AsI22LiqO4aa1VUIUpQNun1I77OolxiWJ OTHsMAJ9ECptlfknET7nfKyXLifPFMTGVkelcQaMQw4EnsAH1Hv0skY6kEMl5vgpEPpS6Zq/dG/ NQepZmH1Yy5hkh/lHQkmKqkkxqOK+gwcSbT9oUdaZmHGYvJyRNNhfBfTc8bjiIHhBhMFxksKd/W fCMzjYW/x2pE5Cwhpx/FYD2CL9gtdC2k3jF0D4X5LXGYuw1bCNO2DN/jZKAYJUmJ4we/31GARpy JhTiai4TgIm9SbmbAlbqrrOb8CpG/kz/RC8g8RDgCybFAGK0bQ0u4cqvyfRnPLcQFSZCeSjyJa/ VWhtVXe2bc3fB1Cp2FtMWkbjJP8kx59ppZpv3I3eZOhuMyFDeaZsyVjrwQaljf4eh5mUsnA72aI 6Vc01rF5cTZ40V/NtxK1Eew5BxAmomiVsVlEyJBpux287h7y7xW98B38jysNvLrp2l6e55JGzsH gHHr836XUME854w== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 It sounds better to avoid wasting cycles and / or put extreme memory pressure on the system by trying to create new subflows if it was not possible to add a new item in the announce list. While at it, a warning is now printed if the entry was already in the list as it should not happen with the in-kernel path-manager. With this PM, mptcp_pm_alloc_anno_list() should only fail in case of memory pressure. Fixes: b6c08380860b ("mptcp: remove addr and subflow in PM netlink") Suggested-by: Paolo Abeni Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm_netlink.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index adc0183b8d3f..0ca6b358ab51 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -348,7 +348,7 @@ bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk, add_entry =3D mptcp_lookup_anno_list_by_saddr(msk, addr); =20 if (add_entry) { - if (mptcp_pm_is_kernel(msk)) + if (WARN_ON_ONCE(mptcp_pm_is_kernel(msk))) return false; =20 sk_reset_timer(sk, &add_entry->add_timer, @@ -556,8 +556,6 @@ static void mptcp_pm_create_subflow_or_signal_addr(stru= ct mptcp_sock *msk) =20 /* check first for announce */ if (msk->pm.add_addr_signaled < add_addr_signal_max) { - local =3D select_signal_address(pernet, msk); - /* due to racing events on both ends we can reach here while * previous add address is still running: if we invoke now * mptcp_pm_announce_addr(), that will fail and the @@ -568,11 +566,15 @@ static void mptcp_pm_create_subflow_or_signal_addr(st= ruct mptcp_sock *msk) if (msk->pm.addr_signal & BIT(MPTCP_ADD_ADDR_SIGNAL)) return; =20 + local =3D select_signal_address(pernet, msk); if (!local) goto subflow; =20 + /* 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)) - goto subflow; + return; =20 __clear_bit(local->addr.id, msk->pm.id_avail_bitmap); msk->pm.add_addr_signaled++; --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F974171075 for ; Mon, 22 Jul 2024 19:35:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676958; cv=none; b=jdEsXuxDA8JCmgVXX7Z0MvpvpPx7dgR6oFOJGYg4Ojm0RxEt2jWtduVTSo1MXeynKjmbIIkVViSGU596ZSqrrzfPnzsKCiuoX/SLZwEMH5mfc4SLnrSzb5f6BdUqzg6dMCxvDxGs3PSm9LVRNnHlC7boItbKH7ST5tlbo6hCf1o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676958; c=relaxed/simple; bh=i77z9tOTtHs5P1x2DEPDtVt0aXpXalQv5SfvpCPktr0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PH9sYvk9bKYZZO5UWqNCOUdha6dbU5w7s78OoK3eAcqo3cVvqPN497GYgB643V1qFlcEORSZCGkX9VqUgw/s5PB2ZO8bcAjaACn+3KFgCs9aC3tQsvNwLUGeeNboKmgTmDn6W6kBY4P6fHLXjbLmNiJswS+cK+xLrk875v6OMTg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nURdAtAu; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="nURdAtAu" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 878DFC32782; Mon, 22 Jul 2024 19:35:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676958; bh=i77z9tOTtHs5P1x2DEPDtVt0aXpXalQv5SfvpCPktr0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=nURdAtAut6tqYlOyvulkH89MvPeJIHdTY4ZjXHej1c+1VK6ixAi5ETdGodo6LwDxU MBKAIyxFxfb/Reg444Sr92AgPLWt09Q9KqyJsYzJ+yJ1h0P172FDbZb4scZ6XajeBh GiUiXhe/P/yjQQN59dzXcwtVUKdOd5jZZxxaG7GFjrypeqgoDVYD2zDVayWEEuqkDy 1AVmstsoJBK3gX0k8sK6W44Y+/PtitdiqgIiSGxhZAvFIlupETSqJtQvrKzTfwVVsK 2WS63SUt5BDGibznPbgnFomgsrzYeHZLDuS7/bUqCXKRTOwWU5GIuRhnHK3YfS89nP H+vMX+iP96BUg== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:43 +0200 Subject: [PATCH mptcp-net v4 05/23] mptcp: pm: do not ignore 'subflow' if 'signal' flag is also set 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: <20240722-mptcp-pm-avail-v4-5-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3907; i=matttbe@kernel.org; h=from:subject:message-id; bh=i77z9tOTtHs5P1x2DEPDtVt0aXpXalQv5SfvpCPktr0=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSWaSlbtn4B5z6prUN7sJ2CH6mZoWIJU/IYS uG3LKyk302JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lgAKCRD2t4JPQmmg c1e0D/95JNZBoby9qYG8gSt8HQHshyFSIG9b4FfwY4HTPRNV07dFzn/FWZtlqzbdWEq08zanPIC sbIkjLfpCRC4X6uqndcofJac8tbbA3iiHaSgt7QcQFZqK1D5WVQ6sBjmy/ZUbX3C/7GvsctKnav pvecYgARTkKRurCJcwH+SodwYY9PaSb4C+GP5S6Nt54sxtZ7qQpGfrUwIUR1dOH8AhnoVDqtimP uIPwKd8SN2XONMGFoYeK5f+ZhvqxkTJGbjQgWcpkfWX3zI9pDq/yb3njuxB+Xo7q2wIORf9eu5X CykZxREKAIZoRFRR2FbVBgOIC5oLtMbyDuZ5yz2uQCXvp9sBG9slz1BfJka4lX5AepWiRu5GF8g 0AywlMyJzZ66fhqFUoBhIbMxAYY52LWXO/NDZMAYkTamqgMHscTRSbwWZpY+6wVfYVkkA2W+p9q 68tysdWAD3UqUAw1u05Fj2MDsuEJDf6slwc+s3FauspeQGA55lFOC5vPh/ou6czjbbN0z2XxgHA P4lg6ME04vlkC2ZFNsBEKU+xTJ36FNFbumnkOPGTuljnkeeOcyIrCS5A0dWp5PiciPUNTBDIIYo mJQtXFPWPtWkTSG9hNiBviQPkzb3cbUEe/jya9U03vEAVTxorDb2pNC14f8S3KebqcipKm52PHB XNG+cL0N6L4f6yg== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Up to the 'Fixes' commit, having an endpoint with both the 'signal' and 'subflow' flags, resulted in the creation of a subflow and an address announcement using the address linked to this endpoint. After this commit, only the address announcement was done, ignoring the 'subflow' flag. That's because the same bitmap is used for the two flags. It is OK to keep this single bitmap, the already selected local endpoint simply have to be re-used, but not via select_local_address() not to look at the just modified bitmap. Note that it is unusual to set the two flags together: creating a new subflow using a new local address will implicitly advertise it to the other peer. So in theory, no need to advertise it explicitly as well. Maybe there are use-cases -- the subflow might not reach the other peer that way, we can ask the other peer to try initiating the new subflow without delay -- or very likely the user is confused, and put both flags "just to be sure at least the right one is set". Still, if it is allowed, the kernel should do what has been asked: using this endpoint to announce the address and to create a new subflow from it. An alternative is to forbid the use of the two flags together, but that's probably too late, there are maybe use-cases, and it was working before. This patch will avoid people complaining subflows are not created using the endpoint they added with the 'subflow' and 'signal' flag. Note that with the current patch, the subflow might not be created in some corner cases, e.g. if the 'subflows' limit was reached when sending the ADD_ADDR, but changed later on. It is probably not worth splitting id_avail_bitmap per target ('signal', 'subflow'), which will add another large field to the msk "just" to track (again) endpoints. Anyway, currently when the limits are changed, the kernel doesn't check if new subflows can be created or removed, because we would need to keep track of the received ADD_ADDR, and more. It sounds OK to assume that the limits should be properly configured before establishing new connections. Fixes: 86e39e04482b ("mptcp: keep track of local endpoint still available f= or each msk") Suggested-by: Paolo Abeni Signed-off-by: Matthieu Baerts (NGI0) --- Notes: - v2: re-use the same bitmap instead of duplicating it for each target (Paolo) --- net/mptcp/pm_netlink.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 0ca6b358ab51..2e94f2a9f2a6 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -513,8 +513,8 @@ __lookup_addr(struct pm_nl_pernet *pernet, const struct= mptcp_addr_info *info) =20 static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk) { + struct mptcp_pm_addr_entry *local, *signal_and_subflow =3D NULL; struct sock *sk =3D (struct sock *)msk; - struct mptcp_pm_addr_entry *local; unsigned int add_addr_signal_max; unsigned int local_addr_max; struct pm_nl_pernet *pernet; @@ -580,6 +580,9 @@ static void mptcp_pm_create_subflow_or_signal_addr(stru= ct mptcp_sock *msk) msk->pm.add_addr_signaled++; mptcp_pm_announce_addr(msk, &local->addr, false); mptcp_pm_nl_addr_send_ack(msk); + + if (local->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) + signal_and_subflow =3D local; } =20 subflow: @@ -590,9 +593,14 @@ static void mptcp_pm_create_subflow_or_signal_addr(str= uct mptcp_sock *msk) bool fullmesh; int i, nr; =20 - local =3D select_local_address(pernet, msk); - if (!local) - break; + if (signal_and_subflow) { + local =3D signal_and_subflow; + signal_and_subflow =3D NULL; + } else { + local =3D select_local_address(pernet, msk); + if (!local) + break; + } =20 fullmesh =3D !!(local->flags & MPTCP_PM_ADDR_FLAG_FULLMESH); =20 --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DAFE917108C for ; Mon, 22 Jul 2024 19:35:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676959; cv=none; b=YhJyHmMEnXO4yfANZEDam8LsbVi8odHHDKzZZav3cI3f/7FEoyeD6P0kABQjVsXZRNf54RJP9lVM0eJ6IbGdMj8gwks0q/TCI+PpEvmUsvF12r0OHhBih6M3OuwhDuoCsrtOKTOsXclz2Fb4M9fKIZy6+7oRAK6jnQV+mP6nvDU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676959; c=relaxed/simple; bh=NAhjnJLuFDq3Qif5cnScKlPlgz1s2euUXNeowcShoi8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uWPlT3gtvKdJxceDeq6XqjRsy4V30BbVQgT8S9J+GifLeZxbUT1cEPTE30c+G44FlNhXxPQUWheltK5MkY2oi0CL/KEkUjWfIQ9Yx27SQewQU91mHM54itdokWk1y3QkBr+wZkmMJ/yl/EQmGQH26JV3hiKNSZbAPys/ns1Q/8c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NYhYRrFx; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NYhYRrFx" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B131DC116B1; Mon, 22 Jul 2024 19:35:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676959; bh=NAhjnJLuFDq3Qif5cnScKlPlgz1s2euUXNeowcShoi8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=NYhYRrFxsccEQqC75QNr5YKt73/PyM6amyJ/jcGEywBSDaF3chSx3N/ADWJYuNe6N 5A3YwZaHuf2EACjRb+MCPsRo/e3G6/lsAPFb+wKH3TlsAIBIMpzaXQfLhayUIN1fcf ZA/4wPhW7O6zcNevFQIJXJ9+FKR5Mdmowl2UC4+m/RPsVU2odQWHho16njU4xOMRVW RttznnyK2ou/58SRxpRMSOw2kKUZ2LHtHo3J3ggq3yvWmFpZUO5H/Uf1QF9kYSX0LD TJlkPv02tojQtMM3hApDQH2xXCuOHSguo8grmlU//1B27+5aT2fmffyKJz0i+CvxN2 k14kwKKEqX9tA== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:44 +0200 Subject: [PATCH mptcp-net v4 06/23] selftests: mptcp: join: ability to invert ADD_ADDR check 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: <20240722-mptcp-pm-avail-v4-6-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=4285; i=matttbe@kernel.org; h=from:subject:message-id; bh=NAhjnJLuFDq3Qif5cnScKlPlgz1s2euUXNeowcShoi8=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSWQJaCzPBLmHQT98HKWxhIuoyGSq39Fvzcv MEzRPtJW2WJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lgAKCRD2t4JPQmmg cx3fEADIpoPPu7xdtdsCweGir/5NOQi1uC4fo4ID0U4X0FfvWJZGTBraNx69uHDcRc1VGsx6pn7 evbnXIIoInx1LVLaMYWVGMEtiM+xHWyGn0LeZheqXbbOeY+ufmaTv7hUaUtbSzjBlY7i5GwY/hp n/zl3iVqfo64v8AfmOndfLaQBsP0iKGUjj/hC9zNF/xQy7NaRDAG+Kxco6qdKEu3G72cTMIfc7z uyPQQalwSCkpParXc+g4RWRgxKp4UbvmfMHJ3SBhvVXq0oHDWrRctyh1ANbpd56+EYoKOge1reb USZ1deRE5cVjUpbMauso2Wfk0HgFc8o51yCzYk5vUk6AzFY7fedYVGcO9E7nFl3UUVrdzz/Cchx b4PNtBNgBHD2Y1ELmxtwr21995dU/YForcPXuMfwOduzUKYZb0GqRAYxfnehCdrxAnUSOovy8Ql XNC4VaodmtebV04Gt8Ju6ojb8xBcgXkFS+YCBGJPnXKZ2/1sKfOr7Rf90i3T1RgUF4SNAtuJBYt 7y8LhKC0HiKwsDVYHv7OPkqJk2MVZrF38SyIcdrTvmam7ue5IdxLTf+cy9liEOMwkYYFoOkCfVr 4NKNQwsmq8uPXaAWQd1L+nNZcDcrOX60RbPp17Fmz1i7IZCN0gTsP/vy2rjgOBEULj87wFIPyo3 r0rLmglHUHQgmEw== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 In the following commit, the client will initiate the ADD_ADDR, instead of the server. We need to way to verify the ADD_ADDR have been correctly sent. Note: the default expected counters for when the port number is given are never changed by the caller, no need to accept them as parameter then. The 'Fixes' tag here below is the same as the one from the previous commit: this patch here is not fixing anything wrong in the selftests, but it validates the previous fix for an issue introduced by this commit ID. Fixes: 86e39e04482b ("mptcp: keep track of local endpoint still available f= or each msk") Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 40 ++++++++++++++++-----= ---- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 55d84a1bde15..55ccc4fdf18a 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -1415,18 +1415,28 @@ chk_add_nr() local add_nr=3D$1 local echo_nr=3D$2 local port_nr=3D${3:-0} - local syn_nr=3D${4:-$port_nr} - local syn_ack_nr=3D${5:-$port_nr} - local ack_nr=3D${6:-$port_nr} - local mis_syn_nr=3D${7:-0} - local mis_ack_nr=3D${8:-0} + local ns_invert=3D${4:-""} + local syn_nr=3D$port_nr + local syn_ack_nr=3D$port_nr + local ack_nr=3D$port_nr + local mis_syn_nr=3D0 + local mis_ack_nr=3D0 + local ns_tx=3D$ns1 + local ns_rx=3D$ns2 + local extra_msg=3D"" local count local timeout =20 - timeout=3D$(ip netns exec $ns1 sysctl -n net.mptcp.add_addr_timeout) + if [[ $ns_invert =3D "invert" ]]; then + ns_tx=3D$ns2 + ns_rx=3D$ns1 + extra_msg=3D"invert" + fi + + timeout=3D$(ip netns exec ${ns_tx} sysctl -n net.mptcp.add_addr_timeout) =20 print_check "add" - count=3D$(mptcp_lib_get_counter ${ns2} "MPTcpExtAddAddr") + count=3D$(mptcp_lib_get_counter ${ns_rx} "MPTcpExtAddAddr") if [ -z "$count" ]; then print_skip # if the test configured a short timeout tolerate greater then expected @@ -1438,7 +1448,7 @@ chk_add_nr() fi =20 print_check "echo" - count=3D$(mptcp_lib_get_counter ${ns1} "MPTcpExtEchoAdd") + count=3D$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtEchoAdd") if [ -z "$count" ]; then print_skip elif [ "$count" !=3D "$echo_nr" ]; then @@ -1449,7 +1459,7 @@ chk_add_nr() =20 if [ $port_nr -gt 0 ]; then print_check "pt" - count=3D$(mptcp_lib_get_counter ${ns2} "MPTcpExtPortAdd") + count=3D$(mptcp_lib_get_counter ${ns_rx} "MPTcpExtPortAdd") if [ -z "$count" ]; then print_skip elif [ "$count" !=3D "$port_nr" ]; then @@ -1459,7 +1469,7 @@ chk_add_nr() fi =20 print_check "syn" - count=3D$(mptcp_lib_get_counter ${ns1} "MPTcpExtMPJoinPortSynRx") + count=3D$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtMPJoinPortSynRx") if [ -z "$count" ]; then print_skip elif [ "$count" !=3D "$syn_nr" ]; then @@ -1470,7 +1480,7 @@ chk_add_nr() fi =20 print_check "synack" - count=3D$(mptcp_lib_get_counter ${ns2} "MPTcpExtMPJoinPortSynAckRx") + count=3D$(mptcp_lib_get_counter ${ns_rx} "MPTcpExtMPJoinPortSynAckRx") if [ -z "$count" ]; then print_skip elif [ "$count" !=3D "$syn_ack_nr" ]; then @@ -1481,7 +1491,7 @@ chk_add_nr() fi =20 print_check "ack" - count=3D$(mptcp_lib_get_counter ${ns1} "MPTcpExtMPJoinPortAckRx") + count=3D$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtMPJoinPortAckRx") if [ -z "$count" ]; then print_skip elif [ "$count" !=3D "$ack_nr" ]; then @@ -1492,7 +1502,7 @@ chk_add_nr() fi =20 print_check "syn" - count=3D$(mptcp_lib_get_counter ${ns1} "MPTcpExtMismatchPortSynRx") + count=3D$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtMismatchPortSynRx") if [ -z "$count" ]; then print_skip elif [ "$count" !=3D "$mis_syn_nr" ]; then @@ -1503,7 +1513,7 @@ chk_add_nr() fi =20 print_check "ack" - count=3D$(mptcp_lib_get_counter ${ns1} "MPTcpExtMismatchPortAckRx") + count=3D$(mptcp_lib_get_counter ${ns_tx} "MPTcpExtMismatchPortAckRx") if [ -z "$count" ]; then print_skip elif [ "$count" !=3D "$mis_ack_nr" ]; then @@ -1513,6 +1523,8 @@ chk_add_nr() print_ok fi fi + + print_info "$extra_msg" } =20 chk_add_tx_nr() --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F15AB1C695 for ; Mon, 22 Jul 2024 19:36:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676961; cv=none; b=rhjPx13utKVmfSt74/YEtAhNIo6XeTOnPcit6CvQmw7ujnXygaSuUgPHZvuzeO0H2Mah3rtFQFxtngDpHYmGnLGFrY/hlOaZoTjGplKlp9oW3BPqEDDo5jNctQWmzCCF65AcyVI8sv47yKwJwnLJnQYWl+MtuVFdKUBMYSfuOFQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676961; c=relaxed/simple; bh=Uk5krQmua1YGk0ItymKu1THhzRWDba0Om0yojxoq1YA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nRYx75Otj2YSZ6CDID954+b4a+6Lgs6Gybkv6SOYOMhe7JJEaRU837GIDEzGFr24sBrbF5Mq7iHjmMuaqQjB4JsdavEgaC+SJous2sAUwTP0aq1p6RQCZBMBdoHQ5fYFtT0otuayGMwjDuiZqMeDoPztT+v592XryauRvV3Q19I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=uKoqFcmO; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="uKoqFcmO" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D8086C4AF0B; Mon, 22 Jul 2024 19:35:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676960; bh=Uk5krQmua1YGk0ItymKu1THhzRWDba0Om0yojxoq1YA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=uKoqFcmOj0uopwdhZA7+91FoCb9bnsESnz/+bYAPbV3tAM+ljQVGZfiRtB2LQSDja GygnEuCdPLZFMhtd98aU5fCrFWJstrM/Wx8+OKppnc4wnym0nH5B72N+lHuymbqRMC Z1q35skITFZk4SKYyE4HZz0WvyO+PQ7GcHIFhQfE88St0P2CiFB0feSZQAd8GtQ4Xp kDzxgIzdUIvV9B8g3wHwXzn7ragTRS178YMbi90h6kAb95IMKrrH2Ee+VrqQSYiQ7b WCRQadmfPFnIyqIKuwNinEYVKWlG+eLWoc3vY4o2AbBPN4HbzHWaclQlaXKVKReBps uJ5bPSliqfguQ== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:45 +0200 Subject: [PATCH mptcp-net v4 07/23] selftests: mptcp: join: test both signal & subflow 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: <20240722-mptcp-pm-avail-v4-7-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2396; i=matttbe@kernel.org; h=from:subject:message-id; bh=Uk5krQmua1YGk0ItymKu1THhzRWDba0Om0yojxoq1YA=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSWY373muf77UYBGSu0c34T/3Ko6zzLt+tEi G5wYAVKOvGJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lgAKCRD2t4JPQmmg c0+lD/9uTqan4PJu24SAzLruuNXNlY43/EljFn738awLB1+kkmvln/1KoXCvwdCqtOU8HwyRaZh UtP0YLY0+UtVo3bPiMM3Zv4rpU6Ssz3KTsD5oXp4Mt5lBbnB4Bu8uocz1LuaFGJOr1p7l3Y0qLD HCd+VDy4SJY9PmVMuTedMqj1i0+9gm1JH8/R4r/xi4g64Y3USpwqKVKug4XoNAiIiPIl9t25FSU q7SyB9zgtot0mWKH4c/hcKgLxlBzSo3vnp6XE9Gm706IRihn8T9OBsl+/Ex+XeR6KJK2XOHBhpv XPtgQbMwkC2KAcOBhlFrQyXPZfEn80RvZCql/DtFktqpoCLEmUeUPIK7NEE/eVeo2UcJL7XtB2b Sl7/5gnwn5UWYmwufp24F1mqhuMGy6hdzsquDN8l1kuI2PIj3HR88hM48BvUMzPcdT8I2CZNFbA BjU5pHYBrDRpR21VCB7UOL1lz7Hf9iZLP2US+NO0lhOOHi8M9JsV13Uhf18XyfvI4U/T9Df718J 3w67e2QuenQjcajWFc6bP1Q86gM0+n27JdGZ3T6dMpWqWUAdf0NEY89nyZDGU5MODyqpaqzI/Zx QuLCsWFl1vkgb4ZHBZ9HirURh8gDTumYdqAb0UYo2ELo8kkQiOBAgf0FvYJtkPBTk9oYvGKXy6W 3oTsVDBbnHMJGLA== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 It should be quite uncommon to set both the subflow and the signal flags: the initiator of the connection is typically the one creating new subflows, not the other peer, then no need to announce additional local addresses, and use it to create subflows. But some people might be confused about the flags, and set both "just to be sure at least the right one is set". To verify the previous fix, and avoid future regressions, this specific case is now validated: the client announces a new address, and initiates a new subflow from the same address. While working on this, another bug has been noticed, where the client reset the new subflow because an ADD_ADDR echo got received as the 3rd ACK: this new test also explicitly checks that no RST have been sent by the client and server. The 'Fixes' tag here below is the same as the one from the previous commit: this patch here is not fixing anything wrong in the selftests, but it validates the previous fix for an issue introduced by this commit ID. Fixes: 86e39e04482b ("mptcp: keep track of local endpoint still available f= or each msk") Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 55ccc4fdf18a..d25ac561e050 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -1967,6 +1967,21 @@ signal_address_tests() chk_add_nr 1 1 fi =20 + # uncommon: subflow and signal flags on the same endpoint + # or because the user wrongly picked both, but still expects the client + # to create additional subflows + if reset "subflow and signal together"; then + pm_nl_set_limits $ns1 0 2 + pm_nl_set_limits $ns2 0 2 + pm_nl_add_endpoint $ns2 10.0.3.2 flags signal,subflow + run_tests $ns1 $ns2 10.0.1.1 + chk_join_nr 1 1 1 + chk_add_nr 1 1 0 invert # only initiated by ns2 + chk_add_nr 0 0 0 # none initiated by ns1 + chk_rst_nr 0 0 invert # no RST sent by the client + chk_rst_nr 0 0 # no RST sent by the server + fi + # accept and use add_addr with additional subflows if reset "multiple subflows and signal"; then pm_nl_set_limits $ns1 0 3 --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CF1031C695 for ; Mon, 22 Jul 2024 19:36:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676961; cv=none; b=OgmjV4fNKqj4NMtMFVjm5g029c12JnPWZC6FxsBiedPu1mh/PlbbIQO8yw1N/KTzr8axF84Xr9LiLhp4gto629WucnJBfU/v7Wl9uYx4oUHjducqAnocq3XZ6qri0CBkeW3+H9PQQ1yIs+WM75Fit9IxxZ6s59dhzLVHVoAqILE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676961; c=relaxed/simple; bh=2I6vmk+jwCRqxKwCtsRxnsAvhqqiS5h3MAqfuPR50Z8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OOt9kHxbqWL2JmQGHGh+irM/9c9VSLJRyiBUxXx2lDcqEBauQsJaI1VDirIjjMeFlfkAKqpGNCEQSV5OM5mI0qBsGmNOxy6Y79fqsZDYLtHXvlZppFw67fWvHqr6Gc8sbplDiDtqTMGfsaztUv1qMXX9bCMBPXxT96zKprgllIg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SD/xhwwF; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="SD/xhwwF" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 088FAC4AF0D; Mon, 22 Jul 2024 19:36:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676961; bh=2I6vmk+jwCRqxKwCtsRxnsAvhqqiS5h3MAqfuPR50Z8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=SD/xhwwFjeDRIPG3dQqGIlaXzkhUJTKV3YmZWrCdAKWzFmVl5BSmTSG1cLyOepRgP 3EV1ZoISh63QrNd9QA4pbMU2m0zD1PrUf4ZUwlqGAdjFLqg11TBT1vQpQFQmcUPb4R m5yJWhhPBHGCT7Ib6Db8fLhHLBWwEUxVQItHYbkwvhy12xfOWuMuJ9lNpeFh+3Kzcf TWVItxUy79cmhWZiiAPe7Ef1zC080Wl+/WQIBoZC9i9wKVNaT9WHWdeSzQVEF7Cc5m zArTcTYjRpQmJ8g1TeI2hAkGqly6t0GABdqapo1/VIkI6njboqR0R+w0X6Ut8vB1S2 BKwIdnQKZeDhA== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:46 +0200 Subject: [PATCH mptcp-net v4 08/23] mptcp: pm: re-using ID of unused removed 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: <20240722-mptcp-pm-avail-v4-8-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=995; i=matttbe@kernel.org; h=from:subject:message-id; bh=2I6vmk+jwCRqxKwCtsRxnsAvhqqiS5h3MAqfuPR50Z8=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSW53GFqDNXAWlmi5aoRcjjpfvv++NaL1eZX dSjLUDXruyJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lgAKCRD2t4JPQmmg cwwFEADD92YSdgEuD54EvxFIV/imGE4ZuNbTq4Rf4KZu3h6W+jwV+JnPr9YtYo33FriRe9fipuT oMU4P6/NkIm+y1q+RzlzKnq3DFUwxnb/62Zgv6gIfwkmSM0se+Kk1eZ2rsFAAnXaBrO5/rUdx2r j1+aerJoBn++eWn4hAYV4wwGmhX6FjWeNXUw4+9RO+nFfVNVb6/EcF69HwB1VlO3v4/tL7/o7lC U/cwsE+Cjro/e1luH2t+WN1YkxKGQcFXub+IW32yUsBCpItHCbA9wAIfPgkCaiqQ8rPN8eV2VDS kgxXUGcuzbARBWBgi2skbb2O1muqXhO9Jd5JsmtjZpz0jZ8Liwv4OefuBb78f6kmJguRhsj8tR2 oJ4Gx4Xo2+XeaWIWvssiM8/QwTTUr9e/b9LR8s+hg/2hVQTeblMRAICXqtTPOy5Vk5Ii79AiBGl lH8ITCpAQRBF209CszjzI/gMZflbRbkv7ao+jZEWsnpIFtwEJGK3Lh2GmwvKsj15Fp/Nn88SpkQ 3fepI+EBOkEakWXshTVfWFJl0fuZm4Qjkc2fEscpyktYSIsQUEdMdIQ5ye+NC5X1SqRzY36jgop IxEO1Pplb/FsMNrDT8rhhyzrXQN+cLzVx2PRfCs9g8H5HQE7rzP5XyGd6pXSBSY+WQ3O9vmP/vl aX9ToFNCbiObtgw== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 If no subflow is attached to the 'signal' endpoint that is being removed, the addr ID will not be marked as available again. Mark the linked ID as available when removing the address entry from the list to cover this case. Fixes: b6c08380860b ("mptcp: remove addr and subflow in PM netlink") Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm_netlink.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 2e94f2a9f2a6..d44d318dce03 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -1394,6 +1394,11 @@ static bool remove_anno_list_by_saddr(struct mptcp_s= ock *msk, =20 entry =3D mptcp_pm_del_add_timer(msk, addr, false); if (entry) { + spin_lock_bh(&msk->pm.lock); + __set_bit(entry->addr.id ? : msk->mpc_endpoint_id, + msk->pm.id_avail_bitmap); + spin_unlock_bh(&msk->pm.lock); + list_del(&entry->list); kfree(entry); return true; --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0689E171090 for ; Mon, 22 Jul 2024 19:36:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676963; cv=none; b=c9iAsivdakpbVrcoVv/Z1YZXswNaWPzEXQh/XQkuoGCpylc5txWHDQtHx3Ug5whujqGWsZqghn6wU0pfHWYEojkVVQxnVtsNsDsjLQahqvgSgEFUfo2pPbmd2wBXiVZrQXEGgS8XZyZyZI2WjxnElRX5t/ywn7PLX7T+JRURw5Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676963; c=relaxed/simple; bh=IZLmMEPKaTI0ecetyxX+ZJUmzHaA8vdoxLN3U+l3uKA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kDZOC2gqt/RUPDZlQGmbKXqbDNHpkBkzTfObeujPgt/z9fjTQE68OqOAAioQfS8PBbDU9IdZGeHGIuV7nwZ03iKI4XGsFnSDK99eOcwCTzWlrnR8ul1DVzYKCAHRDO5QgbFxnDa9k2mLsuOcuCUmoPk33gkKBFrFwoZ6t60N2Vg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bvi9iRsu; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="bvi9iRsu" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2CB3CC116B1; Mon, 22 Jul 2024 19:36:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676962; bh=IZLmMEPKaTI0ecetyxX+ZJUmzHaA8vdoxLN3U+l3uKA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=bvi9iRsugGg3NExhpAd7Y9D74JmevqS5rdV8wAylUnOpxX+vyiXJEA1AUx1XbsR7M lZQpPWatSCaxVSMuX1Z6YQb4UZcokRlHWa2EAxN36nLn6Q8TyrJsPtAA7c881ZxqxM ceHL1q5a1H0Nq367zEmCAoKvKTMSN5Cu7CDfk7RKfbxi1oAhzo8C8AHyWMRhS2HvNR igFJdhmn0g8XL0Efwe50xim/pOKqEqOqr1WW3/N3mJVDNnsmyvvo4cKMpF+mwl/ESU qVjJcy79PrnEXTx7l9LDbD+DymNreSk5sTjErlQQlElcwktGbEMcG3djp1zqS8S511 n/4La4GNtvzgw== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:47 +0200 Subject: [PATCH mptcp-net v4 09/23] selftests: mptcp: join: check re-using ID of unused 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: <20240722-mptcp-pm-avail-v4-9-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2591; i=matttbe@kernel.org; h=from:subject:message-id; bh=IZLmMEPKaTI0ecetyxX+ZJUmzHaA8vdoxLN3U+l3uKA=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSW/qVU9UZDJVsgMKbnetGmFxupq/61f/SYi 8tAkP38rMCJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lgAKCRD2t4JPQmmg cwtVEADJ574dkS/kW1vqBuziRxs5gYCi17bE+l50JJTSnwoh2D2tqeYPmxCgMX1tZ9Mk2J/uUV+ s/23yjINqVSLogooHA2HvSJ06/1wFWTfzNQSgHCVKjmGVeo/nhoiOGKMFqrBbdKCOniz0xVP+6T NcUy594bQ0PP933mDfctkLrjv+C1KFTTBMSNMed/WICg/HhpPV8JKx4Yr5/11FA8GWYJwVEA76l ftvY3/i9c2JOV+0q7yGtjLaCvVYTKkxXym6lKr/hxiahY08H2NomRtIcz6hkv5/ZdHoNerErAit f2Q8gQ90BD0SR/BdZ5rNQKMRtFCwjQ+v2eJb3Fugr7lPoT+UbuBYvAwkNTY3h+RoZylizx6mMah VOIbBdsovxXQGt776RBKAWRNvkfhLuuHJWTIfq6j7P+XTp/7XgtcttfuCOX4XEPNquyR7qjJ2Jr ghUYFbHLsFrUw5IpjjfXZ/qAdIwB+L79Hmh6+kdAAVilKXoRRfsQ2q9yvNz6JSCaKYbCwt8PYET zz0KyG4G96IVM+AqCB0suJjuahsOYq720CGasucAbFjuaqWpXgiHT2CTTIzabO+0778JQAu4BSq FhTAn2n8ytLxaAEDRUDEsirWh+BORzoXsqKBi+kseoIR4vsG04Breb4RKGiUgFoieORvWxupRKY Zxzepl7XJ6V/m0A== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 This test extends "delete re-add signal" to validate the previous commit. An extra address is announced by the server, but this address cannot be used by the client. The result is that no subflow will be established to this address. Later, the server will delete this extra endpoint, and set a new one, with a valid address, but re-using the same ID. Before the previous commit, the server would not have been able to announce this new address. While at it, extra checks have been added to validate the expected numbers of MPJ, ADD_ADDR and RM_ADDR. The 'Fixes' tag here below is the same as the one from the previous commit: this patch here is not fixing anything wrong in the selftests, but it validates the previous fix for an issue introduced by this commit ID. Fixes: b6c08380860b ("mptcp: remove addr and subflow in PM netlink") Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index d25ac561e050..b4dc5f2772dc 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -3557,9 +3557,11 @@ endpoint_tests() # remove and re-add if reset "delete re-add signal" && mptcp_lib_kallsyms_has "subflow_rebuild_header$"; then - pm_nl_set_limits $ns1 1 1 - pm_nl_set_limits $ns2 1 1 + pm_nl_set_limits $ns1 0 2 + pm_nl_set_limits $ns2 2 2 pm_nl_add_endpoint $ns1 10.0.2.1 id 1 flags signal + # broadcast IP: no packet for this address will be received on ns1 + pm_nl_add_endpoint $ns1 224.0.0.1 id 2 flags signal test_linkfail=3D4 speed=3D20 \ run_tests $ns1 $ns2 10.0.1.1 & local tests_pid=3D$! @@ -3571,15 +3573,21 @@ endpoint_tests() chk_mptcp_info subflows 1 subflows 1 =20 pm_nl_del_endpoint $ns1 1 10.0.2.1 + pm_nl_del_endpoint $ns1 2 224.0.0.1 sleep 0.5 chk_subflow_nr "after delete" 1 chk_mptcp_info subflows 0 subflows 0 =20 - pm_nl_add_endpoint $ns1 10.0.2.1 flags signal + pm_nl_add_endpoint $ns1 10.0.2.1 id 1 flags signal + pm_nl_add_endpoint $ns1 10.0.3.1 id 2 flags signal wait_mpj $ns2 - chk_subflow_nr "after re-add" 2 - chk_mptcp_info subflows 1 subflows 1 + chk_subflow_nr "after re-add" 3 + chk_mptcp_info subflows 2 subflows 2 mptcp_lib_kill_wait $tests_pid + + chk_join_nr 3 3 3 + chk_add_nr 4 4 + chk_rm_nr 2 1 invert fi =20 } --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 292F717109F for ; Mon, 22 Jul 2024 19:36:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676964; cv=none; b=sNJkRPZxKnXTU26x5QqwG4bttGwfXC0STvyEZaTmXGLsQWGtCUVPXKhokL8duXdsqpsXjlRETvcDq12q+QiqmzuT8s5U2Sy+qzjy0qJ+4MM5rtEXeE1VsVdgX0ETNHbdCydj+xXHOlqX5vKeShz5a1bbqC3ddvfeUaeRvv5GxEQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676964; c=relaxed/simple; bh=oSnmMLYCpUNY0er7kFjeah3ZncChkhJj3qmtgH+CoJ4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Vqa6OXZGr/e/1ZJLOb2bY+ka+FqBOGx+8CYIsVHwtVCIxYgHJcECOCok6VKA7poTQ1w2bSZA0MH2bMJ5QUNbMqTvwzCe5GgkvClYGRmka33q8U+Y9H7XghxF6Mu6m7Auqtvg7EhQESmUFx1ROeuxSz2ve5q9ne8I239rGp3uJwQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hMaIaH8l; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="hMaIaH8l" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 51E38C32782; Mon, 22 Jul 2024 19:36:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676964; bh=oSnmMLYCpUNY0er7kFjeah3ZncChkhJj3qmtgH+CoJ4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=hMaIaH8lPO/hnlr+JRiy6k9WNFYIDPpjJ0YmFBf1CgwbbyZCSitx18EIRqKAPFaQ0 1rrsFqTKfL7BMHEf4DtqWt12kamBCr+tYsJaYCYaokMQAhjdlPNgfbrHJXAnCwF110 TECTO1snIAVeyR1f1rLjV9JKbegSFZBpyiGqUcDZFewOQALo0mZsyD023g8YEswkx7 NfgN7oG1nVcly6LllbNhJ6byc+jcPnZkvZ/cSrB9pUW3WPBZ+qk6fDhScn/IdnCaFm vk7X1yCaF7bxzGvj1kXraaa9xK4iyyOfvy+6WzvF13Xp4yvEh8fLggnidkllSfASsq a8DP5LuEcjsuw== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:48 +0200 Subject: [PATCH mptcp-net v4 10/23] mptcp: pm: re-using ID of unused removed subflows 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: <20240722-mptcp-pm-avail-v4-10-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1606; i=matttbe@kernel.org; h=from:subject:message-id; bh=oSnmMLYCpUNY0er7kFjeah3ZncChkhJj3qmtgH+CoJ4=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSWpn36hFrbu0NIyss85jyxA5/wzGWRaUxIs gfoLonNIKCJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lgAKCRD2t4JPQmmg cyHaEAC6hlOLFlG4e9ccQdmufi87zQxqhuUcwMVebM2o3L9uQzVSi+ct334Y/0okkJMRoiagdDt 1amrQfGkfL74e3S485DycFwBHu/d9pR3WloHjWv9VmuBAlSCEB3u17e2J8aCvaA7rKv1oqQfC6F gq44YOTCXAYiImKpfMMu5eMH3COqfPv7ObYEHamnyEllm9IcEw2/Ty/IcUjz38IPQwS/DXOR9Ue fc+BTJDrp/XeQbtyDBvygMtkjZtxJBDiA1LBatevFOCYqHj1OfizsJAKNhX2OgVAfG6EAlKllYs D7LbvH9oeN2AOK8b82cEzb/SgI7+vam6aw96wV5bLfghELoW3P9FWoG46YTDxXSWxu/W285VDOU uMlLnlZThJztRkLXGjOfvN+CTTzR8YOselkO1jNuUdX5xvDzInxw/0KTt63ZaXoDbb+AoMlhido +HQhhyMGgTjPTpiNtRvgD5LT/gaX/C9Fx+AEeUx0ixrxniViMv9yAzPPzwLDZ7/f6xD9pBSOjB9 T5svXWycaKXiVxZSjc9EIa4EaAqVGCIe4fo9y8GVuOJxDJaMGPCnVgobwRCy354e/tfn4r7Nd4M x0TQFGQV8Q+Gqfi+lpFWeBQ/ZNZs9MuQd/B2FDpaGi0NpGmJcyoSrxX83DXDrLqjJUccHzFtT6J 7CiAmJTeWeXxahg== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 If no subflow is attached to the 'subflow' endpoint that is being removed, the addr ID will not be marked as available again. Mark the linked ID as available when removing the 'subflow' endpoint if no subflow is attached to it. While at it, the local_addr_used counter is decremented if the ID was marked as being used to reflect the reality, but also to allow adding new endpoints after that. Fixes: b6c08380860b ("mptcp: remove addr and subflow in PM netlink") Signed-off-by: Matthieu Baerts (NGI0) --- Notes: - v3: - Add new line before 'if (remove_subflow) {' block. (Geliang) --- net/mptcp/pm_netlink.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index d44d318dce03..bdbf27fe89e0 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -1454,8 +1454,17 @@ static int mptcp_nl_remove_subflow_and_signal_addr(s= truct net *net, remove_subflow =3D lookup_subflow_by_saddr(&msk->conn_list, addr); mptcp_pm_remove_anno_addr(msk, addr, remove_subflow && !(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT)); - if (remove_subflow) + + if (remove_subflow) { mptcp_pm_remove_subflow(msk, &list); + } else if (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) { + /* If the subflow has been used, but now closed */ + spin_lock_bh(&msk->pm.lock); + if (!__test_and_set_bit(entry->addr.id, msk->pm.id_avail_bitmap)) + msk->pm.local_addr_used--; + spin_unlock_bh(&msk->pm.lock); + } + release_sock(sk); =20 next: --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4F7581C695 for ; Mon, 22 Jul 2024 19:36:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676965; cv=none; b=hS0JlJSRBD2w62xgceD3ZP7NN2Cy6Ow5xY+e/eiJQ8+oZOx+LjoMTiydhuHKJBCKq7NTgIwVKNiY2hB37TSTuifv5Ot5QdeJTH62QF9sQ/+jtKu++cEWE7B+iwt5Rrt44oSPEb2nLrNo1fZnjOLVuUW7Ae9+umqAxYmfJj4CoOM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676965; c=relaxed/simple; bh=u8qIDXTTzowhUR4HkW0eiXruuNaZM+rGz61FM/Q9y9Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iePSU5OhfSIOiHGbwYpQjBTeW5TgGgWGKxm6HXPrMQtJND1TfIOXHuUbi8Z8icbd/r698mtxKZwiqWtnGEW5B7bAOWRhIf4YMauc0GZEFdi2CV8Ss3zk3UiER2WEdyqL+biNVQK4QQbvygp2xj0PYXbBveIO0RmJ/FjkK6XISr4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nc97+8NW; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="nc97+8NW" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 75F11C4AF11; Mon, 22 Jul 2024 19:36:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676965; bh=u8qIDXTTzowhUR4HkW0eiXruuNaZM+rGz61FM/Q9y9Y=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=nc97+8NWWpoVSY7cPexiOgN7EKjrAgooZcQJ9tepRo4tdOPLjloSlu8qXz93YQ/z8 HG5u0ZxJMoDIQp1mhaWM5c2BD+a0SLRUAnijI1KH2Lml2BAUjQjd+w7aQY78ExGMM1 XmRyj+VtQlKmi2r1Z4hS1zUWrfZoz7c+/17WSbsTl4vdVJ5wgdfG/MRDh4hAhRdggN q6ktoAje3gjQf+Z8VWt4VkJgJCVaEaoOMacMo2PMuIOUuecdLAGvs8lKzVe5wPiFng krhs77LIFxDVdbYwh9U9SQK47YQ9mAC9vRxzjuJwZ7xLsGb+QtvfJNzqOXm01oNbhE O9P6NTmQ9APNQ== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:49 +0200 Subject: [PATCH mptcp-net v4 11/23] selftests: mptcp: join: check re-using ID of closed subflow 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: <20240722-mptcp-pm-avail-v4-11-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2972; i=matttbe@kernel.org; h=from:subject:message-id; bh=u8qIDXTTzowhUR4HkW0eiXruuNaZM+rGz61FM/Q9y9Y=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSW+cAdvf4D5IyehLeTETSDs9tfDOgT/QF5s zLEwrOysxeJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lgAKCRD2t4JPQmmg c1ZYD/0UJnM36C7IodNC5cjll8iLRijfae17zo3fAo0a6IezsieuvjzwmStxIIhYJwD6zipIM9k SjIizuDNy2YyzTBbZ14vMDC42avWB0xkHfsrc37SE3yo7cCm2ifuJBwn8DEwVlYmNW/HMufXJQ0 QA5QLpEePZ8dmWLpFoUsDQZUfbJJJAFDRuWnQzSqPjhBNBDdXVQaViQ4sTJDzgRlkJOyE6pR8PU QSxgTMJiC8tPw0DiPwM5lPJYwOqIPOkRVb5sT/iqM2G2tuL6Llch0KiwRiOts38wl5+lL3LMUDV 17KVd/9AE8B5dFwsA2iFYSxvqSad+qoG+NvAeYUZfzdWTpXnwwhbosgUZctbQGJoNCgvJycfMZ0 KDPH6CVzBPvYAvKBy0XftBAIVWBMLkxYGMSt2m/8GLFZCO5Ci2i3/kDCynkJirIKQ6vBwVejTv5 GLFpPt+SD+zLJdZcXQ26340/LiX0YndOd5AnAcktDOG0XGgL+WeMmumsB3BoGM5tmPO/6vbYwl2 cf09Bd+GRwtHy+LWmxWDlDoMb7XtIwXkR3zKgZTXRDjiHX9f9WgysFFfjW+tmd5m501EiHM4pTK Z4EU0qgoTH7YVbTGAjxr4srHDhOFj4lihVEHwyD+y0K5ARh+3W+H/N3aBrNF52RV7+hiRAS4G/i nHVkRBbUq/NSm8w== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 This test extends "delete and re-add" to validate the previous commit. A new 'subflow' endpoint is added, but the subflow request will be rejected. The result is that no subflow will be established from this address. Later, the endpoint is removed and re-added after having cleared the firewall rule. Before the previous commit, the client would not have been able to create this new subflow. While at it, extra checks have been added to validate the expected numbers of MPJ and RM_ADDR. The 'Fixes' tag here below is the same as the one from the previous commit: this patch here is not fixing anything wrong in the selftests, but it validates the previous fix for an issue introduced by this commit ID. Fixes: b6c08380860b ("mptcp: remove addr and subflow in PM netlink") Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Mat Martineau --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 27 ++++++++++++++++++++-= ---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index b4dc5f2772dc..c5aa745a36f5 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -436,9 +436,10 @@ reset_with_tcp_filter() local ns=3D"${!1}" local src=3D"${2}" local target=3D"${3}" + local chain=3D"${4:-INPUT}" =20 if ! ip netns exec "${ns}" ${iptables} \ - -A INPUT \ + -A "${chain}" \ -s "${src}" \ -p tcp \ -j "${target}"; then @@ -3527,10 +3528,10 @@ endpoint_tests() mptcp_lib_kill_wait $tests_pid fi =20 - if reset "delete and re-add" && + if reset_with_tcp_filter "delete and re-add" ns2 10.0.3.2 REJECT OUTPUT && mptcp_lib_kallsyms_has "subflow_rebuild_header$"; then - pm_nl_set_limits $ns1 1 1 - pm_nl_set_limits $ns2 1 1 + pm_nl_set_limits $ns1 0 2 + pm_nl_set_limits $ns2 0 2 pm_nl_add_endpoint $ns2 10.0.2.2 id 2 dev ns2eth2 flags subflow test_linkfail=3D4 speed=3D20 \ run_tests $ns1 $ns2 10.0.1.1 & @@ -3547,11 +3548,27 @@ endpoint_tests() chk_subflow_nr "after delete" 1 chk_mptcp_info subflows 0 subflows 0 =20 - pm_nl_add_endpoint $ns2 10.0.2.2 dev ns2eth2 flags subflow + pm_nl_add_endpoint $ns2 10.0.2.2 id 2 dev ns2eth2 flags subflow wait_mpj $ns2 chk_subflow_nr "after re-add" 2 chk_mptcp_info subflows 1 subflows 1 + + pm_nl_add_endpoint $ns2 10.0.3.2 id 3 flags subflow + wait_attempt_fail $ns2 + chk_subflow_nr "after new reject" 2 + chk_mptcp_info subflows 1 subflows 1 + + ip netns exec "${ns2}" ${iptables} -D OUTPUT -s "10.0.3.2" -p tcp -j REJ= ECT + pm_nl_del_endpoint $ns2 3 10.0.3.2 + pm_nl_add_endpoint $ns2 10.0.3.2 id 3 flags subflow + wait_mpj $ns2 + chk_subflow_nr "after no reject" 3 + chk_mptcp_info subflows 2 subflows 2 + mptcp_lib_kill_wait $tests_pid + + chk_join_nr 3 3 3 + chk_rm_nr 1 1 fi =20 # remove and re-add --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7BC6E1C695 for ; Mon, 22 Jul 2024 19:36:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676966; cv=none; b=acpPe1vjseOHLg1rb53gCHANd+jUdTkE+61DCpBJeZSIBQXSbf0p4nKtGlIujB30ZZ/bykR1jsSI0K1WOejV93ypMRO7bkGYis+SPDPyrw9cDjNCkKO+yvC4AFGBYMlrk6ePCx68hvWQ67oJe7+JD0079XP4VEfMrP14KfSRIj8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676966; c=relaxed/simple; bh=GEkkHViB56dUWH56K7rwfK01aIrJJch4t8GMykQ7od8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SVEsRJEPxHhjfScZ9KGS4Kqffqp3lsdAFRqjBSPtMmz5o2o44wUVJL/fYgf0MISFJvoLSIOET+vVxhBkOXjAY5DAimS8VCXzTgWUsnpTK7jXGTji52j6fcWdKctBIN4K8W0aaSo5cQIV9M60H4h+5IhM8CgrLuVEzfwk6Cna7xw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KTQyC2js; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KTQyC2js" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9E962C32782; Mon, 22 Jul 2024 19:36:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676966; bh=GEkkHViB56dUWH56K7rwfK01aIrJJch4t8GMykQ7od8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=KTQyC2jspeaK4/v4XXBQeEDD+I1vp0KphSZrdwmQbk2QNB6eWIMaZ6Q4yVY3HiwxM OZX/BIc7gqjC3hSObODIi5Djr54IMGSXUWVRq07RyRBZjM6M7c/e8mhwUoMusKS77R embBXEruliTlWd4+C5iABrL9aVhCD9ZEZ09dl8oEIfKh3psQ8NkVx5o9zRRwCDwkuG oqWjMu0jfUVdeBjKK3NgsxBKc2kMK+oKrKHXHz1b/RTLUxEogiX2NJl5q63CBB/FiJ yZ4bTfdu5vXu6NNhmUPkIH0YBvZCcDPbD6ftW+rgzsIRGyQwd4SVjgjlzN655sAwCC tR5Q+pp8F4XSg== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:50 +0200 Subject: [PATCH mptcp-net v4 12/23] mptcp: pm: re-using ID of unused flushed subflows 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: <20240722-mptcp-pm-avail-v4-12-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2788; i=matttbe@kernel.org; h=from:subject:message-id; bh=GEkkHViB56dUWH56K7rwfK01aIrJJch4t8GMykQ7od8=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSWI2L51CQ+rgyZo4h2fGOnsHJbzNOMu/Kst OHlBb083aSJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lgAKCRD2t4JPQmmg c3/DEACAVFoOb8Nclv6tMCyrJ/55guB6M1AQyvL55YGM+MYS7MacC4R79HHsBR/SkczmwuDn982 rwD8PFDF/S3drEUK9IJ9/DJ9XPIWWch0qL3h6Aj5UOmnZeU6qM8jvJO4ZdL6zMD7ekm08v7WG3B qXlXn0BVsjfBbPieqmL3OoNBwCbmDWwI+NYu0+3IwLRI+WN08JMHDw8EpORW+QBsToz7dNpRrYP AKD4YLa53AU15ZYOR/PPm1/ajvB70uFxcF5Qxr0aobV9SquaoFTf4+lCVzKMSAvsGCtTG12KCMK Da1sO3JSYo5S+YwSCCvK4nFK9XV8Rdv0Vfqwf5G6M8QhkAgwM7W1BZmZAm32AgEF2OyY3PVDM6z A3s59X93BUy90uevdgvlNsiq5Dy+AxEsL3iLNVbbKcVc8VmF1MmUb1+uFz4hXKMvyny/ot0BL/C aeHLl5+UTuoNUpQGUJ5kEqrMjs6SgBMzLV5GCvte3aeW+VUS+9QvywJ+Mp5yW4VoULPJSJPDGzR gs49k65ZVDkWZUMlkrObjsBgLeWLOr0+VkNzNyaRMKLKxxQNAtBpYWMe8y2Lx8fI2hHny9LXkCR 1SHehE6iOyK5bQ8J7/HoZMv5ZabxDFleL+lU2aP2c6a4BX6DTqY3QQ5q2SCtL81dBZobaiZheX5 djk21/Dc1vsW1sg== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 If no subflows are attached to the 'subflow' endpoints that are being flushed, the corresponding addr IDs will not be marked as available again. Mark all ID as being available when flushing all the 'subflow' endpoints, and reset local_addr_used counter to cover these cases. While at it, renamed the helpers linked to the flushing operations to make it clear that the intention is to flush all created subflows, and remove all announced addresses, not just a "random" selection. Fixes: 06faa2271034 ("mptcp: remove multi addresses and subflows in PM") Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm_netlink.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index bdbf27fe89e0..4045e5cc6298 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -1586,8 +1586,8 @@ void mptcp_pm_remove_addrs(struct mptcp_sock *msk, st= ruct list_head *rm_list) } } =20 -static void mptcp_pm_remove_addrs_and_subflows(struct mptcp_sock *msk, - struct list_head *rm_list) +static void mptcp_pm_flush_addrs_and_subflows(struct mptcp_sock *msk, + struct list_head *rm_list) { struct mptcp_rm_list alist =3D { .nr =3D 0 }, slist =3D { .nr =3D 0 }; struct mptcp_pm_addr_entry *entry; @@ -1608,12 +1608,19 @@ static void mptcp_pm_remove_addrs_and_subflows(stru= ct mptcp_sock *msk, mptcp_pm_remove_addr(msk, &alist); spin_unlock_bh(&msk->pm.lock); } + if (slist.nr) mptcp_pm_remove_subflow(msk, &slist); + + /* Reset counters: maybe some subflows have been removed before */ + spin_lock_bh(&msk->pm.lock); + bitmap_fill(msk->pm.id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); + msk->pm.local_addr_used =3D 0; + spin_unlock_bh(&msk->pm.lock); } =20 -static void mptcp_nl_remove_addrs_list(struct net *net, - struct list_head *rm_list) +static void mptcp_nl_flush_addrs_list(struct net *net, + struct list_head *rm_list) { long s_slot =3D 0, s_num =3D 0; struct mptcp_sock *msk; @@ -1626,7 +1633,7 @@ static void mptcp_nl_remove_addrs_list(struct net *ne= t, =20 if (!mptcp_pm_is_userspace(msk)) { lock_sock(sk); - mptcp_pm_remove_addrs_and_subflows(msk, rm_list); + mptcp_pm_flush_addrs_and_subflows(msk, rm_list); release_sock(sk); } =20 @@ -1667,7 +1674,7 @@ int mptcp_pm_nl_flush_addrs_doit(struct sk_buff *skb,= struct genl_info *info) pernet->next_id =3D 1; bitmap_zero(pernet->id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); spin_unlock_bh(&pernet->lock); - mptcp_nl_remove_addrs_list(sock_net(skb->sk), &free_list); + mptcp_nl_flush_addrs_list(sock_net(skb->sk), &free_list); synchronize_rcu(); __flush_addrs(&free_list); return 0; --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 987FB17109D for ; Mon, 22 Jul 2024 19:36:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676967; cv=none; b=Q7CHLrKGMwoBPMjln/pTbIn5Ieua3hV8ivGyvAsKCtXKXJGD1hGhnVZ9LYBG1rkah0Fi2gdt5ZqgTDblyn0hRQExMGJ3cZ8/gfndz/K6XPtqrikOafHBLaL8LAiiTC5UNBMICCDw7n6QLpNFlbyNcNJUA+a4kvboJ8kSTkfHEFI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676967; c=relaxed/simple; bh=XkczOedmWFgLcnHwG5YodN3uumTEtKKu+YQSdFypLd4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gEI0Mhn3M4SrQYk0qiy1kBxXdG2rTE5quDHacCuHL8PSAuKg93wxR9jyu1k12vKR2G2ZOz0QneUdpOfussdptosYAMBsLS/yqz7dey0Vpowql8QNvzUqPD1P/E4sRmGTCi3yvJdvARl9xp+i/hw3SHc7+qTziCTeo86f35WxmkU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PjRE9Zze; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="PjRE9Zze" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C3B1BC4AF0D; Mon, 22 Jul 2024 19:36:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676967; bh=XkczOedmWFgLcnHwG5YodN3uumTEtKKu+YQSdFypLd4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=PjRE9Zze5ZpJNkeiQcPYlsr1yOuqEot/hiNdO4BFYAZxKN1gMdd+qYTNqZb2o9CPD BKYEshnvAo/ednrMtq9vqKO21VpJ24Mv4UigYrTaOD2GdRyBoi0DYSo+OVzYTnGLws GBhEJw87dBabR6lkew40TEnWrpTgzehAyL0aKEOKjoDpkCtbwYWs+lHgCHgU5Y0Eqg N32CnTUUZi+KIRF+zvDl8XgywNT1pRNp5Q7efj1J+QHcfoeE26IdumsDIDJy+a7DOu DHDgU9j4Dz9wpZUcUnuYaCwR+j2zCBQgNdLzhFqAfWUpBDkRp4Mt37uzUZqYUlYUOF cauRSJ6kkK5gw== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:51 +0200 Subject: [PATCH mptcp-net v4 13/23] selftests: mptcp: join: test for flush/re-add endpoints 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: <20240722-mptcp-pm-avail-v4-13-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2174; i=matttbe@kernel.org; h=from:subject:message-id; bh=XkczOedmWFgLcnHwG5YodN3uumTEtKKu+YQSdFypLd4=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSW7yukuNJPDFe66c+z4VlmBilJYue4zQQ7B hwbrPgCicuJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lgAKCRD2t4JPQmmg c1U3EADY6ygPc5S0RIEzptiNkC37KW4UvssdUWSXkjvEdMYiWq8WUD5cZ714Ana/zt5QzJoQFRL NHBiQ1soQx8OypeYS8AmChBCPOKmg3t4TPp5jVSsOetUkXciMQggmxfZ9KtORFsGWV1wepoqAyT 7kg7ab+Y3qKuNDF9cUfybYik96DMl2lujGsw7AmNbjPODCFWsqh7B2q2NS1uWz82dz1EPvcqXFh fCzQIYpqTBOozwcCqO1iKQued6Abn2Vh12YHUK+GabquBA25meP55bK/jvGiQxMk8tfGdEKwHNJ bfXrng472NrrZA1Iwi8q3+qKsRdBycMiWYwGCBtX3YfXbZVWLo9twAf+X5bevU6D4DuzeIXEQM9 3O67dRI/pxyKxKtfBwdOIRXKp7PcEjwWSLYeTrEh44ILCBZm1tDUa0D6ix0Yo65zACOYGAX+WXC oqKA6izhk2nH0sIR7NM1u7KpYNWYzHtJDRubeC4Sn8RiDdtZZuuut4Ki820Od0zV6KOKglHc9Cv iYv+B0Dj+AwsmvmL1IlitBvDbs35TrQlhBVxJ/NQ2DRGuNLoH4vh0vJK2KfnBd67m9OObWi15+y qJhS5iE0goeVbhY6AA5W5Eu3d76IkTPx95BFXzjZxL7XbTePnn3hNpca2gNu2ztla9qfFSJDQkE fR6aonV57p4VS9A== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 After having flushed endpoints that didn't cause the creation of new subflows, it is important to check endpoints can be re-created, re-using previously used IDs. Before the previous commit, the client would not have been able to re-create the subflow that was previously rejected. The 'Fixes' tag here below is the same as the one from the previous commit: this patch here is not fixing anything wrong in the selftests, but it validates the previous fix for an issue introduced by this commit ID. Fixes: 06faa2271034 ("mptcp: remove multi addresses and subflows in PM") Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 30 +++++++++++++++++++++= ++++ 1 file changed, 30 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index c5aa745a36f5..3565d8b48125 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -3607,6 +3607,36 @@ endpoint_tests() chk_rm_nr 2 1 invert fi =20 + # flush and re-add + if reset_with_tcp_filter "flush re-add" ns2 10.0.3.2 REJECT OUTPUT && + mptcp_lib_kallsyms_has "subflow_rebuild_header$"; then + pm_nl_set_limits $ns1 0 2 + pm_nl_set_limits $ns2 1 2 + # broadcast IP: no packet for this address will be received on ns1 + pm_nl_add_endpoint $ns1 224.0.0.1 id 2 flags signal + pm_nl_add_endpoint $ns2 10.0.3.2 id 3 flags subflow + test_linkfail=3D4 speed=3D20 \ + run_tests $ns1 $ns2 10.0.1.1 & + local tests_pid=3D$! + + wait_attempt_fail $ns2 + chk_subflow_nr "before flush" 1 + chk_mptcp_info subflows 0 subflows 0 + + pm_nl_flush_endpoint $ns2 + pm_nl_flush_endpoint $ns1 + wait_rm_addr $ns2 0 + ip netns exec "${ns2}" ${iptables} -D OUTPUT -s "10.0.3.2" -p tcp -j REJ= ECT + pm_nl_add_endpoint $ns2 10.0.3.2 id 3 flags subflow + wait_mpj $ns2 + pm_nl_add_endpoint $ns1 10.0.3.1 id 2 flags signal + wait_mpj $ns2 + mptcp_lib_kill_wait $tests_pid + + chk_join_nr 2 2 2 + chk_add_nr 2 2 + chk_rm_nr 1 0 invert + fi } =20 # [$1: error message] --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BCFAB171640 for ; Mon, 22 Jul 2024 19:36:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676968; cv=none; b=X2D4f1qW104aKwVRbpsH4guzPWdYWxPhXDufwwEUqaTZMClQD1qIg3fcL2dKN4pnvyQ4ZnW9IBFkk/SR69HHay55ycPC27dh5mZtGH4DC3q+rhIxPf4vBAIetnhJtAelJIlmxSO4bYWupzr51WHSXj2s/CSe9vhNQ9Cn+e+YHKA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676968; c=relaxed/simple; bh=DPCMP4eWODT9nHLLzAjsnvSTdaXqPhdwWCvENtknObE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Fmbhngcq5HRkAvf8kBv9zionDInS1YnAfcNWJWnA4/6MZrijC9d5u4/B2Y6nbL+oa0Rjoe5DgFHUxZpQON+5RP0FU5/HYGNOyXJ8khEaEjokK9Q2ZUW02OqgIQO+lXrsdnj9FOFquIlXmMe46h8q69wB1WeWfVBN8ov/rzah2SU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=iAGh5jTy; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="iAGh5jTy" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E888CC4AF0B; Mon, 22 Jul 2024 19:36:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676968; bh=DPCMP4eWODT9nHLLzAjsnvSTdaXqPhdwWCvENtknObE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=iAGh5jTyFKMo1Fkus4Ep2zznEkhUwZKYI/pTUQleSvBhgGWVNJir9z2T7Oc+cMChU 06ZzyXEtMSFcWEy+6qRIJ7B7guyFWFRkJxPbBRW0Y0IG/r+ap/LETtGF4XJz59NyRF 9koqcMO5MSJxEO4pBiNkcmNnH9TzRfSpz8RCHLNvIbsXMUb444TtWmoEfj+ppB8Wwe qyjAvdWVkUn8O9WObO843mLmh4loYeIeRig45TLljj6xBs3LIxZSmHfwVZl537JS2J 5ZfMIBYJNipP1dizHtHb9vClaU6Phwpbz3f/lJ/qJ1FZnSmpBFoejXmSZ7FuVBw1Gm HOdRi/rhkelKg== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:52 +0200 Subject: [PATCH mptcp-net v4 14/23] mptcp: pm: remove mptcp_pm_remove_subflow() 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: <20240722-mptcp-pm-avail-v4-14-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=4828; i=matttbe@kernel.org; h=from:subject:message-id; bh=DPCMP4eWODT9nHLLzAjsnvSTdaXqPhdwWCvENtknObE=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSWzNzmeNq7rXkvir/07kfgsxcHkYT0Aj/nl RJF2EAUmUmJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lgAKCRD2t4JPQmmg cz2jD/4vzl5q0DWZtDv/2UrGlOjGLOISypf+Tzd5deMHA12Np8TQPBKNlptW5QkxY2l3T5e+juU BW6bUuWDx2O0e9iJfYX1sRyM0eNTF1cIuqO0Y2TNtt7k0DmXQiIcvZOujhQIyOJXnXnNc1/31wW 6i46oOhYDZhlAaAzvV1Eu20vSOjueAphSysT+qCoSzq8UmCWi19I06Iy6xfDz9b1jT07rbPK+Tm G3RSovc6gWlfDVYuSluFh5RB2KGVMbSFxfVQk+KDsu8EbUVnnAN7xKaglXcRLyBkvTOEW4VU7+W Q6TaPcT9GkMXh7mhLb+0gVSG9hQ62vcyoAK38SHsgAXEiMcBEUl7xI/RpOYjK3tJdBaPplBGo+v XAhYN+ToG06wKffIg1B8McbUZEXZY8zoSRodvmIavVFxz7kLb3yzlNPEIsGmv0pF+fegh9V/k9I qIUQLpJMNGHjA8iU4S7KpS2avoDONmXE69YcMqjUuhGaEfuY73IIJLQpOKffZZY3jf6ArgKDfSm 7EaGCAgdx+LpmnqAirCU7jZug7ph8QTMwQqIO6obTUDqVJEwV1ufa7eE+DCI73b50g9zq34F162 b9MicmzMHCKBp0hanbHk4qoHXtHwYKuRb/VInHcAFOynkSaoJ0cOIXZUaRZGV803LKl2Yc4+3Yw ai1hZDme7Q7R8YQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 This helper is confusing. It is in pm.c, but it is specific to the in-kernel PM and it cannot be used by the userspace one. Also, it simply calls one in-kernel specific function with the PM lock, while the similar mptcp_pm_remove_addr() helper requires the PM lock. What's left is the pr_debug(), which is not that useful, because a similar one is present in the only function called by this helper: mptcp_pm_nl_rm_subflow_received() After these modifications, this helper can be marked as 'static', and the lock can be taken only once in mptcp_pm_flush_addrs_and_subflows(). Note that it is not a bug fix, but it will help backporting the following commits. Fixes: 0ee4261a3681 ("mptcp: implement mptcp_pm_remove_subflow") Signed-off-by: Matthieu Baerts (NGI0) --- Notes: - v3: - New line before 'if (remove_subflow) {' moved to patch 10 (Geliang) - One PM spin lock to remove address and subflows (Geliang) --- net/mptcp/pm.c | 10 ---------- net/mptcp/pm_netlink.c | 16 +++++++--------- net/mptcp/protocol.h | 3 --- 3 files changed, 7 insertions(+), 22 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 55406720c607..1f1b2617d0f5 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -60,16 +60,6 @@ int mptcp_pm_remove_addr(struct mptcp_sock *msk, const s= truct mptcp_rm_list *rm_ return 0; } =20 -int mptcp_pm_remove_subflow(struct mptcp_sock *msk, const struct mptcp_rm_= list *rm_list) -{ - pr_debug("msk=3D%p, rm_list_nr=3D%d", msk, rm_list->nr); - - spin_lock_bh(&msk->pm.lock); - mptcp_pm_nl_rm_subflow_received(msk, rm_list); - spin_unlock_bh(&msk->pm.lock); - return 0; -} - /* path manager event handlers */ =20 void mptcp_pm_new_connection(struct mptcp_sock *msk, const struct sock *ss= k, int server_side) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 4045e5cc6298..a653ecc9e9ad 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -858,8 +858,8 @@ static void mptcp_pm_nl_rm_addr_received(struct mptcp_s= ock *msk) mptcp_pm_nl_rm_addr_or_subflow(msk, &msk->pm.rm_list_rx, MPTCP_MIB_RMADDR= ); } =20 -void mptcp_pm_nl_rm_subflow_received(struct mptcp_sock *msk, - const struct mptcp_rm_list *rm_list) +static void mptcp_pm_nl_rm_subflow_received(struct mptcp_sock *msk, + const struct mptcp_rm_list *rm_list) { mptcp_pm_nl_rm_addr_or_subflow(msk, rm_list, MPTCP_MIB_RMSUBFLOW); } @@ -1456,7 +1456,9 @@ static int mptcp_nl_remove_subflow_and_signal_addr(st= ruct net *net, !(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT)); =20 if (remove_subflow) { - mptcp_pm_remove_subflow(msk, &list); + spin_lock_bh(&msk->pm.lock); + mptcp_pm_nl_rm_subflow_received(msk, &list); + spin_unlock_bh(&msk->pm.lock); } else if (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) { /* If the subflow has been used, but now closed */ spin_lock_bh(&msk->pm.lock); @@ -1602,18 +1604,14 @@ static void mptcp_pm_flush_addrs_and_subflows(struc= t mptcp_sock *msk, alist.ids[alist.nr++] =3D entry->addr.id; } =20 + spin_lock_bh(&msk->pm.lock); if (alist.nr) { - spin_lock_bh(&msk->pm.lock); msk->pm.add_addr_signaled -=3D alist.nr; mptcp_pm_remove_addr(msk, &alist); - spin_unlock_bh(&msk->pm.lock); } - if (slist.nr) - mptcp_pm_remove_subflow(msk, &slist); - + mptcp_pm_nl_rm_subflow_received(msk, &slist); /* Reset counters: maybe some subflows have been removed before */ - spin_lock_bh(&msk->pm.lock); bitmap_fill(msk->pm.id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); msk->pm.local_addr_used =3D 0; spin_unlock_bh(&msk->pm.lock); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 19d60b6d5b45..f2eb5273d752 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1030,7 +1030,6 @@ int mptcp_pm_announce_addr(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, bool echo); int mptcp_pm_remove_addr(struct mptcp_sock *msk, const struct mptcp_rm_lis= t *rm_list); -int mptcp_pm_remove_subflow(struct mptcp_sock *msk, const struct mptcp_rm_= list *rm_list); void mptcp_pm_remove_addrs(struct mptcp_sock *msk, struct list_head *rm_li= st); =20 void mptcp_free_local_addr_list(struct mptcp_sock *msk); @@ -1134,8 +1133,6 @@ static inline u8 subflow_get_local_id(const struct mp= tcp_subflow_context *subflo =20 void __init mptcp_pm_nl_init(void); void mptcp_pm_nl_work(struct mptcp_sock *msk); -void mptcp_pm_nl_rm_subflow_received(struct mptcp_sock *msk, - const struct mptcp_rm_list *rm_list); unsigned int mptcp_pm_get_add_addr_signal_max(const struct mptcp_sock *msk= ); unsigned int mptcp_pm_get_add_addr_accept_max(const struct mptcp_sock *msk= ); unsigned int mptcp_pm_get_subflows_max(const struct mptcp_sock *msk); --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E6441171647 for ; Mon, 22 Jul 2024 19:36:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676970; cv=none; b=YVr09f2QyWX3aKVP9MuZpYLmQIhCp1GsFw5Gs+KLEKpL6JmQAs78n+WQXUI33N55Btj8QlwV22OAv3uCJQjbU6VbdbY6mFnWMpd8uzGCF1QZ/CS84Su0cdJWAl90rCw3Nf+dP+pvCUVNlmg656T47AqCrJeaSDd5Hqov8C9m6gM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676970; c=relaxed/simple; bh=0xFMDS4qYHKOiwYm0etxgWoqfwa1KQQH9JL0qVq+ToY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=X9ffaFHgqZZefu4EDBdvo6KPB7EaQtzl1u60+/9sSJSIuV2aHmGA5LX62qnJsAo+eINqFDnz88Rzz3BpUX6sk/XFYT9olofCQGrotLxIbdc8KwqapUShIIsznjy/Bkgui8VtKwxvZKCgUMBBV6/pUnm82VQNBWl6kCy86mbR48Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YKcozcTw; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="YKcozcTw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1A020C116B1; Mon, 22 Jul 2024 19:36:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676969; bh=0xFMDS4qYHKOiwYm0etxgWoqfwa1KQQH9JL0qVq+ToY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=YKcozcTwKoTesYcg1uNwJUDkf0pGgzljRWIRjdQ+UPz91HgJv2ccQEyp6mrfl8tSM 5rtVfNZp7vv334cQwxJhg9Q2ViJGKdqMsw58uTzW8kvxrsbHJRHldxvM2MsYuK6kas 8GIhga2i3VJLU+Naos1rsxSAAMMDZYj623JINxPT1RhIy6+xDKgDBr2136bVUeBCPB 1b2ecnfUdOJWMqhj57xUAB9BOCTNSapOBbEFgSES8RRcSQZ3gCeELJxotagvJ+85GD 5DFIOTW+L9/5KRNSyDQxUkq3DhShZPAOoc6rnyyXJMipY+3HWeRd35NbtExM3MUBG3 9u2Jxzuaaqzcg== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:53 +0200 Subject: [PATCH mptcp-net v4 15/23] mptcp: pm: only mark 'subflow' endp as available 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: <20240722-mptcp-pm-avail-v4-15-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=4021; i=matttbe@kernel.org; h=from:subject:message-id; bh=0xFMDS4qYHKOiwYm0etxgWoqfwa1KQQH9JL0qVq+ToY=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSWi1kLQALLaQce1nxfnEuM1Fp6NX8zEAVmS 928faM/uPeJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lgAKCRD2t4JPQmmg c9KHEACPd0uxa+o5WA7B8O/Hr3IFfFDO4cFpoXcXYDtxQoMsDZfV9d80pp+r5pUjdA2iSOxgaTG vodoZzzkTGYg9Rlo4nFDs3b1JaXLAAe2pKpAAQJXKU8ST5bSrVBeLmSNIvbQR7cXLFe7JudQkW3 btppQ3ZWf62VD5UZAS5BjML/u3ukn1dudDjWPs179LGc3AXx8tykaUvSTEuDYqxQmgvNJzRkP2/ S19I+zC/sJWE4u9R/48j2knugSFsHjOPtQi2vd46sko+Z9T4DiD7HFY6+Zs26tdS2HBK7YcmPVu po7maJjPjIbhgltvBASe6QeDJ2PCZlBkNocIZU2LzoS144kHMY9yaaVqfrz+MaoLpGFEViqq4c1 I6b1RXgtOn+cdwLnL715Cpnn2ElNU/IC+tbQZtYN150xfZjsEO5DYpJAip4uukDIPsLJjbKTzFU R+EM+gejWHaB+BxqS72Lk+IAn9oWij8oGsT7B68pxgcFY2vUJywcea8MxJJaGiuhd+C8OC+AcpG fC0Y6xU/19yFmrUW/mz5QPCdfUeDZcrdyChkvOpPzGqHRrMzSoIA7ZmmzNCwr95PFS4hTb876ck VmS5clyywXnXcddYcxgClwU9LcgviSXr3iV7n4gGtaP96VfDvOtnUFZfDQwdbMTMHUz435jpkjq EchE2oE4r23accA== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Adding the following warning ... WARN_ON_ONCE(msk->pm.local_addr_used =3D=3D 0) ... before decrementing the local_addr_used counter helped to find a bug when running the "remove single address" subtest from the mptcp_join.sh selftests. Removing a 'signal' endpoint will trigger the removal of all subflows linked to this endpoint via mptcp_pm_nl_rm_addr_or_subflow() with rm_type =3D=3D MPTCP_MIB_RMSUBFLOW. This will decrement the local_addr_used counter, which is wrong in this case because this counter is linked to 'subflow' endpoints, and here it is a 'signal' endpoint that is being removed. Now, the counter is decremented, only if the ID is being used outside of mptcp_pm_nl_rm_addr_or_subflow(), only for 'subflow' endpoints, and if the ID is not 0 -- local_addr_used is not taking into account these ones. This marking of the ID as being available, and the decrement is done no matter if a subflow using this ID is currently available, because the subflow could have been closed before. Fixes: 06faa2271034 ("mptcp: remove multi addresses and subflows in PM") Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm_netlink.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index a653ecc9e9ad..ea942c9f998f 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -834,10 +834,10 @@ static void mptcp_pm_nl_rm_addr_or_subflow(struct mpt= cp_sock *msk, if (rm_type =3D=3D MPTCP_MIB_RMSUBFLOW) __MPTCP_INC_STATS(sock_net(sk), rm_type); } - if (rm_type =3D=3D MPTCP_MIB_RMSUBFLOW) - __set_bit(rm_id ? rm_id : msk->mpc_endpoint_id, msk->pm.id_avail_bitmap= ); - else if (rm_type =3D=3D MPTCP_MIB_RMADDR) + + if (rm_type =3D=3D MPTCP_MIB_RMADDR) __MPTCP_INC_STATS(sock_net(sk), rm_type); + if (!removed) continue; =20 @@ -847,8 +847,6 @@ static void mptcp_pm_nl_rm_addr_or_subflow(struct mptcp= _sock *msk, if (rm_type =3D=3D MPTCP_MIB_RMADDR) { msk->pm.add_addr_accepted--; WRITE_ONCE(msk->pm.accept_addr, true); - } else if (rm_type =3D=3D MPTCP_MIB_RMSUBFLOW) { - msk->pm.local_addr_used--; } } } @@ -1426,6 +1424,14 @@ static bool mptcp_pm_remove_anno_addr(struct mptcp_s= ock *msk, return ret; } =20 +static void __mark_subflow_endp_available(struct mptcp_sock *msk, u8 id) +{ + /* If it was marked as used, and not ID 0, decrement local_addr_used */ + if (!__test_and_set_bit(id ? : msk->mpc_endpoint_id, msk->pm.id_avail_bit= map) && + id && !WARN_ON_ONCE(msk->pm.local_addr_used =3D=3D 0)) + msk->pm.local_addr_used--; +} + static int mptcp_nl_remove_subflow_and_signal_addr(struct net *net, const struct mptcp_pm_addr_entry *entry) { @@ -1459,11 +1465,11 @@ static int mptcp_nl_remove_subflow_and_signal_addr(= struct net *net, spin_lock_bh(&msk->pm.lock); mptcp_pm_nl_rm_subflow_received(msk, &list); spin_unlock_bh(&msk->pm.lock); - } else if (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) { - /* If the subflow has been used, but now closed */ + } + + if (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) { spin_lock_bh(&msk->pm.lock); - if (!__test_and_set_bit(entry->addr.id, msk->pm.id_avail_bitmap)) - msk->pm.local_addr_used--; + __mark_subflow_endp_available(msk, entry->addr.id); spin_unlock_bh(&msk->pm.lock); } =20 @@ -1501,6 +1507,7 @@ static int mptcp_nl_remove_id_zero_address(struct net= *net, spin_lock_bh(&msk->pm.lock); mptcp_pm_remove_addr(msk, &list); mptcp_pm_nl_rm_subflow_received(msk, &list); + __mark_subflow_endp_available(msk, 0); spin_unlock_bh(&msk->pm.lock); release_sock(sk); =20 @@ -1902,6 +1909,7 @@ static void mptcp_pm_nl_fullmesh(struct mptcp_sock *m= sk, =20 spin_lock_bh(&msk->pm.lock); mptcp_pm_nl_rm_subflow_received(msk, &list); + __mark_subflow_endp_available(msk, addr->id); mptcp_pm_create_subflow_or_signal_addr(msk); spin_unlock_bh(&msk->pm.lock); } --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6A25D171640 for ; Mon, 22 Jul 2024 19:36:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676971; cv=none; b=JTbKiNNGadakXjt6/pRsyV/AJA99DWzFTXknH5aaGRX4efVVyUav7yZDtn5Dksq6GB8oiH3o3zIRTzPOFX765BQ1TwybmDvkratxUR8FPf8F4USB+pN+g2f0AbOI9sarBYo7jinZfgKlSuT3ZfkP5b8rpYwm2m6Go6Wbb2Kz+og= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676971; c=relaxed/simple; bh=DeLnnNqaKgMl/0xcB+x46WxsWT6jNX6wQUj5lqlSQtY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AVloxza2Y+GJPQ7Q7dtVY0j1uhcKv56zrJCxJRMgkX7xSfE6pJrpFKpVaNt3NupPPG0HxwZFA880rdkGawg/ZJTfr/eiGFvEqNQLi0Q9csrG2A5UxbsXGQrr/F8+Bf0pUlSDfmiRbjg7RkgoW+wOLDdDvaX4xV8yVeV+8nUuH5U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=tjqZX0AN; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="tjqZX0AN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3FBE1C32782; Mon, 22 Jul 2024 19:36:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676970; bh=DeLnnNqaKgMl/0xcB+x46WxsWT6jNX6wQUj5lqlSQtY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=tjqZX0ANRV+Zhvp4JVO0kKvxetDFMb+II6ljs76rfM2uxWN4jgB3xe0B0+T61fl5q z91DtSgkJAJbubLLkt2jeXNfCQmhJFW5D0edIjLAiQkjEGzz2DKBVU65W8Wz6E6ZzH JCGDD4Lao+I7JHqAwsVnZk2Jr7+5mqFtCM+qx5elWzQOdveNx+plU7Kp63RqAXSEBr Kk8jwhU0N9BqSe9v00CEIiPjYueTL98T6loSu+UDJXH5Rz7/E0RhdzHzvVMDPMu3wH xrnWqK1Sl4wLGuPJbYXT55/WFY8n8sCPLknLUS5kvSfuFJrHXKnRPGdCRDWlwJ9Dq/ 85DjadGwMatCw== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:54 +0200 Subject: [PATCH mptcp-net v4 16/23] mptcp: pm: only decrement add_addr_accepted for MPJ req 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: <20240722-mptcp-pm-avail-v4-16-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1961; i=matttbe@kernel.org; h=from:subject:message-id; bh=DeLnnNqaKgMl/0xcB+x46WxsWT6jNX6wQUj5lqlSQtY=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSXLsxdUmsMdn2FM6/z2Do79poWfedTtpquf kfW8kwdIKKJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lwAKCRD2t4JPQmmg c4hmD/wLtUNuvPEhXnb9i5ryq6eXaEecnUbh4lMXpWDdhgY7+QubXzy3g2Re4Ns97Cla1f+PIqA +Gqiq+jZEhsAQoQuQG2uIbsNLD/YuXJiSX0XhpDkE+kK/O3CNc1G6322aRG7eQY7S69j2SU5zrw zsHjosoUzp28PaCcku/QV5bLLnANYYaiTd14aznMmIF3IM9gaLlX7jdpTIfuU2t0r8LM5ccwOjd ikgErOokomp9V5DIs9o7pHkjHuGymzXTNthu7JGrQ7/3+BV59w+iHodZsrj5gPqWDZRtlmU1NrS hPpo5+DWNsESDI/nP0/lkNmLfD+3otNzLKvtJWYwSIp38olkwy72E+XjkpFMdFFNztl4+vJQD4w 4pTieNnuJkDGla6/+sf8EiwsH4cN6J2s3BNui84yOuj/LGNaXe5L9txrN4k8KpcbhMeG+ymbZYl tK+VjRDeDcrlmzE/FH4sqFdJ5jNcxrYOoZU/dqYR75UlPKuJLoI3SRmaPto9MHiuOYIX24PXffs oZ1xrLsGVahDAQnHAZePktefLsFYQxaxG1ca/KtJU5esVEQrAW5KOJHoLqmang+NkTWPMmZI3x6 04Bta49RSyrfKPGAFnQCmT7EMq1aGUdOElkLTzxgtjAT89yU17cjOwcUYpWrBXJ6hbdp8l/Expd s0L3tcRZFA4KisQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Adding the following warning ... WARN_ON_ONCE(msk->pm.add_addr_accepted =3D=3D 0) ... before decrementing the add_addr_accepted counter helped to find a bug when running the "remove single subflow" subtest from the mptcp_join.sh selftest. Removing a 'subflow' endpoint will first trigger a RM_ADDR, then the subflow closure. Before this patch, and upon the reception of the RM_ADDR, the other peer will then try to decrement this add_addr_accepted. That's not correct because the attached subflows have not been created upon the reception of an ADD_ADDR. A way to solve that is to decrement the counter only if the attached subflow was an MP_JOIN to a remote id that was not 0, and initiated by the host receiving the RM_ADDR. Fixes: d0876b2284cf ("mptcp: add the incoming RM_ADDR support") Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm_netlink.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index ea942c9f998f..d040cf8af412 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -830,7 +830,7 @@ static void mptcp_pm_nl_rm_addr_or_subflow(struct mptcp= _sock *msk, mptcp_close_ssk(sk, ssk, subflow); spin_lock_bh(&msk->pm.lock); =20 - removed =3D true; + removed |=3D subflow->request_join; if (rm_type =3D=3D MPTCP_MIB_RMSUBFLOW) __MPTCP_INC_STATS(sock_net(sk), rm_type); } @@ -844,7 +844,11 @@ static void mptcp_pm_nl_rm_addr_or_subflow(struct mptc= p_sock *msk, if (!mptcp_pm_is_kernel(msk)) continue; =20 - if (rm_type =3D=3D MPTCP_MIB_RMADDR) { + if (rm_type =3D=3D MPTCP_MIB_RMADDR && rm_id && + !WARN_ON_ONCE(msk->pm.add_addr_accepted =3D=3D 0)) { + /* Note: if the subflow has been closed before, this + * add_addr_accepted counter will not be decremented. + */ msk->pm.add_addr_accepted--; WRITE_ONCE(msk->pm.accept_addr, true); } --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3AAE2171640 for ; Mon, 22 Jul 2024 19:36:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676972; cv=none; b=EAbxxS+Jf1rzNjRAtk/pa1Zn9ceE7UQLLEpf26ftpQLes3ltf2yEO17jl4VkdlNzwdUKtPqJmImj12e8P/sra+gTeKLWwLhcsT5NovypsGw0hOv8ZqwRuC01OsLGzyTnajqUGgV0Iklonhj3OPcMsAbBr09nN0weV7I1jA2ks5A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676972; c=relaxed/simple; bh=4X7QSjPZQ9mzFn+OP2ehOB27WgZnhWY1j3aQBdeEXgc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hvWNWgSzyTjTul39WPg9c/pQI8VPGicd72/PGLtYdG+bJ2HYjlgQCappVcrN09qvHgy7EUWGHJ2WyQC0VZmFwd7L7nq0fr8XsXmmrNCXn0wIBS0TEtTOtKC66Ly8H6yBLP9Qu3mKzC5irNBrYcrPQ0Ch1dJbt4njXIX45lcKW+c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gz0OA4zS; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="gz0OA4zS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 64491C4AF0B; Mon, 22 Jul 2024 19:36:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676972; bh=4X7QSjPZQ9mzFn+OP2ehOB27WgZnhWY1j3aQBdeEXgc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=gz0OA4zSoi/QarYmBrbHvFW4jvxJpdPI743TZqXGHwbEVrM/CLXEW55hKXm5QznPS DQTjliTvQdJ8xLZQ6nyISWypGkNyplYcsyV2cfqqtkT+XmSwwITkWHZEHWFMqol/LO 0WYTwm0gKRVELOFhBpFRn0Lzo/JBhaHHCOlNihRGim7/rNYR6y0ukiORIKoVYVwmg8 z6H+wSsk8kmRvMUbNi2KAfJwH0A+a1wQLgBye/lRyl3JRVouPXtRfp9Rdund4B2nKW 63ULvf/aMUDmXlgrT3VZemYkqbLukmgOlxdQLyqyt5cHISPVCW5UjlCBT+o0Y10WWq rXf6OmGnpzzmw== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:55 +0200 Subject: [PATCH mptcp-net v4 17/23] mptcp: pm: check add_addr_accept_max before accepting new 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: <20240722-mptcp-pm-avail-v4-17-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=926; i=matttbe@kernel.org; h=from:subject:message-id; bh=4X7QSjPZQ9mzFn+OP2ehOB27WgZnhWY1j3aQBdeEXgc=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSXmf9nDGT3MUShfaxuiRyAZ/B5ikf6VZ000 m6tIuY9YLGJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lwAKCRD2t4JPQmmg c36UEACDdktxWq6nNZ0cu8k/uVqQmAcObPxUt3P3rAidnoCP6BRspviOWBq82BgGhaXR3pK3KWt HAytSJ6lWJRwyAgwOg8uCW67vOQfpmdE1PzJPWr6Dut/V6bdCVoYTjyPoaBny/TOgzGd8Ie8XT/ xVLF7hH7hkDkqMJUhzeobHhA0bvMVQuo9UqkgG571LJWDIZ0t+U/9Q2UMavdgHMtAzAn1Doi6Ys hoaJzgNcdkKGMrtOdt5TaN7L/IQSkDrL8umW5ASVTarnMMsKNastMwc6CctBjjlLnWN2idYPjc5 NcYCQ2u+ij0zATIuPpBRFteR1IyolQ+jc+Y4bkYuioBS91APzo5fYo59sAtT+VzpjmztN67TdxX Ru/cOXD7cs+qoXCrG018ID8u1iVdU4WkC0edcY0nuqfcO8x6T2Y9qs0/iceY4X3eS6Qk+Uf6Z82 6BjNtu19h4viJE6by2/4qHAk0+Cc2LclHTPLIumstolPMyo+Urb4uJE8/hk4CQMnpsMWUpLQ7Q5 2tLEL9IEdtEInXiCev3SGNZY+qa7yyXxqmAFkivWANGUuSKp6rj2f0uVwZBxo+5WGf4tPuObdLz fsBXezjJxWlDaXy0Rjr7oPMn+Ttg4PJ9RUB96O1LUZmk/T8dbG25JPJqKFu6652QUvzHf1GepjI VsU56Uy056YP5UQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 The limits might have changed in between, it is best to check them before accepting new ADD_ADDR. Fixes: d0876b2284cf ("mptcp: add the incoming RM_ADDR support") Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm_netlink.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index d040cf8af412..b6086e9c7fc8 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -849,8 +849,8 @@ static void mptcp_pm_nl_rm_addr_or_subflow(struct mptcp= _sock *msk, /* Note: if the subflow has been closed before, this * add_addr_accepted counter will not be decremented. */ - msk->pm.add_addr_accepted--; - WRITE_ONCE(msk->pm.accept_addr, true); + if (--msk->pm.add_addr_accepted < mptcp_pm_get_add_addr_accept_max(msk)) + WRITE_ONCE(msk->pm.accept_addr, true); } } } --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5BC87171640 for ; Mon, 22 Jul 2024 19:36:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676973; cv=none; b=m2+mJ7QCz+iq6irx1s860CFge/SY7dbrcgmO57Ee3lJol3coluQ7Tp5oIUqaWRt3M4ZhDi8v0mILSRxVRTWUew6E8h33Xknzqm3L7kGk5slwi8Qw57iMWZJZxPREWJ02wjLMLHm1mKo24YhYc7ohBN6o7EUp0c/oTu+LamOWwIo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676973; c=relaxed/simple; bh=TWpomIPCHdgqln4Z9R1XvaM1nsH19QkgyOXDZ5F+sDQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=U16JOupd96Ca4ccjieUuC7S4ZxyuVEvQ3oXwpDkPS9BtgaPuDLQPu4rkh6rf2eiNIyU5xcGY0RDL5vwirBCtimJ5W+YiMAVA8ZOkORctMW60oHPq65YpmWbvvM/ewuvNo0ERJPbvN+FOB1zk3nLAT0uElS0V+2s1/LfPHpC1J5E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MoGSD3I7; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MoGSD3I7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 881FCC116B1; Mon, 22 Jul 2024 19:36:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676973; bh=TWpomIPCHdgqln4Z9R1XvaM1nsH19QkgyOXDZ5F+sDQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=MoGSD3I7v5ECR0nPGiN+Z/BBdLklrbLhAocIhYZz6OQcTpDWQeeRyCQMUF53k2pAy KzCUZuIzvQYtirPSJSbRdBwB01YJMtLTI/RRaVG9oJrCSr4ra31OckrYe/TGsuXiWQ mPITh7F9mlj1P7F7XErbpOCbCcG5EUvzSU8axUbgLVZU+LzslLeRZah9H7/18eSBX/ 3Mf5BDJlM6MSOXTI9tP9R3J2UYmLu3aNios5Nr9nTR4FPsW0eZPXgjZVi64ak4z2C7 zDiUds6eM4WAYI7lh14LJEog/jLa7LDV7TPnNXvvKzVZ8ZRPqPCawP3soY/JhzrimO mjlprn/HVDhew== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:56 +0200 Subject: [PATCH mptcp-net v4 18/23] mptcp: pm: only in-kernel cannot have entries with ID 0 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: <20240722-mptcp-pm-avail-v4-18-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1493; i=matttbe@kernel.org; h=from:subject:message-id; bh=TWpomIPCHdgqln4Z9R1XvaM1nsH19QkgyOXDZ5F+sDQ=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSX7E6f4BXtyBWbZFG2Nd40NFDu0Cy2HlowO bQP1GduY7eJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lwAKCRD2t4JPQmmg c555D/9ZZD0fBRw+TQtyoUdMZlUjQ/vFEy7epHnbVS8MAfGrJzKJtazZraPQB9UXQ0qv58IDF14 hIpQIO46s6xrz/G5cjNHFNPRFuzVrZKM6jAtqsmFTaBQZ84sdhHEK3L623ujnyY/8meXuza/xkj kJsoCJHklkPRA+p1nDN8DVo+mHekuEEBX5tK0St+/BrBdlcpmuTqu0BCvihsn1WQgGrM3m3iDvc sEoUyWnzLywT/LfSEZMqCOBZvj2Rsz3wd826lJ4xtIdlQUgMf1XUtjOuZhEBiTMe0KNoLdCjIja 1uVCoEPvx3DVjIDcHuyRB4Co3UI4CsQUqLAXvry3p/UcEnUuZsWH52LEUwpYbCJgdivDnhCH6T9 g3IrB3EHDL/HljeRubTYSp+HPUXIDgQYDGC0lnxUcLAzF5tgA25EgNK02eS+k5ytOS4oINkIpin NT0yeSBRVAHH6TNRoqbHY9SF2r9ezayzS6I8NPffPNKAT1mcfX+HsWcl8YWnZe0cKPj15GojMN1 q/zvtmPcSqxEgg7G79c1Lm6X6avm6obRhivWd/jKyvN0yZQl8CwlZNhQNj0AyDcKy9Pf5vFvQPG /cAkP2g2QHG/mnOMdFYW0/B408BCShlgTv6HCkXE0IL1dhu36xXGfOCrsp2D5bW+XjyVLq8RI0z 0386cYxalRlud4A== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 The ID 0 is specific per MPTCP connections. The per netns entries cannot have this special ID 0 then. But that's different for the userspace PM where the entries are per connection, they can then use this special ID 0. Fixes: f40be0db0b76 ("mptcp: unify pm get_flags_and_ifindex_by_id") Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm.c | 3 --- net/mptcp/pm_netlink.c | 4 ++++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 1f1b2617d0f5..ddad51210971 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -422,9 +422,6 @@ int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_s= ock *msk, unsigned int id *flags =3D 0; *ifindex =3D 0; =20 - if (!id) - return 0; - if (mptcp_pm_is_userspace(msk)) return mptcp_userspace_pm_get_flags_and_ifindex_by_id(msk, id, flags, if= index); return mptcp_pm_nl_get_flags_and_ifindex_by_id(msk, id, flags, ifindex); diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index b6086e9c7fc8..ec23bb32862f 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -1378,6 +1378,10 @@ int mptcp_pm_nl_get_flags_and_ifindex_by_id(struct m= ptcp_sock *msk, unsigned int struct sock *sk =3D (struct sock *)msk; struct net *net =3D sock_net(sk); =20 + /* No entries with ID 0 */ + if (id =3D=3D 0) + return 0; + rcu_read_lock(); entry =3D __lookup_addr_by_id(pm_nl_get_pernet(net), id); if (entry) { --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7ED00171640 for ; Mon, 22 Jul 2024 19:36:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676974; cv=none; b=FyNJo/qqn+lde+P3F5vVzyIwOvhYOvGo8RKolKDJk3zVAeqLrfyaloD4L8QOv2foSdLY0sFnBs58mMhjEJ8he0NJSNvyrA0F1SYoj/B/yQORMpmAfnc8Y4p3ZYmfnK3e2qYORDQv6ZZ8iKH01Byua6AOhxzIRr8yJ9N+UCXecOk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676974; c=relaxed/simple; bh=O8Iu5MYAsOMjwlWVDXEjbmXBzNq6+yIhkRZl0uBMg8A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YNBv1PW6tLFH+tqY8InARVzKz3Ujs4lpVuEtwF1SWpalfdmc0i+nxi8qII0GMrhKgnbb9V/Qxw9j5Fyh5aQCmGJD0k+J79NkCOeLOz5uWcMVEMlOnf0FL5F8Pnl5dwgV2QNwqHobRBRdl01tF7dHV7hPqyrk2/Fc5RL9orEhoUI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=coMe0NrV; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="coMe0NrV" Received: by smtp.kernel.org (Postfix) with ESMTPSA id AD22BC32782; Mon, 22 Jul 2024 19:36:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676974; bh=O8Iu5MYAsOMjwlWVDXEjbmXBzNq6+yIhkRZl0uBMg8A=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=coMe0NrVPpGVGsO/Y8ktmTHxuIaRV/5RqR9ynfih4xef0QllhmwTHNRZd7UxNEY0b 69loY5L7czI08/tk0U4iU78u00pj4TFAO/H4gxjMzlKUEXJ3idMXAumBwxV7bvSVmW zzknN0frNsJ4TF1LuzNOIUjhPbKYgrfQFW37h+aAmba0pjqjAAZ4spAMbIjPF6EJ9q QW3DVklRDL9MUFYV89Kb5mWmwGEswktTjQh0HS4DP7RHPyW9gqbDkNma841b2Co6Vg H+P0wv3/6YwoIYgZz53TMG2+QGS6pUA1CVs432ZY4A8EFGZ1TNHGopnyZgSJuP6Fwo HpnT91nNbh5IA== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:57 +0200 Subject: [PATCH mptcp-net v4 19/23] mptcp: pm: fullmesh: select the right ID later 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: <20240722-mptcp-pm-avail-v4-19-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2053; i=matttbe@kernel.org; h=from:subject:message-id; bh=O8Iu5MYAsOMjwlWVDXEjbmXBzNq6+yIhkRZl0uBMg8A=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSXTrIU78J+oAPZTC2dx+45O0S/z+5MqsCCg Q49cSPvttSJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lwAKCRD2t4JPQmmg c78zD/435reFAtg7UyTOM+eTzDE3SIgOOdLARYZ5kYSUIXipU2+UPai+VzMGGLVog2SjJIjn4qr VTtSjNrH22HrJuezNya6f3pcCnm12YemM1qNsiyT22d/VqO7v3/B3d/OVfeg4RYZTLSTB8nB4rI VinjSDebxyu5jW67WfIHsNiz3tpBGCwqpLA/PVzfg6toocrz9ehMoo0QDJf3nt8xQQmI0NGdcO1 GgJcWQoALtzKBvOYfrzMdehgnEx9WSbgGnFNQtvvPAw+VEZnRbGn0fhKnrsBby8xmHsYh6zXJw3 ArjX8MNPjVdWDPc4ZrVWHH5R+pTLsulPwxKEhN88drv3CSRwpgKQeuA3WZAwq2Y334voLaH/7vt 1HlzjhPyFr1yDwjQ9o5wpn8KrL25FQuubChxPHOIi1vF/yF42666irTDQz3pZ8bc7p7nLasqplh ECUVzmgxXZSRgtDJ9SPHjwp9XmiiNH4jLaihf58GCT46PtQCzWcyp0VIik1MNRMXhT2NQHy3E8X g7n/fWFKxi8whJdGOQrny6oz6gHCBJdgg9rzIWPPO8iQxShJ/k9Mtd9zcpt8ghy4EDllkTTXb7C op7uMnE7zzqSbhSzQsidM2fmNtbmqVj49/VHEm77v0Cv9q4c6q9OJtym+EV6PBi4H5QbZEeuxQT oqh5oQwFWuk3XyQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 When reacting upon the reception of an ADD_ADDR, the in-kernel PM first looks for fullmesh endpoints. If there are some, it will pick them, using their entry ID. It should set the ID 0 when using the endpoint corresponding to the initial subflow, it is a special case imposed by the MPTCP specs. Note that msk->mpc_endpoint_id might not be set when receiving the first ADD_ADDR from the server. So better to compare the addresses. Fixes: 1a0d6136c5f0 ("mptcp: local addresses fullmesh") Signed-off-by: Matthieu Baerts (NGI0) --- Notes: - v4: - Check that msk->first is not NULL. --- net/mptcp/pm_netlink.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index ec23bb32862f..2c335202aafb 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -637,6 +637,7 @@ static unsigned int fill_local_addresses_vec(struct mpt= cp_sock *msk, { struct sock *sk =3D (struct sock *)msk; struct mptcp_pm_addr_entry *entry; + struct mptcp_addr_info mpc_addr; struct pm_nl_pernet *pernet; unsigned int subflows_max; int i =3D 0; @@ -644,6 +645,9 @@ static unsigned int fill_local_addresses_vec(struct mpt= cp_sock *msk, pernet =3D pm_nl_get_pernet_from_msk(msk); subflows_max =3D mptcp_pm_get_subflows_max(msk); =20 + if (msk->first) + mptcp_local_address((struct sock_common *)msk->first, &mpc_addr); + rcu_read_lock(); list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) { if (!(entry->flags & MPTCP_PM_ADDR_FLAG_FULLMESH)) @@ -654,7 +658,14 @@ static unsigned int fill_local_addresses_vec(struct mp= tcp_sock *msk, =20 if (msk->pm.subflows < subflows_max) { msk->pm.subflows++; - addrs[i++] =3D entry->addr; + addrs[i] =3D entry->addr; + + /* Special case for ID0: set the correct ID */ + if (msk->first && + mptcp_addresses_equal(&entry->addr, &mpc_addr, entry->addr.port)) + addrs[i].id =3D 0; + + i++; } } rcu_read_unlock(); --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EA9E517109F for ; Mon, 22 Jul 2024 19:36:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676976; cv=none; b=G1NaTdGKVENsfA5H276NmbZt99g0tKaZnmjOjbO8dSKN3Z8wcd6lHuO4lSy+7rVuM6EvIIP8RojAg33dOfERGF1imy06T/8mtHT1ItJm6qrGsGt+VagEsEqk7N2m1dMNsQqFTZJE+Cju6fM9kePVVdSuCzXgIGNNxIU7xFg2pu4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676976; c=relaxed/simple; bh=tZmsTr4h7z/PWxZXsPVa1fhv9uKUkReD+8TToEemtVo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=F+PFXIY3nT33kojMVkLctm0KGAJbECPaOsy2CPBooIKmX1HK9yEqZHiMgqEKy/Er93Zi7pKKWGtuy+JCBKGYYb6cJi4Q0oNvrEj0COcdJST3AO59bVimAkaCUqdqlapEGwMwVAiD7nGzqJDaAWCxtX2tuMVEH64KhdKPRKiHxsU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bQKBakj/; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="bQKBakj/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D1568C32782; Mon, 22 Jul 2024 19:36:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676975; bh=tZmsTr4h7z/PWxZXsPVa1fhv9uKUkReD+8TToEemtVo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=bQKBakj/En1/25Y+CzA6zDglqvTXyxIcbS8hsBmbR/a53TRGBnG7FXuzZ1nSa3f0e EYh8wVUo6R+aUIEHe48mcjR905rgUz/GFHwUae2WagAJBhPXA52H+GlavbR61njwzc 2t8LlR3bkBrD/z/B9WxRMLbRKj4F8Vy4wMXF+bfPhhWer4rgoK3pIWfgAIuMuk+Ogi 7vSV2PARh4ejPhdlXWUT+Dv25bhmwhh0v1sAibqhemuYaHe3FVxUdFFm4UIYLPpeVp x8QgNrgJqd9tw+AM12UeXF6ddlm4MYXRD43EjxHFmGZwzyY+FeATdZn2NVkp59/Y9V ZTUxNtNaqA+DQ== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:58 +0200 Subject: [PATCH mptcp-net v4 20/23] selftests: mptcp: join: validate fullmesh endp on 1st sf 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: <20240722-mptcp-pm-avail-v4-20-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1198; i=matttbe@kernel.org; h=from:subject:message-id; bh=tZmsTr4h7z/PWxZXsPVa1fhv9uKUkReD+8TToEemtVo=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSXVWG2sXLadwkPcnkortDPzl8YAJpEglh6R d2gRwYnbVeJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lwAKCRD2t4JPQmmg c72TEAC4UYLX4F6ofkdeV+nTP9RdigYI65U6yfRuGhmEWIltQ1ezS+YNVWLXmMul2rGcNz/xDik +N4hHLCfeW2BA8vNtTGU5sI18R08yhKTplJzQVwx728L0OWJlFpJfWUby31ZRSuD/IqG4kP/kum HBw9ryUQEpFsRJifzA2zBzZqyDEnwoCipRdpyI9XS2bil6rZkfOYmS22ZZl3jqc8SbHmvXBcTbK +T5EfrZpOTFFKwqoaMkyb0MzDaW2jQzEsXhs7NSI3E6yGW/msJGwmxtqd7CEeTwDnxa0klI7Ef7 Qza0GscRz6jWOLHsMxD3wUmAEyimJMfs/8/DXG8l7XxPL/O4gXyU9LMEDtQDBiEkx5KBD39R+ig pcCn8g0N0R9UuxBcS9FlWyJKH4eRN35AWm1V4fxtlqee9U4wFISGuVU/Nxcw0V76tfaxg7Rdwn/ muMfCpVjrOilOlqhK/85B9HQI00f6A3BF0KvRhKsIRsH0lnf0UPBLChoFzVq81kDxG69GDVvW9Q fw1jfz2dh4NJ+JXzX3DtuKoqrKAg9FJ+wW7plE/XDaAOVQWXBhtb5A3OJ4pyfjXuv3vJtwpdc7k GRWtGk0EbSXggMVroarDb2lcoeRYpBbxnx0rNyfN7t+g84xnzy7RhldCLYU4f5vxpD34TqAoi22 ziT57mCtlx1Lqlw== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 This case was not covered, and the wrong ID was set before the previous commit. The rest is not modified, it is just that it will increase the code coverage. The right address ID can be verified by looking at the packet traces. We could automate that using Netfilter with some cBPF code for example, but that's always a bit cryptic. Packetdrill seems better fitted for that. Fixes: 4f49d63352da ("selftests: mptcp: add fullmesh testcases") Signed-off-by: Matthieu Baerts (NGI0) --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 3565d8b48125..c4bb390933d6 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -3014,6 +3014,7 @@ fullmesh_tests() if reset "fullmesh test 1x1"; then pm_nl_set_limits $ns1 1 3 pm_nl_set_limits $ns2 1 3 + pm_nl_add_endpoint $ns2 10.0.1.2 flags subflow,fullmesh pm_nl_add_endpoint $ns1 10.0.2.1 flags signal fullmesh=3D1 speed=3Dslow \ run_tests $ns1 $ns2 10.0.1.1 --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C82DC17164A for ; Mon, 22 Jul 2024 19:36:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676976; cv=none; b=e/sxixbsespzAZ+z0rf2OBY47kBdCwm6YgqtuktPulR5xQU+Ten4by9s4D2lBTThLAwmNjeeHUNAn4jvyAJSl0VDmz/wYXow3AnG5lIvvvFGUWAxnFkzrYVGcreFIebbsxpDDckYXcLXIAGRAQ1xRCn/SUesPCjzURTU5FJ+agI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676976; c=relaxed/simple; bh=1aSC34adX9MvBBLUjIdTdbm+F8mIL4DdjnonVqglugc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GagUdYQfQaq5JvOflcD83UjuKppYZXGLvUQxJJ2aWJZzxTPi0DRz8H17nBlxz577u2Tc1R6ReiKVoScbfUOtGGflNM4O3rkFDVyHsea6+zqIrSZbGMHz4IydNR0UEPpdQhHb47LWn/uCiSWWyhfcAfi1ldz0g8YMVeI/k1eJmLM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=j30kiuFz; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="j30kiuFz" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 00EFFC4AF0D; Mon, 22 Jul 2024 19:36:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676976; bh=1aSC34adX9MvBBLUjIdTdbm+F8mIL4DdjnonVqglugc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=j30kiuFzpGa36x5YtEe1wry/lgw+JzoFH0RRqq6zrPefaYnBPJ2w3+IvkM5uH0NMO c1VcK7t94r2A5o0RkdOz8CRC0gDuVBItxTNi9SVQl+BMVoANAM+2INsDxeUYxL6BAt raWazVHBwkv8wnC+QyZ+Z7PUzIQgdaJDV12gn+1erggxKlM+A1SLg8AGlUotD5Qj7o 8HaNnLB5ddSkeBd/KGZn4/hCh8/dqPfMrq+SSD9BiCRMOtYoyX8RvaJjPqgytT+eJQ IMNhc48KAe/h/X/RLQlxxZD0Ha2K7R2bQMBNQ1iZV9ZRAysXSSbqDf5R+HD6H6/uBJ p3828bj0AsmOg== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:35:59 +0200 Subject: [PATCH mptcp-net v4 21/23] mptcp: pm: avoid possible UaF whend selecting endp 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: <20240722-mptcp-pm-avail-v4-21-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=5510; i=matttbe@kernel.org; h=from:subject:message-id; bh=1aSC34adX9MvBBLUjIdTdbm+F8mIL4DdjnonVqglugc=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSXp12qiImCHuEWJCz1w8Jw15HDnesBV0PDF W20oJ1/j9uJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lwAKCRD2t4JPQmmg c5yOEACz+6QeARyfdHTekFXr95XZWB9EDAvYdl28miIZBR6dVnAtIAWZOFg7PFVVftnG72rNtIk TBhCqAFx+Mr49T64jFizvr7XqEbAwRVUdAZAbkwDz4Y/vTGz1HFo3QxodE8FDU3z9CzQ+JmBdq3 poryaKqPMX0Z7x2JLrsmdnukib4/AA+Nv6n8z6oSRgKycRGdlLy8m8aU5ewCfayvcIa4yMyhI16 z8EwKYfI+L3AnLgSL3QOqdUk5//h74VrTqO5kK8rA/pn+v6BJE379ZaXIURdZLGDUAsodyyp0Ej uP+i7yafDVbzPGg00FeJ8CI7xb8HolkrI46vA3cUrt6+N/4MQF4JINZpaNVkpQAhR88pnXU9MdM LDGk4kfa6KI7ALf5rdTGpvmoDGiPPuOdgaWB461fhNajJZJ5zJC/gKh+Ij88uwBNQ41XTD0f/kO rrsfV5ipcqKDDVxq9H/sULxmZtJgBjr/SdyZzTOC6ZnqyllGXHY9xOJFwiT2lxD1dtn1U7QsuYB sBIZOC+Lp3NtwiNvkMDzT2MW0Bl2OshWGQLNRidSP9L0rf6SfvVQEfJkAI0LZuR0KrKGP4nZ5Y8 w3M+dD2ExPfvhXxn+jaKKDg4EMlC+fhmmhf+9bUjovC2NELrWNu/EyI53qzVsJEM/BT6Zjq2l4D 7vTDVba4EVZvOrQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 select_local_address() and select_signal_address() both select an endpoint entry from the list inside an RCU protected section, but return a reference to it, to be read later on. If the entry is dereferenced after the RCU unlock, reading info could cause a Use-after-Free. A simple solution is to copy the required info while inside the RCU protected section to avoid any risk of UaF later. The address ID might need to be modified later to handle the ID0 case later, so a copy seems OK to deal with. Reported-by: Paolo Abeni Closes: https://lore.kernel.org/45cd30d3-7710-491c-ae4d-a1368c00beb1@redhat= .com Fixes: 01cacb00b35c ("mptcp: add netlink-based PM") Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm_netlink.c | 64 +++++++++++++++++++++++++++-------------------= ---- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 2c335202aafb..8f25690a5edc 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -143,11 +143,13 @@ static bool lookup_subflow_by_daddr(const struct list= _head *list, return false; } =20 -static struct mptcp_pm_addr_entry * +static bool select_local_address(const struct pm_nl_pernet *pernet, - const struct mptcp_sock *msk) + const struct mptcp_sock *msk, + struct mptcp_pm_addr_entry *new_entry) { - struct mptcp_pm_addr_entry *entry, *ret =3D NULL; + struct mptcp_pm_addr_entry *entry; + bool found =3D false; =20 msk_owned_by_me(msk); =20 @@ -159,17 +161,21 @@ select_local_address(const struct pm_nl_pernet *perne= t, if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap)) continue; =20 - ret =3D entry; + memcpy(new_entry, entry, sizeof(struct mptcp_pm_addr_entry)); + found =3D true; break; } rcu_read_unlock(); - return ret; + + return found; } =20 -static struct mptcp_pm_addr_entry * -select_signal_address(struct pm_nl_pernet *pernet, const struct mptcp_sock= *msk) +static bool +select_signal_address(struct pm_nl_pernet *pernet, const struct mptcp_sock= *msk, + struct mptcp_pm_addr_entry *new_entry) { - struct mptcp_pm_addr_entry *entry, *ret =3D NULL; + struct mptcp_pm_addr_entry *entry; + bool found =3D false; =20 rcu_read_lock(); /* do not keep any additional per socket state, just signal @@ -184,11 +190,13 @@ select_signal_address(struct pm_nl_pernet *pernet, co= nst struct mptcp_sock *msk) if (!(entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) continue; =20 - ret =3D entry; + memcpy(new_entry, entry, sizeof(struct mptcp_pm_addr_entry)); + found =3D true; break; } rcu_read_unlock(); - return ret; + + return found; } =20 unsigned int mptcp_pm_get_add_addr_signal_max(const struct mptcp_sock *msk) @@ -513,9 +521,10 @@ __lookup_addr(struct pm_nl_pernet *pernet, const struc= t mptcp_addr_info *info) =20 static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk) { - struct mptcp_pm_addr_entry *local, *signal_and_subflow =3D NULL; struct sock *sk =3D (struct sock *)msk; + struct mptcp_pm_addr_entry local; unsigned int add_addr_signal_max; + bool signal_and_subflow =3D false; unsigned int local_addr_max; struct pm_nl_pernet *pernet; unsigned int subflows_max; @@ -566,23 +575,22 @@ static void mptcp_pm_create_subflow_or_signal_addr(st= ruct mptcp_sock *msk) if (msk->pm.addr_signal & BIT(MPTCP_ADD_ADDR_SIGNAL)) return; =20 - local =3D select_signal_address(pernet, msk); - if (!local) + if (!select_signal_address(pernet, msk, &local)) goto subflow; =20 /* 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_alloc_anno_list(msk, &local.addr)) return; =20 - __clear_bit(local->addr.id, msk->pm.id_avail_bitmap); + __clear_bit(local.addr.id, msk->pm.id_avail_bitmap); msk->pm.add_addr_signaled++; - mptcp_pm_announce_addr(msk, &local->addr, false); + mptcp_pm_announce_addr(msk, &local.addr, false); mptcp_pm_nl_addr_send_ack(msk); =20 - if (local->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) - signal_and_subflow =3D local; + if (local.flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) + signal_and_subflow =3D true; } =20 subflow: @@ -593,26 +601,22 @@ static void mptcp_pm_create_subflow_or_signal_addr(st= ruct mptcp_sock *msk) bool fullmesh; int i, nr; =20 - if (signal_and_subflow) { - local =3D signal_and_subflow; - signal_and_subflow =3D NULL; - } else { - local =3D select_local_address(pernet, msk); - if (!local) - break; - } + if (signal_and_subflow) + signal_and_subflow =3D false; + else if (!select_local_address(pernet, msk, &local)) + break; =20 - fullmesh =3D !!(local->flags & MPTCP_PM_ADDR_FLAG_FULLMESH); + fullmesh =3D !!(local.flags & MPTCP_PM_ADDR_FLAG_FULLMESH); =20 msk->pm.local_addr_used++; - __clear_bit(local->addr.id, msk->pm.id_avail_bitmap); - nr =3D fill_remote_addresses_vec(msk, &local->addr, fullmesh, addrs); + __clear_bit(local.addr.id, msk->pm.id_avail_bitmap); + nr =3D fill_remote_addresses_vec(msk, &local.addr, fullmesh, addrs); if (nr =3D=3D 0) continue; =20 spin_unlock_bh(&msk->pm.lock); for (i =3D 0; i < nr; i++) - __mptcp_subflow_connect(sk, &local->addr, &addrs[i]); + __mptcp_subflow_connect(sk, &local.addr, &addrs[i]); spin_lock_bh(&msk->pm.lock); } mptcp_pm_nl_check_work_pending(msk); --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EC021171640 for ; Mon, 22 Jul 2024 19:36:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676978; cv=none; b=blXuog9TRGSnGPO4I8RddxYxyowr58Y2bTrojL3WgyDfVDU6NDMZ4rkRJSe5QkEvZWSZWcMifhquiSktt6+ipPqUQBYUJHJKYeml+Kchi5TqtkWIk7lj/Hjgz0Il2thN3cPbyTFlOSo0h8/aiP0V6B/ceK2gdL54RsNXBNgT9wk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676978; c=relaxed/simple; bh=X8bl3fhBszP9BOCL47xtWzAYFgdUJpGalnzJDNqrsyI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=O6mNbiCUelOggt25DYPOTPUwV16Lh0BdnYmqw6xiskjwZG8xz1UCHZyTfL3A0Ysw+psZDgF+PKNcKPZ/ou2nwp5X8NM1Fv14O/ayaG+bBjH+Mq5qvFqbBHHjuepG5en2Wnk1SyTtTp6K3+PANTCTCDfd8I9czZGy9cfQin5SfYs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gzociE6P; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="gzociE6P" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 26A7BC4AF0B; Mon, 22 Jul 2024 19:36:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676977; bh=X8bl3fhBszP9BOCL47xtWzAYFgdUJpGalnzJDNqrsyI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=gzociE6PosLT9hxu0VlKCtxKzk4UkVj0aN4yvKJBqRhH1UU+tQZfs96XJ3wcFPo77 tbRcD/UoTcMCSU+XoUluBZyfTiL38fW/jMArCDJZ4j2Yrsq49/DqJww54EWjMS+FJV m6uMdmzKbKJYr4H8UJXcsHZkJWYw7Ha041hS1LI8xDu+IoQrb/H+h94w4kZQqglOIg 0JppuPDxg7p4ifdME95ADrQdirX56qIludtCNBAjSLjTq+KVIkwkMYxIrnuhkR8b4V vDHPu7VLAhGIh0TkK0gEB2pBbXJzLeHlCup/tZB1m0+dPiFn1udIIgKwo8+bnlyQST SDvNAasMhiypA== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:36:00 +0200 Subject: [PATCH mptcp-net v4 22/23] mptcp: pm: reuse ID 0 after delete and re-add 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: <20240722-mptcp-pm-avail-v4-22-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1413; i=matttbe@kernel.org; h=from:subject:message-id; bh=X8bl3fhBszP9BOCL47xtWzAYFgdUJpGalnzJDNqrsyI=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSXLEdxbovDX62BdiQgLO7DMCEykJu0AD+dT Wq8b6m0dneJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lwAKCRD2t4JPQmmg c0o5EADJnA2xmMYb3vIdqFgH9jHRm1clIhlXCxWvLgE2uBMY+jwKIBtiiFFId4LO9V0g9ox3LSt GN1uyxXWg5X0TG70yfRdhwwHDqzbnlt1WEr3MRxlLyEbahyPSwPTsFnXCGkrOcAA58BDl6Q6z1v Q/q8UiAHuxzfi9cVB5SOJUCEMkClZQIKTuur1Pjstu/ceufPtssf95QbpG+SsYZd7UcT9QAQOtY gQ5iL3VENtRmKEK06SB2jvYVqJ0u6cHLzIa36ErDhGRNZF98Z+XpdP2qKbA6PMDygk1Jf669rM4 b/9Nr83e2ZL4GhQD9Mf7+qx3Nc0ykJrNawRscovsdAPQHLKO3SEkFF9a5tq+RHO4/zLrV73Y3TR crkSskZy1J01a+CBsGuWVuN4PivEMMWA4QdGLuMwMgaiAQDTgljAp0uSuL4Z1WecLiJMm/4LiSa oTjMhePvMT3RiGSgza1MVJIU7Mqr3Wzv0Uh/2SAhRujKIV0hKeGy6CL0d/FjBplABwQkNpMMwhr ZCkua7LgHz3CdBQtynwpYJQx8tx3KqYjIFgDTTS9OKe4JAfjG/zUoldIe1Irl+LBhwjiLchaenu os30/GBbX+jpgBdbPzBXTQ8ibkGuswhRCNOXJahgG+5MEgCRH5i+luue3WJ0TpO8peJ+YVARB97 kl37+FIGYkwGpmQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 When the endpoint used by the initial subflow is removed and re-added later, the PM has to force the ID 0, it is a special case imposed by the MPTCP specs. Note that the endpoint should then need to be re-added reusing the same ID. Fixes: 3ad14f54bd74 ("mptcp: more accurate MPC endpoint tracking") Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm_netlink.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 8f25690a5edc..45a1aa0a40bf 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -586,6 +586,11 @@ static void mptcp_pm_create_subflow_or_signal_addr(str= uct mptcp_sock *msk) =20 __clear_bit(local.addr.id, msk->pm.id_avail_bitmap); msk->pm.add_addr_signaled++; + + /* Special case for ID0: set the correct */ + if (local.addr.id =3D=3D msk->mpc_endpoint_id) + local.addr.id =3D 0; + mptcp_pm_announce_addr(msk, &local.addr, false); mptcp_pm_nl_addr_send_ack(msk); =20 @@ -614,6 +619,10 @@ static void mptcp_pm_create_subflow_or_signal_addr(str= uct mptcp_sock *msk) if (nr =3D=3D 0) continue; =20 + /* Special case for ID0: set the correct ID */ + if (local.addr.id =3D=3D msk->mpc_endpoint_id) + local.addr.id =3D 0; + spin_unlock_bh(&msk->pm.lock); for (i =3D 0; i < nr; i++) __mptcp_subflow_connect(sk, &local.addr, &addrs[i]); --=20 2.45.2 From nobody Fri Oct 18 06:14:31 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2A9AE171640 for ; Mon, 22 Jul 2024 19:36:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676979; cv=none; b=L2TK05FF69seShjyN+ReiBBThwdhKL58V3V1Sc5d5sTMGfDbdle1wWVOb2MI9js4QHdWxYzr19dvur+grxCBBnF43BVme2ZCcEDH6/XXJy6P6uEf+iXDYWOOZNAWh880hYCV5rpjp9AVfpdebJQk9RyPIeUD6yNIjbI5HO9LGQU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721676979; c=relaxed/simple; bh=D8/2W8TEqTlnYbeJtESGqmOUdofeKNTwfGYnPnZXBdY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EYidNbg3VRuwtJNtPBxzSWov/wUoxWCy/0plcccGM8FectcpW4ZKBS88jJkti1YYEdWQ5KAonvUYRhLQ6F99xX86aJ3NW95XO0ehf+RDjYHcxblyQ/qEWijkbPtIE/BKrvjal6eXUlIPjx6F9B1DY7uxitDH+XOsos0xUcgWD0A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=s/AxSRaF; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="s/AxSRaF" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4AC7AC116B1; Mon, 22 Jul 2024 19:36:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721676979; bh=D8/2W8TEqTlnYbeJtESGqmOUdofeKNTwfGYnPnZXBdY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=s/AxSRaFdullc+MSy30grmPIREofNN+XDxS0MLV298ZBvksEJ5QebIEh6sC6c0M9+ rNl1yJ09etE8Nfadc2Eq1KAXBHIQVG+P08J4UxLX3s7CZakj69dTV3XexfgDHUD9iz brQwcJZDiXKkad6AwUDvw8U783KPMrcKTd9fePPBWp1F5E1TIFyEsyKIdG4JglkzZy SsAUc/Gyb8vDIjip5lKRrID8U2xAUMu/6HgkEOYo9zYXB4D1uALnxnxdjQBDe1yJhX iokQ9/5TFVjhakINxWbhFxGcJAVhbCLetY/e8l+XmPiw7zyI/areYIkV1RNLQqVqkS 6AOhR6uCV1N2A== From: "Matthieu Baerts (NGI0)" Date: Mon, 22 Jul 2024 21:36:01 +0200 Subject: [PATCH mptcp-net v4 23/23] mptcp: pm: reduce entries iterations on connect 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: <20240722-mptcp-pm-avail-v4-23-15bfd73de384@kernel.org> References: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> In-Reply-To: <20240722-mptcp-pm-avail-v4-0-15bfd73de384@kernel.org> To: mptcp@lists.linux.dev Cc: Paolo Abeni , "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=11395; i=matttbe@kernel.org; h=from:subject:message-id; bh=D8/2W8TEqTlnYbeJtESGqmOUdofeKNTwfGYnPnZXBdY=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmnrSXpXQxWM2lGju0DdDSZWNh38m80MRUa6fev +fVkLgKg/WJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZp60lwAKCRD2t4JPQmmg c1hHEACgA7xDP3PyM4Kio4LTEzUE00OAS4UE7ljsDykyqWmE79iP6VgsAsH3xeXNgX4Gfj/fc4f ygqaGnkwrbzpaN4Ug/Ee0v0brCzmTWzt41h0UoFvzBl6KlHGZ2DWPUARVriCokvbjBsWGruC4Iz UdhcRCNNgVpqnvXDB0Pg5mcxuj3OI0CKQ4eRJHKE4S7V+LrXjCRKICZDHAvID4Mt/aPffKi+M/e hrjWGaFIN4XRKJzPWw9T+7lPhCl33tZgUPnubv+4nNsikonRc1ER2EG6eZRIbvuOndyowpEpZo5 n5fgaHuX+0pRtTtEvoqiY7pNZxv5RCTokVwnzMS+o5Ecx6bwy5DJZhvuHg0+vyI38iPoT3V/HrE j5TTSXu7yTwCRqpY5pfXQf4HBdr5KgeL81xp+gHTC/yZk4r1NiIWTCgXXGPZBQYzK0B/HaFN8NO XqLfz2PHXbfsNlgGHBcx+phx8qNQ+fsCcnhvucCiELb0QXRpxwFqhuOtTvl7qQJTp+i7Vy3F4ci n2niT9RiCgVBlfzoEGOLGnxePQD86T/NhS6QN319mXnmGTLOZ5M2GSJvS7u5RMsnjLSOti1tM8y +VUi9rvHd7R4wVFy9DSQ8ySFpPgxGOpwaDBynxyvektNo13zigg+l5zbK/iQWZJh29NRMbFzEQD C9t8r5EN+swx79A== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 __mptcp_subflow_connect() is currently called from the path-managers, which have all the required information to create subflows. No need to call the PM again to re-iterate over the list of entries with RCU lock to get more info. Instead, it is possible to pass a mptcp_pm_addr_entry structure, instead of a mptcp_addr_info one. The former contains the ifindex and the flags that are required when creating the new subflow. This is a partial revert of commit ee285257a9c1 ("mptcp: drop flags and ifindex arguments"). While at it, the local ID can also be set if it is known and 0, to avoid having to set it in the 'rebuild_header' hook, which will cause a new iteration of the endpoint entries. Signed-off-by: Matthieu Baerts (NGI0) --- Notes: - This patch is for net-next - v4: - Avoid multiple copies of an addr entry in fill_local_addresses_vec(). - Rebased on top of "mptcp: fix endpoints with 'signal' and 'subflow' flags", v4. --- net/mptcp/pm.c | 11 ----------- net/mptcp/pm_netlink.c | 48 ++++++++++++--------------------------------= ---- net/mptcp/pm_userspace.c | 19 +------------------ net/mptcp/protocol.h | 10 +--------- net/mptcp/subflow.c | 29 ++++++++++++++++++----------- 5 files changed, 32 insertions(+), 85 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index ddad51210971..54fabd386b04 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -416,17 +416,6 @@ int mptcp_pm_get_local_id(struct mptcp_sock *msk, stru= ct sock_common *skc) return mptcp_pm_nl_get_local_id(msk, &skc_local); } =20 -int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsigned = int id, - u8 *flags, int *ifindex) -{ - *flags =3D 0; - *ifindex =3D 0; - - if (mptcp_pm_is_userspace(msk)) - return mptcp_userspace_pm_get_flags_and_ifindex_by_id(msk, id, flags, if= index); - return mptcp_pm_nl_get_flags_and_ifindex_by_id(msk, id, flags, ifindex); -} - int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info) { if (info->attrs[MPTCP_PM_ATTR_TOKEN]) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 45a1aa0a40bf..a316951f8762 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -625,7 +625,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(stru= ct mptcp_sock *msk) =20 spin_unlock_bh(&msk->pm.lock); for (i =3D 0; i < nr; i++) - __mptcp_subflow_connect(sk, &local.addr, &addrs[i]); + __mptcp_subflow_connect(sk, &local, &addrs[i]); spin_lock_bh(&msk->pm.lock); } mptcp_pm_nl_check_work_pending(msk); @@ -646,7 +646,7 @@ static void mptcp_pm_nl_subflow_established(struct mptc= p_sock *msk) */ static unsigned int fill_local_addresses_vec(struct mptcp_sock *msk, struct mptcp_addr_info *remote, - struct mptcp_addr_info *addrs) + struct mptcp_pm_addr_entry *entries) { struct sock *sk =3D (struct sock *)msk; struct mptcp_pm_addr_entry *entry; @@ -670,14 +670,14 @@ static unsigned int fill_local_addresses_vec(struct m= ptcp_sock *msk, continue; =20 if (msk->pm.subflows < subflows_max) { - msk->pm.subflows++; - addrs[i] =3D entry->addr; + memcpy(&entries[i], entry, sizeof(entries[i])); =20 /* Special case for ID0: set the correct ID */ if (msk->first && mptcp_addresses_equal(&entry->addr, &mpc_addr, entry->addr.port)) - addrs[i].id =3D 0; + entries[i].addr.id =3D 0; =20 + msk->pm.subflows++; i++; } } @@ -687,21 +687,19 @@ static unsigned int fill_local_addresses_vec(struct m= ptcp_sock *msk, * 'IPADDRANY' local address */ if (!i) { - struct mptcp_addr_info local; - - memset(&local, 0, sizeof(local)); - local.family =3D + memset(&entries[i], 0, sizeof(entries[i])); + entries[i].addr.family =3D #if IS_ENABLED(CONFIG_MPTCP_IPV6) remote->family =3D=3D AF_INET6 && ipv6_addr_v4mapped(&remote->addr6) ? AF_INET : #endif remote->family; =20 - if (!mptcp_pm_addr_families_match(sk, &local, remote)) + if (!mptcp_pm_addr_families_match(sk, &entries[i].addr, remote)) return 0; =20 msk->pm.subflows++; - addrs[i++] =3D local; + i++; } =20 return i; @@ -709,7 +707,7 @@ static unsigned int fill_local_addresses_vec(struct mpt= cp_sock *msk, =20 static void mptcp_pm_nl_add_addr_received(struct mptcp_sock *msk) { - struct mptcp_addr_info addrs[MPTCP_PM_ADDR_MAX]; + struct mptcp_pm_addr_entry entries[MPTCP_PM_ADDR_MAX]; struct sock *sk =3D (struct sock *)msk; unsigned int add_addr_accept_max; struct mptcp_addr_info remote; @@ -738,13 +736,13 @@ static void mptcp_pm_nl_add_addr_received(struct mptc= p_sock *msk) /* connect to the specified remote address, using whatever * local address the routing configuration will pick. */ - nr =3D fill_local_addresses_vec(msk, &remote, addrs); + nr =3D fill_local_addresses_vec(msk, &remote, entries); if (nr =3D=3D 0) return; =20 spin_unlock_bh(&msk->pm.lock); for (i =3D 0; i < nr; i++) - if (__mptcp_subflow_connect(sk, &addrs[i], &remote) =3D=3D 0) + if (__mptcp_subflow_connect(sk, &entries[i], &remote) =3D=3D 0) sf_created =3D true; spin_lock_bh(&msk->pm.lock); =20 @@ -1395,28 +1393,6 @@ int mptcp_pm_nl_add_addr_doit(struct sk_buff *skb, s= truct genl_info *info) return ret; } =20 -int mptcp_pm_nl_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsign= ed int id, - u8 *flags, int *ifindex) -{ - struct mptcp_pm_addr_entry *entry; - struct sock *sk =3D (struct sock *)msk; - struct net *net =3D sock_net(sk); - - /* No entries with ID 0 */ - if (id =3D=3D 0) - return 0; - - rcu_read_lock(); - entry =3D __lookup_addr_by_id(pm_nl_get_pernet(net), id); - if (entry) { - *flags =3D entry->flags; - *ifindex =3D entry->ifindex; - } - rcu_read_unlock(); - - return 0; -} - static bool remove_anno_list_by_saddr(struct mptcp_sock *msk, const struct mptcp_addr_info *addr) { diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index f0a4590506c6..97b09dffff6d 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -119,23 +119,6 @@ mptcp_userspace_pm_lookup_addr_by_id(struct mptcp_sock= *msk, unsigned int id) return NULL; } =20 -int mptcp_userspace_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, - unsigned int id, - u8 *flags, int *ifindex) -{ - struct mptcp_pm_addr_entry *match; - - spin_lock_bh(&msk->pm.lock); - match =3D mptcp_userspace_pm_lookup_addr_by_id(msk, id); - spin_unlock_bh(&msk->pm.lock); - if (match) { - *flags =3D match->flags; - *ifindex =3D match->ifindex; - } - - return 0; -} - int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_info *skc) { @@ -394,7 +377,7 @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb= , struct genl_info *info) =20 lock_sock(sk); =20 - err =3D __mptcp_subflow_connect(sk, &local.addr, &addr_r); + err =3D __mptcp_subflow_connect(sk, &local, &addr_r); =20 release_sock(sk); =20 diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index f2eb5273d752..259e247b0862 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -722,7 +722,7 @@ bool mptcp_addresses_equal(const struct mptcp_addr_info= *a, void mptcp_local_address(const struct sock_common *skc, struct mptcp_addr_= info *addr); =20 /* called with sk socket lock held */ -int __mptcp_subflow_connect(struct sock *sk, const struct mptcp_addr_info = *loc, +int __mptcp_subflow_connect(struct sock *sk, const struct mptcp_pm_addr_en= try *local, const struct mptcp_addr_info *remote); int mptcp_subflow_create_socket(struct sock *sk, unsigned short family, struct socket **new_sock); @@ -1015,14 +1015,6 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk, struct mptcp_pm_add_entry * mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk, const struct mptcp_addr_info *addr); -int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, - unsigned int id, - u8 *flags, int *ifindex); -int mptcp_pm_nl_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsign= ed int id, - u8 *flags, int *ifindex); -int mptcp_userspace_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, - unsigned int id, - u8 *flags, int *ifindex); int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info); int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info); int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *in= fo); diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 39e2cbdf3801..0835e71118b9 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1544,26 +1544,24 @@ void mptcp_info2sockaddr(const struct mptcp_addr_in= fo *info, #endif } =20 -int __mptcp_subflow_connect(struct sock *sk, const struct mptcp_addr_info = *loc, +int __mptcp_subflow_connect(struct sock *sk, const struct mptcp_pm_addr_en= try *local, const struct mptcp_addr_info *remote) { struct mptcp_sock *msk =3D mptcp_sk(sk); struct mptcp_subflow_context *subflow; + int local_id =3D local->addr.id; struct sockaddr_storage addr; int remote_id =3D remote->id; - int local_id =3D loc->id; int err =3D -ENOTCONN; struct socket *sf; struct sock *ssk; u32 remote_token; int addrlen; - int ifindex; - u8 flags; =20 if (!mptcp_is_fully_established(sk)) goto err_out; =20 - err =3D mptcp_subflow_create_socket(sk, loc->family, &sf); + err =3D mptcp_subflow_create_socket(sk, local->addr.family, &sf); if (err) goto err_out; =20 @@ -1573,23 +1571,32 @@ int __mptcp_subflow_connect(struct sock *sk, const = struct mptcp_addr_info *loc, get_random_bytes(&subflow->local_nonce, sizeof(u32)); } while (!subflow->local_nonce); =20 - if (local_id) + /* if 'IPADDRANY', the ID will be set later, after the routing */ + if (local->addr.family =3D=3D AF_INET) { + if (!local->addr.addr.s_addr) + local_id =3D -1; +#if IS_ENABLED(CONFIG_IPV6) + } else if (sk->sk_family =3D=3D AF_INET6) { + if (ipv6_addr_any(&local->addr.addr6)) + local_id =3D -1; +#endif + } + + if (local_id >=3D 0) subflow_set_local_id(subflow, local_id); =20 - mptcp_pm_get_flags_and_ifindex_by_id(msk, local_id, - &flags, &ifindex); subflow->remote_key_valid =3D 1; subflow->remote_key =3D READ_ONCE(msk->remote_key); subflow->local_key =3D READ_ONCE(msk->local_key); subflow->token =3D msk->token; - mptcp_info2sockaddr(loc, &addr, ssk->sk_family); + mptcp_info2sockaddr(&local->addr, &addr, ssk->sk_family); =20 addrlen =3D sizeof(struct sockaddr_in); #if IS_ENABLED(CONFIG_MPTCP_IPV6) if (addr.ss_family =3D=3D AF_INET6) addrlen =3D sizeof(struct sockaddr_in6); #endif - ssk->sk_bound_dev_if =3D ifindex; + ssk->sk_bound_dev_if =3D local->ifindex; err =3D kernel_bind(sf, (struct sockaddr *)&addr, addrlen); if (err) goto failed; @@ -1600,7 +1607,7 @@ int __mptcp_subflow_connect(struct sock *sk, const st= ruct mptcp_addr_info *loc, subflow->remote_token =3D remote_token; WRITE_ONCE(subflow->remote_id, remote_id); subflow->request_join =3D 1; - subflow->request_bkup =3D !!(flags & MPTCP_PM_ADDR_FLAG_BACKUP); + subflow->request_bkup =3D !!(local->flags & MPTCP_PM_ADDR_FLAG_BACKUP); subflow->subflow_id =3D msk->subflow_id++; mptcp_info2sockaddr(remote, &addr, ssk->sk_family); =20 --=20 2.45.2