From nobody Thu May 2 14:09:53 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp749690pis; Thu, 12 May 2022 16:27:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyEgRO/Gaoaqben47PG+7Sr8IjFKiiqqdLY9Fg/6b2Gr66LJL5dWnNMO3lczIAN/6dYdnwo X-Received: by 2002:a17:907:629a:b0:6d7:b33e:43f4 with SMTP id nd26-20020a170907629a00b006d7b33e43f4mr1943206ejc.149.1652398030587; Thu, 12 May 2022 16:27:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652398030; cv=none; d=google.com; s=arc-20160816; b=sHFSZb/0vofbX3zN2ssDNhp4qA5vp4R3GamZHovmthRaF3z0WB1cmuy4OKW8tfK3Ql Y6xERGY7pBrBdgWGCOtje9oBmo6Fe5ZWWIjhEPl6iKlq6Pr/zVhkOAowJqN4esDPxX9h UKlEHs8a3N3SxzZj5xSOca3XYZrKfexagViMyU1Y8Jhjiwt+bCnUlqPuAdvgZItuhIN2 Kw/AGPMd+hTDNHklfG7Ld75Eqhdb7ICFetbWG24Q1kNo0+Zz1g7iF4ODwizR6xMipyIK +HB3q+sLmi1RUgtpvXn6DpocIvQFerWTsHcfxgtdDlMjbOLhIlZJJV44x7By36hGt6QX AAUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=ZeZOqt1yms9D7KPNLPMoDY9hlll9KUBuvAohfz7buAQ=; b=LwkvTsK/CmSTdSFsWs+DUnjYseAGHFKuvD1gCcSQgnqMr4XG3GuUh1Mm94vuv7yY2O jcncL+7CTuz7e73TKpBFydBtwOFsJcmYydD9Na9+Antwq3hzICS+PE6EGC2nr6mSpEbK A6XmWBrqK59meRDMnmsaDWaf9wRB6gSFilQ7eFiiq4B+wXyNPHiluxPZNhTfnaj7jQsA Kwg6iOs9F+f1ZmQixAFTvV9oLBwp1pZ/8jNYPiAprcuigWNxiMcUD4yLdjo4xCHNs/dC 8ekrbvLlvKNJp3kZtC8idX2yuHerZlUt/p59wBF+C8gLlX5xoQn55WCPrHhRZslvTGJq VOtg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=BE0GWtVb; spf=pass (google.com: domain of mptcp+bounces-5275-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5275-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [2604:1380:4040:4f00::1]) by mx.google.com with ESMTPS id dm16-20020a170907949000b006f01fd542c2si659807ejc.606.2022.05.12.16.27.10 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 12 May 2022 16:27:10 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5275-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) client-ip=2604:1380:4040:4f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=BE0GWtVb; spf=pass (google.com: domain of mptcp+bounces-5275-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5275-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by da.mirrors.kernel.org (Postfix) with ESMTPS id CCA8E2E09F7 for ; Thu, 12 May 2022 23:27:08 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id AEBAC3FF4; Thu, 12 May 2022 23:27:07 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (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 6D39F2F28 for ; Thu, 12 May 2022 23:27:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1652398026; x=1683934026; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4RHugB5Hjz9zdcLDqVwhGkff4wmFwxuJQu7+m1e3h1k=; b=BE0GWtVbb+W8a1RRGfb+8DoW7dhrWnH59QuJ4l0QB+Mq/LFPzEFcBpIZ Tip4yGprNc76gyHL+P9BVYliY8FiZm5hpw0louovkf+QKiVu3fiRZ/vi3 WGn1pq77F6qRUBTNb5jfZmxNE3H+B+eiq7Ry2qMRO4ARh8F4wGIumOleR Or8t8m+k4TvZlkelIN8jmYQvFKw/WEvueDXU1Pov7k/2mS+HySEFzqLC5 GAIS2Yy9BOVlor0bmTSJz+kmwGQI/3i1o/6ovdW2IrbvqWNrDNpz8IvUO sujtBZP+bMODrAHibF9gpP9FRHRjillNRAlCy82l814O63NH/L1ssh/eV A==; X-IronPort-AV: E=McAfee;i="6400,9594,10345"; a="356590479" X-IronPort-AV: E=Sophos;i="5.91,221,1647327600"; d="scan'208";a="356590479" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 May 2022 16:26:47 -0700 X-IronPort-AV: E=Sophos;i="5.91,221,1647327600"; d="scan'208";a="739919554" Received: from cmokhtar-mobl1.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.36.250]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 May 2022 16:26:47 -0700 From: Mat Martineau To: netdev@vger.kernel.org Cc: Paolo Abeni , davem@davemloft.net, kuba@kernel.org, edumazet@google.com, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net 1/2] mptcp: fix subflow accounting on close Date: Thu, 12 May 2022 16:26:41 -0700 Message-Id: <20220512232642.541301-2-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220512232642.541301-1-mathew.j.martineau@linux.intel.com> References: <20220512232642.541301-1-mathew.j.martineau@linux.intel.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Paolo Abeni If the PM closes a fully established MPJ subflow or the subflow creation errors out in it's early stage the subflows counter is not bumped accordingly. This change adds the missing accounting, additionally taking care of updating accordingly the 'accept_subflow' flag. Fixes: a88c9e496937 ("mptcp: do not block subflows creation on errors") Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/pm.c | 5 ++--- net/mptcp/protocol.h | 14 ++++++++++++++ net/mptcp/subflow.c | 12 +++++++++--- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 01809eef29b4..aa51b100e033 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -178,14 +178,13 @@ void mptcp_pm_subflow_check_next(struct mptcp_sock *m= sk, const struct sock *ssk, struct mptcp_pm_data *pm =3D &msk->pm; bool update_subflows; =20 - update_subflows =3D (ssk->sk_state =3D=3D TCP_CLOSE) && - (subflow->request_join || subflow->mp_join); + update_subflows =3D subflow->request_join || subflow->mp_join; if (!READ_ONCE(pm->work_pending) && !update_subflows) return; =20 spin_lock_bh(&pm->lock); if (update_subflows) - pm->subflows--; + __mptcp_pm_close_subflow(msk); =20 /* Even if this subflow is not really established, tell the PM to try * to pick the next ones, if possible. diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 3c1a3036550f..f4ce28bb0fdc 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -833,6 +833,20 @@ unsigned int mptcp_pm_get_add_addr_accept_max(const st= ruct mptcp_sock *msk); unsigned int mptcp_pm_get_subflows_max(const struct mptcp_sock *msk); unsigned int mptcp_pm_get_local_addr_max(const struct mptcp_sock *msk); =20 +/* called under PM lock */ +static inline void __mptcp_pm_close_subflow(struct mptcp_sock *msk) +{ + if (--msk->pm.subflows < mptcp_pm_get_subflows_max(msk)) + WRITE_ONCE(msk->pm.accept_subflow, true); +} + +static inline void mptcp_pm_close_subflow(struct mptcp_sock *msk) +{ + spin_lock_bh(&msk->pm.lock); + __mptcp_pm_close_subflow(msk); + spin_unlock_bh(&msk->pm.lock); +} + void mptcp_sockopt_sync(struct mptcp_sock *msk, struct sock *ssk); void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk); =20 diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index aba260f547da..8c37087f0d84 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1422,20 +1422,20 @@ int __mptcp_subflow_connect(struct sock *sk, const = struct mptcp_addr_info *loc, 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; - int err; =20 if (!mptcp_is_fully_established(sk)) - return -ENOTCONN; + goto err_out; =20 err =3D mptcp_subflow_create_socket(sk, &sf); if (err) - return err; + goto err_out; =20 ssk =3D sf->sk; subflow =3D mptcp_subflow_ctx(ssk); @@ -1492,6 +1492,12 @@ int __mptcp_subflow_connect(struct sock *sk, const s= truct mptcp_addr_info *loc, failed: subflow->disposable =3D 1; sock_release(sf); + +err_out: + /* we account subflows before the creation, and this failures will not + * be caught by sk_state_change() + */ + mptcp_pm_close_subflow(msk); return err; } =20 --=20 2.36.1 From nobody Thu May 2 14:09:53 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp749698pis; Thu, 12 May 2022 16:27:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwKHrFK7GfgA3e3rsEhrbztGF6ejykdv/01SQTD5NM2Qr9gyzpvPruaV6Xv8xExWAgPum27 X-Received: by 2002:a17:906:dc8d:b0:6f4:75da:2fc8 with SMTP id cs13-20020a170906dc8d00b006f475da2fc8mr1885352ejc.7.1652398031285; Thu, 12 May 2022 16:27:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652398031; cv=none; d=google.com; s=arc-20160816; b=s4+wcMxGuAF64oJtqTfKQXIjFsCNdWtHbxolnOLHbuuejB5r1XTchIlS+Y9iWZfIas f4dYfn4iiVc4Kg4UsQtbgJpPpxZtn3cw94u8egJ6SSE+F2Bl7XtS9u6y0UyBXeb1QxS7 iGjatuE4OxbQnT/Dj/h4Y7NmjWC5KJLeF5RoKZy16L6gcClJ1IP5CL9YVF0tDBwglCwE XTVAyfEk4TcEUPUJE2BlLuIKZbr2OzGPnGiOQUOvxh3tb0PrN6SqMY1EO4HKTQHWskm4 nbaxJcsPOPn907kzde2yAf/OPAl80ksMCqda/a2DU5o1UtzqVTSR98dXVcZAmUy2rPYT x/+Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=+XhkcsRFNCaangJdq1nAJkhD4jffhOwGgkPI1jB3g7s=; b=cmLzfXy8FuPBapvRkYAdp7uzkWBuIDcpnD+M2lD0avOMy+9uhjhFCE4OiZKC8IFG6z TT+WtOrmqEylIyeVKp6uvH0JftdA2MR6rrerFRFRLTmxVjZmY95N/Bzc2rRTmM6GFYiR k5GsDNH1FwFrLI/x/A54WbHpqTr0s0N2RWJXi19ss/m7hxwyqdeyjlqvGRSWwzZZ6GnI okRrqxXyPZM3aNHJk50K7fAZ/iO9NJjHUncDWpvbe5zwH0KqNMLs15NXhRZp44gDtJ3i k08ZpCMtRVISm3b2JGKnkASg15Xxta7osSGVGi7OO1BLU4O5lZqrzaDVeyXXkaMVIkCM JJWg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=dNHZcs3a; spf=pass (google.com: domain of mptcp+bounces-5276-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5276-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [2604:1380:4040:4f00::1]) by mx.google.com with ESMTPS id dm19-20020a170907949300b006df76385d4bsi576150ejc.491.2022.05.12.16.27.10 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 12 May 2022 16:27:11 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5276-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) client-ip=2604:1380:4040:4f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=dNHZcs3a; spf=pass (google.com: domain of mptcp+bounces-5276-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5276-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by da.mirrors.kernel.org (Postfix) with ESMTPS id 28A742E09D9 for ; Thu, 12 May 2022 23:27:10 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 41E343FF5; Thu, 12 May 2022 23:27:08 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (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 F3B373FF1 for ; Thu, 12 May 2022 23:27:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1652398027; x=1683934027; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=y8Kff7elEMZUNQ5A0JvdNuSLQhIb8zXMDvwIJO0oxHs=; b=dNHZcs3aRPFq9jyeeRAXebnJDu9hi1Gf5QEXEQ4Oru9EyF13X/bG7/5i thnckysUrlN3Uefw4Zw0RIeKcVqAY6d2FDToyJVzbrc5H6bAIb4FcYwe4 8MMIlzcnH6Uh62CU+zvBY41Z4KHMUjfCs5oQPzg9mwr3KLR1/6fFiJxps VTYbx6DRFp7+dGNDpJ5v9Zyfoj2bpBLFdFlQMbGZ/DfpEzXTDCC/vKSwh K9causLZwOdI/VgDlqKYoGF+zXfzSWSNtAUXrQTuYQGu6fJqGafCOud9r 4dBrbQL2mOGBbh39TLkYihz9hEk9xnmwyfWrjz/0v7bU6XKAQGSqSW8Ai g==; X-IronPort-AV: E=McAfee;i="6400,9594,10345"; a="356590480" X-IronPort-AV: E=Sophos;i="5.91,221,1647327600"; d="scan'208";a="356590480" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 May 2022 16:26:48 -0700 X-IronPort-AV: E=Sophos;i="5.91,221,1647327600"; d="scan'208";a="739919555" Received: from cmokhtar-mobl1.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.36.250]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 May 2022 16:26:47 -0700 From: Mat Martineau To: netdev@vger.kernel.org Cc: Paolo Abeni , davem@davemloft.net, kuba@kernel.org, edumazet@google.com, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net 2/2] selftests: mptcp: add subflow limits test-cases Date: Thu, 12 May 2022 16:26:42 -0700 Message-Id: <20220512232642.541301-3-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220512232642.541301-1-mathew.j.martineau@linux.intel.com> References: <20220512232642.541301-1-mathew.j.martineau@linux.intel.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Paolo Abeni Add and delete a bunch of endpoints and verify the respect of configured limits. This covers the codepath introduced by the previous patch. Fixes: 69c6ce7b6eca ("selftests: mptcp: add implicit endpoint test case") Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- .../testing/selftests/net/mptcp/mptcp_join.sh | 48 ++++++++++++++++++- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 7314257d248a..48ef112f42c2 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -1444,6 +1444,33 @@ chk_prio_nr() [ "${dump_stats}" =3D 1 ] && dump_stats } =20 +chk_subflow_nr() +{ + local need_title=3D"$1" + local msg=3D"$2" + local subflow_nr=3D$3 + local cnt1 + local cnt2 + + if [ -n "${need_title}" ]; then + printf "%03u %-36s %s" "${TEST_COUNT}" "${TEST_NAME}" "${msg}" + else + printf "%-${nr_blank}s %s" " " "${msg}" + fi + + cnt1=3D$(ss -N $ns1 -tOni | grep -c token) + cnt2=3D$(ss -N $ns2 -tOni | grep -c token) + if [ "$cnt1" !=3D "$subflow_nr" -o "$cnt2" !=3D "$subflow_nr" ]; then + echo "[fail] got $cnt1:$cnt2 subflows expected $subflow_nr" + fail_test + dump_stats=3D1 + else + echo "[ ok ]" + fi + + [ "${dump_stats}" =3D 1 ] && ( ss -N $ns1 -tOni ; ss -N $ns1 -tOni | grep= token; ip -n $ns1 mptcp endpoint ) +} + chk_link_usage() { local ns=3D$1 @@ -2556,7 +2583,7 @@ fastclose_tests() fi } =20 -implicit_tests() +endpoint_tests() { # userspace pm type prevents add_addr if reset "implicit EP"; then @@ -2578,6 +2605,23 @@ implicit_tests() $ns2 10.0.2.2 id 1 flags signal wait fi + + if reset "delete and re-add"; then + pm_nl_set_limits $ns1 1 1 + pm_nl_set_limits $ns2 1 1 + pm_nl_add_endpoint $ns2 10.0.2.2 id 2 dev ns2eth2 flags subflow + run_tests $ns1 $ns2 10.0.1.1 4 0 0 slow & + + wait_mpj $ns2 + pm_nl_del_endpoint $ns2 2 10.0.2.2 + sleep 0.5 + chk_subflow_nr needtitle "after delete" 1 + + pm_nl_add_endpoint $ns2 10.0.2.2 dev ns2eth2 flags subflow + wait_mpj $ns2 + chk_subflow_nr "" "after re-add" 2 + wait + fi } =20 # [$1: error message] @@ -2624,7 +2668,7 @@ all_tests_sorted=3D( d@deny_join_id0_tests m@fullmesh_tests z@fastclose_tests - I@implicit_tests + I@endpoint_tests ) =20 all_tests_args=3D"" --=20 2.36.1