From nobody Fri May 3 09:55:08 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:ab0:590e:0:0:0:0:0 with SMTP id n14csp3841418uad; Tue, 5 Jul 2022 14:32:29 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vp/E3VcELg8jz6jqeD4gnynXD1lA9KOd5TWFEhVxl8wPFl8pOKfqMbPc0kn4cqBVOytKiJ X-Received: by 2002:a05:622a:199b:b0:319:d157:a51f with SMTP id u27-20020a05622a199b00b00319d157a51fmr30515454qtc.562.1657056749228; Tue, 05 Jul 2022 14:32:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657056749; cv=none; d=google.com; s=arc-20160816; b=0kg0BNHZr59HVVgGjzM2oNgvOYCwKRJm+Tv4dHixvY8V2zpvxWyWsFwBNjbT1Jf+Xj cNmsURgU+gm/1QUJMeTsgCdAYEh/NTBuYAlP2CKMXsdc2Tk4UNcPNs2oaakUR6tBGeKs b2qUsoDuN3/2huvakYgoi1cVuG75HTf5eUcfUUQHa6p3iREHeC0rd7P5VLBbDsYxCwo+ XEO3yqDDvhKNCzp5gOrOpIwK+TYSmX9IxdUhVHSDEL21CKz1Z0cBa6kWu8Db3KmGC65k PYhK3iEumkWOz2pVozp4iysibxRDAxW+VehFRMEYbNXS8mvvn6aQkgY7gvhgZ7Ouwx6l oFrA== 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=g/HVKLnhRqFJ29kYkrR2RyN1cOK04BqlM4Es0Rj+wco=; b=oy3PLLVYlW1kUcueqwEn7Yu/aDdLNrNNuK6wcI8431BKAywGN82iyzPW60z4heXY7U nGg+fLIPuXGhQ3Uav4sum70vvyiA1YR/KbGBZbG27ZZX5rfyZ9pkh8GIQYVEBmScInhI wMz+l0qcFXJrCtpavvwjbjobewCuLvK4Hee+bgfksUQq7TuCI5bQyB4PyyYHjd27kZdl c1GaZjmC6CjSDEQywXvrs/95XeiIwT3NCeBji5AZpLljP6ln6Wfp+qvuP+0vdG4IbTSr 7yLJgwAtKyyS5bQxOc4drHuyfvR2K/P2cZlQuXWdBc3HOFNObroP8zY23uHpC0Or/JGY GyGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=e6N48Kq4; spf=pass (google.com: domain of mptcp+bounces-5956-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.199.223 as permitted sender) smtp.mailfrom="mptcp+bounces-5956-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id c23-20020ac80097000000b003050ac1fb09si19134963qtg.85.2022.07.05.14.32.29 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Jul 2022 14:32:29 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5956-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=e6N48Kq4; spf=pass (google.com: domain of mptcp+bounces-5956-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.199.223 as permitted sender) smtp.mailfrom="mptcp+bounces-5956-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 ny.mirrors.kernel.org (Postfix) with ESMTPS id E6B751C208DB for ; Tue, 5 Jul 2022 21:32:28 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8C84533C7; Tue, 5 Jul 2022 21:32:25 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (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 064932F34 for ; Tue, 5 Jul 2022 21:32:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1657056744; x=1688592744; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=/+KwzJcQwLoHt3LVM4fr/J+/A5rhuhTFgU08baoBP4U=; b=e6N48Kq4sy3M/jBDjEgzE6x4SxxZRKAAtEOkDVHxf5jb9aEDy81oqBBq XXKUdNYoRNtiLZH+SKxR/8G6kZIQyQ7j3pxWoq8CpgDmpP8Ij6rO/Z8uP oyb2ieBWToUSWd35OiCa0nJbO/TK//qL2F7a1HlNS8ko4wHrabLMcx2x8 PxQ5cyJ/g4DZh3IhgWeifye2uint+JzB6zRncSQ7DX/FNMJw6/wQseVGk UlaumKFFHJPw6lS84l8PSS41pFuKE5qcn8T1qEp5WGJ/hmBkpe/MjZpLb k2kor/2lVy/8JPnlgadGS+L8FycmVSoyUbY23cJBn5mct2Vp5LRnAJi4b g==; X-IronPort-AV: E=McAfee;i="6400,9594,10399"; a="284633922" X-IronPort-AV: E=Sophos;i="5.92,247,1650956400"; d="scan'208";a="284633922" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jul 2022 14:32:22 -0700 X-IronPort-AV: E=Sophos;i="5.92,247,1650956400"; d="scan'208";a="590558741" Received: from rcenter-mobl.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.17.169]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jul 2022 14:32:22 -0700 From: Mat Martineau To: netdev@vger.kernel.org Cc: Paolo Abeni , davem@davemloft.net, kuba@kernel.org, edumazet@google.com, fw@strlen.de, geliang.tang@suse.com, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net 1/7] mptcp: fix locking in mptcp_nl_cmd_sf_destroy() Date: Tue, 5 Jul 2022 14:32:11 -0700 Message-Id: <20220705213217.146898-2-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.37.0 In-Reply-To: <20220705213217.146898-1-mathew.j.martineau@linux.intel.com> References: <20220705213217.146898-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 The user-space PM subflow removal path uses a couple of helpers that must be called under the msk socket lock and the current code lacks such requirement. Change the existing lock scope so that the relevant code is under its protection. Fixes: 702c2f646d42 ("mptcp: netlink: allow userspace-driven subflow establ= ishment") Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/287 Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/pm_userspace.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index f56378e4f597..26212bebc5ed 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -306,15 +306,11 @@ static struct sock *mptcp_nl_find_ssk(struct mptcp_so= ck *msk, const struct mptcp_addr_info *local, const struct mptcp_addr_info *remote) { - struct sock *sk =3D &msk->sk.icsk_inet.sk; struct mptcp_subflow_context *subflow; - struct sock *found =3D NULL; =20 if (local->family !=3D remote->family) return NULL; =20 - lock_sock(sk); - mptcp_for_each_subflow(msk, subflow) { const struct inet_sock *issk; struct sock *ssk; @@ -347,16 +343,11 @@ static struct sock *mptcp_nl_find_ssk(struct mptcp_so= ck *msk, } =20 if (issk->inet_sport =3D=3D local->port && - issk->inet_dport =3D=3D remote->port) { - found =3D ssk; - goto found; - } + issk->inet_dport =3D=3D remote->port) + return ssk; } =20 -found: - release_sock(sk); - - return found; + return NULL; } =20 int mptcp_nl_cmd_sf_destroy(struct sk_buff *skb, struct genl_info *info) @@ -412,6 +403,7 @@ int mptcp_nl_cmd_sf_destroy(struct sk_buff *skb, struct= genl_info *info) } =20 sk =3D &msk->sk.icsk_inet.sk; + lock_sock(sk); ssk =3D mptcp_nl_find_ssk(msk, &addr_l, &addr_r); if (ssk) { struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(ssk); @@ -422,8 +414,9 @@ int mptcp_nl_cmd_sf_destroy(struct sk_buff *skb, struct= genl_info *info) } else { err =3D -ESRCH; } + release_sock(sk); =20 - destroy_err: +destroy_err: sock_put((struct sock *)msk); return err; } --=20 2.37.0 From nobody Fri May 3 09:55:08 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:ab0:590e:0:0:0:0:0 with SMTP id n14csp3841425uad; Tue, 5 Jul 2022 14:32:30 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sBwP6c45FcSEpMmMBU7kdrCb/zVy/2rY14HxuMpiS/GcbuGO1C+zlEEvGdfZ4x8F00y9PA X-Received: by 2002:a05:622a:1491:b0:31d:32ca:3bd0 with SMTP id t17-20020a05622a149100b0031d32ca3bd0mr24575039qtx.536.1657056750439; Tue, 05 Jul 2022 14:32:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657056750; cv=none; d=google.com; s=arc-20160816; b=Ykczo9Vkj7E8YGHr7ppdW0+7P28UC5O3KWKFsvj70pFbXWGc4JaLmUHP2uQYV851Dn 2rhxsWcDu9w4HBV9CJLQ94+81ckhPI04dbutdJKKjeKYEdPg55w0SVpIzrEPdyYk5+vL Gbq6o3Vmc6ziaF8IkmxW3CoByQmzp7+k/aizjAd/crt/dV3G/2+e8JqOBQPYafy1Gjrb 0/UPy3n4HzmBBVxy2Nf5TlmbxxM48zhKAWC0Mes4N8nQ0yC+7sVkz8H2CR20nYHb6ZrM UHBlflxba+dl/0m2/U11lQ+28j/ouhltmf6sKXHCqnkIwIDVDVKsQVWiqZvKYNxG01EQ rVdA== 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=RdUwFSVm+IVzS6gUEtFKgydV/4SrsnOddM7P+JVJ5cY=; b=YozgkvAf8z59ybgOqeFcwr0t/mZmJIUPyiyJTag3pZwJSG3VF1vSZw4zq1vzalZHBj qNj7GU68lVDSuP+kNbspffgVGtlA5QWaZzcju6Wj1sT4HOXEKcClc9gTSEVd+BsGK6ge vBN/eVil/mc9bAV4U1cGsXzCMXttm6psSogAC/LHchafMHirpSTM5sA5vFzKaO2mRYvV HS4gG5e7z4d+ez8Pj1pN2+dEZKd78KueQPxSFEIkYD4NNuHZTW/OkOyVEB1jN+iZ6tz5 KkNHLqW3nSKa4sOw7Uk8WCJR0AZ1aoT2Gd5LEMVBdgIz8f7cCUP9PUPSryidFcFgmuWs v5kA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=iFE5BByx; spf=pass (google.com: domain of mptcp+bounces-5957-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.199.223 as permitted sender) smtp.mailfrom="mptcp+bounces-5957-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id w8-20020ac87e88000000b00304d2576efesi24004346qtj.92.2022.07.05.14.32.30 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Jul 2022 14:32:30 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5957-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=iFE5BByx; spf=pass (google.com: domain of mptcp+bounces-5957-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.199.223 as permitted sender) smtp.mailfrom="mptcp+bounces-5957-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 ny.mirrors.kernel.org (Postfix) with ESMTPS id 348881C208BA for ; Tue, 5 Jul 2022 21:32:30 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D8678602A; Tue, 5 Jul 2022 21:32:25 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (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 A2AFB2F5A for ; Tue, 5 Jul 2022 21:32:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1657056744; x=1688592744; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=VGowfovHTl4ZRFaVkmsMlCq8hTCDwyKbc/2OXbZp9PI=; b=iFE5BByxCm/vk5rZ8gC1/mjj2lWqvZeSkYcvEPm6saaDcU8viMcXoliu g1yEgRBPIUCRrs5GWzDUijBfuzJZr+amRw2I0pMfrqTpDAfuP4Hjt5B3y iIOfy6lzoV8WRCTVHubvSUe7qpbZeCe/TOTm4nbSbA15BrqCKRJAHU7KQ a8+PCyTHUqo8y7Wa7jL3LiGnLSRi5GsR0oSS/eiQridtonPvkR3FYWiGI KyxSaOb7INPHdKvH8uoGlv5bTvOuwLLnZQfQwdOQ/r97kGWPEym6QcuSt PQbmExntE7TpFPiqA7QDDfbDx64Zly3KK66esFGgvLFYetS8DA4YGesrL A==; X-IronPort-AV: E=McAfee;i="6400,9594,10399"; a="284633926" X-IronPort-AV: E=Sophos;i="5.92,247,1650956400"; d="scan'208";a="284633926" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jul 2022 14:32:22 -0700 X-IronPort-AV: E=Sophos;i="5.92,247,1650956400"; d="scan'208";a="590558742" Received: from rcenter-mobl.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.17.169]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jul 2022 14:32:22 -0700 From: Mat Martineau To: netdev@vger.kernel.org Cc: Mat Martineau , davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, fw@strlen.de, geliang.tang@suse.com, matthieu.baerts@tessares.net, mptcp@lists.linux.dev Subject: [PATCH net 2/7] mptcp: Avoid acquiring PM lock for subflow priority changes Date: Tue, 5 Jul 2022 14:32:12 -0700 Message-Id: <20220705213217.146898-3-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.37.0 In-Reply-To: <20220705213217.146898-1-mathew.j.martineau@linux.intel.com> References: <20220705213217.146898-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" The in-kernel path manager code for changing subflow flags acquired both the msk socket lock and the PM lock when possibly changing the "backup" and "fullmesh" flags. mptcp_pm_nl_mp_prio_send_ack() does not access anything protected by the PM lock, and it must release and reacquire the PM lock. By pushing the PM lock to where it is needed in mptcp_pm_nl_fullmesh(), the lock is only acquired when the fullmesh flag is changed and the backup flag code no longer has to release and reacquire the PM lock. The change in locking context requires the MIB update to be modified - move that to a better location instead. This change also makes it possible to call mptcp_pm_nl_mp_prio_send_ack() for the userspace PM commands without manipulating the in-kernel PM lock. Fixes: 0f9f696a502e ("mptcp: add set_flags command in PM netlink") Acked-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/options.c | 3 +++ net/mptcp/pm_netlink.c | 8 ++------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index aead331866a0..bd8f0f425be4 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1584,6 +1584,9 @@ void mptcp_write_options(struct tcphdr *th, __be32 *p= tr, struct tcp_sock *tp, *ptr++ =3D mptcp_option(MPTCPOPT_MP_PRIO, TCPOLEN_MPTCP_PRIO, opts->backup, TCPOPT_NOP); + + MPTCP_INC_STATS(sock_net((const struct sock *)tp), + MPTCP_MIB_MPPRIOTX); } =20 mp_capable_done: diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index e099f2a12504..5ff93b73f33d 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -727,7 +727,6 @@ static int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_so= ck *msk, =20 mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); - struct sock *sk =3D (struct sock *)msk; struct mptcp_addr_info local; =20 local_address((struct sock_common *)ssk, &local); @@ -739,12 +738,9 @@ static int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_s= ock *msk, subflow->backup =3D bkup; subflow->send_mp_prio =3D 1; subflow->request_bkup =3D bkup; - __MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_MPPRIOTX); =20 - spin_unlock_bh(&msk->pm.lock); pr_debug("send ack for mp_prio"); mptcp_subflow_send_ack(ssk); - spin_lock_bh(&msk->pm.lock); =20 return 0; } @@ -1816,8 +1812,10 @@ static void mptcp_pm_nl_fullmesh(struct mptcp_sock *= msk, =20 list.ids[list.nr++] =3D addr->id; =20 + spin_lock_bh(&msk->pm.lock); mptcp_pm_nl_rm_subflow_received(msk, &list); mptcp_pm_create_subflow_or_signal_addr(msk); + spin_unlock_bh(&msk->pm.lock); } =20 static int mptcp_nl_set_flags(struct net *net, @@ -1835,12 +1833,10 @@ static int mptcp_nl_set_flags(struct net *net, goto next; =20 lock_sock(sk); - spin_lock_bh(&msk->pm.lock); if (changed & MPTCP_PM_ADDR_FLAG_BACKUP) ret =3D mptcp_pm_nl_mp_prio_send_ack(msk, addr, bkup); if (changed & MPTCP_PM_ADDR_FLAG_FULLMESH) mptcp_pm_nl_fullmesh(msk, addr); - spin_unlock_bh(&msk->pm.lock); release_sock(sk); =20 next: --=20 2.37.0 From nobody Fri May 3 09:55:08 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:ab0:590e:0:0:0:0:0 with SMTP id n14csp3841432uad; Tue, 5 Jul 2022 14:32:31 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sLbg6t2It0t24pZ4yM8ZHwYTOEBIbjIFMudgsagWS86uJ6EogdKKLrPbM4WnYB47OoG+dA X-Received: by 2002:a05:6214:300f:b0:470:4e32:5463 with SMTP id ke15-20020a056214300f00b004704e325463mr33110729qvb.123.1657056751625; Tue, 05 Jul 2022 14:32:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657056751; cv=none; d=google.com; s=arc-20160816; b=VadoyFVqTgaNGVKD+2Y+F08QI2PxQMwd53I5jSoWqWKZeWUOMiHn5Jo/3RMT5XdtTy CpuWR5Bd875XeHrTeudeF5p/D4RBu0w1vHK7T2rYpGa9uldCnvuJAGbcaspCHHwzroiA Wpz1iBCsVfmVSXO4CcDPsMYqrTEN6Xto5opQ3XQWFER9X3yUQ4oDA+DE0wZ8SkdBQa1j YDYic5K0WeOy5814foaQttQ0cQR6W7TDgZ40yXFGnc28l+xgLEVcRnl4062fct+l+Vo/ kGLf5qYh7t7Vr3RQ0apj1T4uW8DNzo66S4tqmcO+HXtuR3/erLBhvl2/mVn9iyTOhQb8 Vykw== 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=MulFCfPO6kYowzbflPuaEndSrAvfPMUh9LpUBV/WYrs=; b=fXqiKHib6FR4B/D8IiEErBDyF9LiqxEv71BC8s0bDlhAYV1ZBJ+8LGdNLKmpjvVe6N kIDqrDzeTFhu5p07D756lfjfUFp64V1q+S0CoBEbSKdV+mHqOyFyNBMA0E0x0A5EmfgU jbpV97qARKcj/gLbcsDep8LEQAJPDRGgelbucIoS2J4UcsF8VYL0gCVA4y5BOziAvxdt yhyUbr4rTBH/KflIeRnptUEPyijc4RNBt57dwUspJznlGMaO6XI8ze3e2AI9meithbCc TOUN8mrNuTBme6jwa9iAjwj+1lLynYBrYsLoFYaAyMEJ28MFxt+El4Ln2aDsIVG2i0CI m6Cw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="K/32AKVa"; spf=pass (google.com: domain of mptcp+bounces-5958-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5958-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id 13-20020a0562140dcd00b004730d4b9913si1315282qvt.410.2022.07.05.14.32.31 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Jul 2022 14:32:31 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5958-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="K/32AKVa"; spf=pass (google.com: domain of mptcp+bounces-5958-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5958-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 ny.mirrors.kernel.org (Postfix) with ESMTPS id 61C2E1C208D2 for ; Tue, 5 Jul 2022 21:32:31 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id AD319602B; Tue, 5 Jul 2022 21:32:26 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (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 999466027 for ; Tue, 5 Jul 2022 21:32:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1657056745; x=1688592745; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=tC1Hm50rsxSVlGIGSTUympAYSK9JNlJ0/U3l5u6G7IM=; b=K/32AKVaE5VJ86rABOFC/kGjU0HPN07AZ1SA2YVNQklsJXKIvt3UQQDn nKXdbj8CHOsmCDAPBlo1fb03cjOda1iFdomE8dPDgXyPKiZXPR6Wh8OzC OehBp6hBIQdOzMHcAVykCyOQDredEYVIPEKY/UUXy9MnWqarsrCbFE6jH qJmZnu+VLtKxSYhUlohL6EW5E7QOEW1+70tSx/qYPkPzHyXvgtsev9EYO 4DujU9mLS8PeX7cCVsEMyVK9JrzoDXGdWKXZUbYB5aXyelKWYrsDSZIQp gjNCOZS0aYK0ZXTLaK7DCVsh/NcyaddjrKmlLqKiLeAnfTjD/kN40aK2h Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10399"; a="284633929" X-IronPort-AV: E=Sophos;i="5.92,247,1650956400"; d="scan'208";a="284633929" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jul 2022 14:32:22 -0700 X-IronPort-AV: E=Sophos;i="5.92,247,1650956400"; d="scan'208";a="590558744" Received: from rcenter-mobl.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.17.169]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jul 2022 14:32:22 -0700 From: Mat Martineau To: netdev@vger.kernel.org Cc: Mat Martineau , davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, fw@strlen.de, geliang.tang@suse.com, matthieu.baerts@tessares.net, mptcp@lists.linux.dev Subject: [PATCH net 3/7] mptcp: Acquire the subflow socket lock before modifying MP_PRIO flags Date: Tue, 5 Jul 2022 14:32:13 -0700 Message-Id: <20220705213217.146898-4-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.37.0 In-Reply-To: <20220705213217.146898-1-mathew.j.martineau@linux.intel.com> References: <20220705213217.146898-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" When setting up a subflow's flags for sending MP_PRIO MPTCP options, the subflow socket lock was not held while reading and modifying several struct members that are also read and modified in mptcp_write_options(). Acquire the subflow socket lock earlier and send the MP_PRIO ACK with that lock already acquired. Add a new variant of the mptcp_subflow_send_ack() helper to use with the subflow lock held. Fixes: 067065422fcd ("mptcp: add the outgoing MP_PRIO support") Acked-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/pm_netlink.c | 5 ++++- net/mptcp/protocol.c | 9 +++++++-- net/mptcp/protocol.h | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 5ff93b73f33d..ca86c88f89e0 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -728,11 +728,13 @@ static int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_= sock *msk, mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); struct mptcp_addr_info local; + bool slow; =20 local_address((struct sock_common *)ssk, &local); if (!mptcp_addresses_equal(&local, addr, addr->port)) continue; =20 + slow =3D lock_sock_fast(ssk); if (subflow->backup !=3D bkup) msk->last_snd =3D NULL; subflow->backup =3D bkup; @@ -740,7 +742,8 @@ static int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_so= ck *msk, subflow->request_bkup =3D bkup; =20 pr_debug("send ack for mp_prio"); - mptcp_subflow_send_ack(ssk); + __mptcp_subflow_send_ack(ssk); + unlock_sock_fast(ssk, slow); =20 return 0; } diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index e475212f2618..cc21fafd9726 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -506,13 +506,18 @@ static inline bool tcp_can_send_ack(const struct sock= *ssk) (TCPF_SYN_SENT | TCPF_SYN_RECV | TCPF_TIME_WAIT | TCPF_CLOSE | TCP= F_LISTEN)); } =20 +void __mptcp_subflow_send_ack(struct sock *ssk) +{ + if (tcp_can_send_ack(ssk)) + tcp_send_ack(ssk); +} + void mptcp_subflow_send_ack(struct sock *ssk) { bool slow; =20 slow =3D lock_sock_fast(ssk); - if (tcp_can_send_ack(ssk)) - tcp_send_ack(ssk); + __mptcp_subflow_send_ack(ssk); unlock_sock_fast(ssk, slow); } =20 diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index c14d70c036d0..033c995772dc 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -607,6 +607,7 @@ void __init mptcp_subflow_init(void); void mptcp_subflow_shutdown(struct sock *sk, struct sock *ssk, int how); void mptcp_close_ssk(struct sock *sk, struct sock *ssk, struct mptcp_subflow_context *subflow); +void __mptcp_subflow_send_ack(struct sock *ssk); void mptcp_subflow_send_ack(struct sock *ssk); void mptcp_subflow_reset(struct sock *ssk); void mptcp_subflow_queue_clean(struct sock *ssk); --=20 2.37.0 From nobody Fri May 3 09:55:08 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:ab0:590e:0:0:0:0:0 with SMTP id n14csp3841444uad; Tue, 5 Jul 2022 14:32:33 -0700 (PDT) X-Google-Smtp-Source: AGRyM1usrACx3v+oGC8dM2EoHyM91VdwePgBY7tBmbmvpmul78P9JmCjb9p3Y+GVbMf03N4r1i/w X-Received: by 2002:a37:4549:0:b0:69f:556c:4e38 with SMTP id s70-20020a374549000000b0069f556c4e38mr24083897qka.202.1657056753324; Tue, 05 Jul 2022 14:32:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657056753; cv=none; d=google.com; s=arc-20160816; b=a98Wg0vZWW0/UVrBiT4YTZBJuQBSkkL/DORIIo0r7sIqb5xYJEZ9ys7gYInt0MSn2P ohYrBOqTcG78W5KQdy/xiAZD7CWJxxRMhzaXDw+35dtis2l5PmNNNjXWqezFUcAGTuFz X0w7y+bnoK1fTb12AKKGhmMt7q4Eu5N5TQkRcB1GNOtxyq4v2FzHoFlwj+RfqQOXqfIW 02C8ODEYR0xQG6yQXpfjQnAYAlWxvw4ljFje8cFn9BKN3Pd7ngfRRhrKG/hWehouAOq1 zn/aD0qHb7wjVPzXkZx+6AAfj1wVJ0uVCi0Rn2OzuLnD1Xtdabs55LeOX8uXhifJJKFY nNvg== 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=nxlfMvJ13MXq7erQtAtZmLmOfaKRC3hkvrJtkUMf2uM=; b=QFO58j4DwjuKfCzEwK7ubw768XxeVICQE/y7ZI2aQH5ZQ3UQr2mxmB7gQxxzlgE5Aq oaum1RLswRQjXFJmMlYxc80eU3fVcve0+k5fth26wlbW3NyfRt4tR1KcUAsPKwakZltx cgjkcvMJOupKA0sxPWfSSlj7VDRQAneVxWm6iOtMQzUICKxl3gJ4yWA7AcRmIPLNYbK5 rKK6QCyqgZvku+5D4n9/M4TlFd0dMPc82Wc7aHeBdEyoL7BouWnXZKFPFfuHxZIkBtIi pcVt005tdruCq2I1kAKTa3sSGoaE57jE8kzo8g19cnmuXCGkH/XrtHS+Jkb9UPVDf4y/ k/gA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=miRYy95q; spf=pass (google.com: domain of mptcp+bounces-5959-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5959-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id 184-20020a3707c1000000b006aee93bc584si18726419qkh.135.2022.07.05.14.32.33 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Jul 2022 14:32:33 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5959-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=miRYy95q; spf=pass (google.com: domain of mptcp+bounces-5959-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5959-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 sv.mirrors.kernel.org (Postfix) with ESMTPS id 672D128093F for ; Tue, 5 Jul 2022 21:32:32 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 06445602C; Tue, 5 Jul 2022 21:32:27 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (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 D5AA76029 for ; Tue, 5 Jul 2022 21:32:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1657056745; x=1688592745; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=xP1R2dfNPz3sq6+PHPca6seQip9vwHvi5wQWkEIwRBI=; b=miRYy95q4iP8csHw/Tp2C7xpAeb2+b6oOUEmKPgLmqh+FQ33RMWvwAVX N9qKfxAowLC4I8J1O8sbm0kwVNLa4JoOOnTAVDDu+VV6VXajxf8amdXoZ gIAFzNkHGCRoxMi+6DEPRG2i7HWe1CQj8BXQFWP5h1n5LlwtalLMvK1Yh 0udfuhVuO/iWVph+Kv7mlOpUG7xf7DnRyrur4sLdwdU1qyvgvFq4bk26V D7CQrz1NZ6JTF6ymBv7wkg2/a8duVaoCtSRClvf/JObQ8GJXgdOmMZO43 NZVhdDN2Tugt/MI7UO4ZiYC0FfwBWiIpeq+YNefu4dWxGwfAPBvM75EFU A==; X-IronPort-AV: E=McAfee;i="6400,9594,10399"; a="284633933" X-IronPort-AV: E=Sophos;i="5.92,247,1650956400"; d="scan'208";a="284633933" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jul 2022 14:32:22 -0700 X-IronPort-AV: E=Sophos;i="5.92,247,1650956400"; d="scan'208";a="590558748" Received: from rcenter-mobl.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.17.169]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jul 2022 14:32:22 -0700 From: Mat Martineau To: netdev@vger.kernel.org Cc: Kishen Maloor , davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, fw@strlen.de, geliang.tang@suse.com, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net 4/7] mptcp: netlink: issue MP_PRIO signals from userspace PMs Date: Tue, 5 Jul 2022 14:32:14 -0700 Message-Id: <20220705213217.146898-5-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.37.0 In-Reply-To: <20220705213217.146898-1-mathew.j.martineau@linux.intel.com> References: <20220705213217.146898-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: Kishen Maloor This change updates MPTCP_PM_CMD_SET_FLAGS to allow userspace PMs to issue MP_PRIO signals over a specific subflow selected by the connection token, local and remote address+port. Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/286 Fixes: 702c2f646d42 ("mptcp: netlink: allow userspace-driven subflow establ= ishment") Acked-by: Paolo Abeni Signed-off-by: Kishen Maloor Signed-off-by: Mat Martineau --- net/mptcp/pm_netlink.c | 30 +++++++++++++++++++++++++----- net/mptcp/pm_userspace.c | 30 ++++++++++++++++++++++++++++++ net/mptcp/protocol.h | 8 +++++++- 3 files changed, 62 insertions(+), 6 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index ca86c88f89e0..2da251dd7c00 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -717,9 +717,10 @@ void mptcp_pm_nl_addr_send_ack(struct mptcp_sock *msk) } } =20 -static int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_sock *msk, - struct mptcp_addr_info *addr, - u8 bkup) +int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_sock *msk, + struct mptcp_addr_info *addr, + struct mptcp_addr_info *rem, + u8 bkup) { struct mptcp_subflow_context *subflow; =20 @@ -727,13 +728,19 @@ static int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_= sock *msk, =20 mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); - struct mptcp_addr_info local; + struct mptcp_addr_info local, remote; bool slow; =20 local_address((struct sock_common *)ssk, &local); if (!mptcp_addresses_equal(&local, addr, addr->port)) continue; =20 + if (rem && rem->family !=3D AF_UNSPEC) { + remote_address((struct sock_common *)ssk, &remote); + if (!mptcp_addresses_equal(&remote, rem, rem->port)) + continue; + } + slow =3D lock_sock_fast(ssk); if (subflow->backup !=3D bkup) msk->last_snd =3D NULL; @@ -1837,7 +1844,7 @@ static int mptcp_nl_set_flags(struct net *net, =20 lock_sock(sk); if (changed & MPTCP_PM_ADDR_FLAG_BACKUP) - ret =3D mptcp_pm_nl_mp_prio_send_ack(msk, addr, bkup); + ret =3D mptcp_pm_nl_mp_prio_send_ack(msk, addr, NULL, bkup); if (changed & MPTCP_PM_ADDR_FLAG_FULLMESH) mptcp_pm_nl_fullmesh(msk, addr); release_sock(sk); @@ -1853,6 +1860,9 @@ static int mptcp_nl_set_flags(struct net *net, static int mptcp_nl_cmd_set_flags(struct sk_buff *skb, struct genl_info *i= nfo) { struct mptcp_pm_addr_entry addr =3D { .addr =3D { .family =3D AF_UNSPEC }= , }, *entry; + struct mptcp_pm_addr_entry remote =3D { .addr =3D { .family =3D AF_UNSPEC= }, }; + struct nlattr *attr_rem =3D info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; + struct nlattr *token =3D info->attrs[MPTCP_PM_ATTR_TOKEN]; struct nlattr *attr =3D info->attrs[MPTCP_PM_ATTR_ADDR]; struct pm_nl_pernet *pernet =3D genl_info_pm_nl(info); u8 changed, mask =3D MPTCP_PM_ADDR_FLAG_BACKUP | @@ -1865,6 +1875,12 @@ static int mptcp_nl_cmd_set_flags(struct sk_buff *sk= b, struct genl_info *info) if (ret < 0) return ret; =20 + if (attr_rem) { + ret =3D mptcp_pm_parse_entry(attr_rem, info, false, &remote); + if (ret < 0) + return ret; + } + if (addr.flags & MPTCP_PM_ADDR_FLAG_BACKUP) bkup =3D 1; if (addr.addr.family =3D=3D AF_UNSPEC) { @@ -1873,6 +1889,10 @@ static int mptcp_nl_cmd_set_flags(struct sk_buff *sk= b, struct genl_info *info) return -EOPNOTSUPP; } =20 + if (token) + return mptcp_userspace_pm_set_flags(sock_net(skb->sk), + token, &addr, &remote, bkup); + spin_lock_bh(&pernet->lock); entry =3D __lookup_addr(pernet, &addr.addr, lookup_by_id); if (!entry) { diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index 26212bebc5ed..51e2f066d54f 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -420,3 +420,33 @@ int mptcp_nl_cmd_sf_destroy(struct sk_buff *skb, struc= t genl_info *info) sock_put((struct sock *)msk); return err; } + +int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token, + struct mptcp_pm_addr_entry *loc, + struct mptcp_pm_addr_entry *rem, u8 bkup) +{ + struct mptcp_sock *msk; + int ret =3D -EINVAL; + u32 token_val; + + token_val =3D nla_get_u32(token); + + msk =3D mptcp_token_get_sock(net, token_val); + if (!msk) + return ret; + + if (!mptcp_pm_is_userspace(msk)) + goto set_flags_err; + + if (loc->addr.family =3D=3D AF_UNSPEC || + rem->addr.family =3D=3D AF_UNSPEC) + goto set_flags_err; + + lock_sock((struct sock *)msk); + ret =3D mptcp_pm_nl_mp_prio_send_ack(msk, &loc->addr, &rem->addr, bkup); + release_sock((struct sock *)msk); + +set_flags_err: + sock_put((struct sock *)msk); + return ret; +} diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 033c995772dc..480c5320b86e 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -772,6 +772,10 @@ void mptcp_pm_rm_addr_received(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_list); void mptcp_pm_mp_prio_received(struct sock *sk, u8 bkup); void mptcp_pm_mp_fail_received(struct sock *sk, u64 fail_seq); +int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_sock *msk, + struct mptcp_addr_info *addr, + struct mptcp_addr_info *rem, + u8 bkup); bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk, const struct mptcp_pm_addr_entry *entry); void mptcp_pm_free_anno_list(struct mptcp_sock *msk); @@ -788,7 +792,9 @@ int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_s= ock *msk, int mptcp_userspace_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsigned int id, u8 *flags, int *ifindex); - +int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token, + struct mptcp_pm_addr_entry *loc, + struct mptcp_pm_addr_entry *rem, u8 bkup); int mptcp_pm_announce_addr(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, bool echo); --=20 2.37.0 From nobody Fri May 3 09:55:08 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:ab0:590e:0:0:0:0:0 with SMTP id n14csp3841453uad; Tue, 5 Jul 2022 14:32:34 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vEBmfPoAkLpCQ/yjgqiBspy+w1uoq72pcYiiTnrU8RcjdcGuqWo7H7DUvawCgiuNeJClok X-Received: by 2002:ac8:5a4d:0:b0:31d:c63:5637 with SMTP id o13-20020ac85a4d000000b0031d0c635637mr30065121qta.102.1657056754343; Tue, 05 Jul 2022 14:32:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657056754; cv=none; d=google.com; s=arc-20160816; b=qt9DXSurgBTw84eUZvHA971A1kYU+XNrtD9WpXKqQCeKIBUpQ/QTZ6b3GU6X6f+9bP fJ2XpFHV+D33s6ui9mnDMUBkjKpUx5zBQdPY3ZtmGBcCxLWvN47IwYEKu+DQJyIWMBe3 o/2H0rddGfGQf1BIPhrgKKP1YJxaeoGuhu06lK3dpYlg3+raTQiVIqY1zQFXWpQuhKFs brwCER9Nt+2HZ6uuf+dx2EbSpV+U1b3F7jDSu4R8/USGfaXVIVxF2TmsZctPyU/kNxwl J+V34n+Xq1b6jiuWUTdeR/rY6kF635T6B2AV5kPGW5s+zqOYqF+T6LHSzuDqNeoI8liD ns1w== 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=rXtD5P0+oboelULg9lJJJnJLenfK3LPJKz2A7ROYaRE=; b=px4wg7EoaOuyjtBItKt/0a08bhFGCxtk7kUEWo+Gzovjun7BtuzaF73drJbpqRDL4N a7aaKdyLxz6oimAUN1cucACAWOTusTKjES4zJOf7R4KNIyawl0o0GOzNEBAdTVMpc5D4 bsk89L0TK2OAkPxm5YKL/0+96H92od/cFmGM0gaCVRlJbq58xmGkwqr4ntdFJqVSO4E0 eGrDGoqE6k+T2x6targop7vz5adbSpfcWVaqwIlWYZA5z7jpNXSg8K9GmGWKRpyMxvGm XD9APAgTR+mdgMy/E97MiLE4BIwh1sPW/i1GohOX1j9K/HTUybrqWZAXQ+OtDU7GZkC4 pVog== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=dmGls7Ha; spf=pass (google.com: domain of mptcp+bounces-5960-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.199.223 as permitted sender) smtp.mailfrom="mptcp+bounces-5960-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id 13-20020ac8560d000000b002f7a43bf153si20687095qtr.556.2022.07.05.14.32.34 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Jul 2022 14:32:34 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5960-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=dmGls7Ha; spf=pass (google.com: domain of mptcp+bounces-5960-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.199.223 as permitted sender) smtp.mailfrom="mptcp+bounces-5960-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 ny.mirrors.kernel.org (Postfix) with ESMTPS id 1A6961C2086A for ; Tue, 5 Jul 2022 21:32:34 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 350D66029; Tue, 5 Jul 2022 21:32:27 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (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 D59506028 for ; Tue, 5 Jul 2022 21:32:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1657056745; x=1688592745; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=a2vfLDIU1Y8R3v+h0jDohycCBGEae5albz97uSQfIr4=; b=dmGls7HaEaCbl+HjhXwv2FXDNKblQQw5Er8bhJ5F4c/N/PKegyYmwT0w 0X6uaTSJSlBZNXB8T4a/d6liydnjOlH8Q6WAWasfUINtSdYI1lr2MzwKO eCFdOrOIMnTxHBKpspV1cN503+h4ra1nYlgeGmyiEJ0G8ckBIQU7eHQoN H8zZCAMx/RLBG+nauFRxSKOQ3D8rgCvADwyJsdUeVmPEJR/28oZG6hC1E ErwkTVp/uvUnzD1n5pjXbr7/XN20OOqqGMWL/qyZ+Zl7xuCn4AR4Zf+ao Wnn2RDpK4b1Lt8mNygDDpCympXBAUQarzT+IuHJKi/Evi81lDgy7begRu w==; X-IronPort-AV: E=McAfee;i="6400,9594,10399"; a="284633936" X-IronPort-AV: E=Sophos;i="5.92,247,1650956400"; d="scan'208";a="284633936" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jul 2022 14:32:23 -0700 X-IronPort-AV: E=Sophos;i="5.92,247,1650956400"; d="scan'208";a="590558751" Received: from rcenter-mobl.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.17.169]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jul 2022 14:32:22 -0700 From: Mat Martineau To: netdev@vger.kernel.org Cc: Kishen Maloor , davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, fw@strlen.de, geliang.tang@suse.com, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net 5/7] selftests: mptcp: userspace PM support for MP_PRIO signals Date: Tue, 5 Jul 2022 14:32:15 -0700 Message-Id: <20220705213217.146898-6-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.37.0 In-Reply-To: <20220705213217.146898-1-mathew.j.martineau@linux.intel.com> References: <20220705213217.146898-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: Kishen Maloor This change updates the testing sample (pm_nl_ctl) to exercise the updated MPTCP_PM_CMD_SET_FLAGS command for userspace PMs to issue MP_PRIO signals over the selected subflow. E.g. ./pm_nl_ctl set 10.0.1.2 port 47234 flags backup token 823274047 rip 1= 0.0.1.1 rport 50003 userspace_pm.sh has a new selftest that invokes this command. Fixes: 259a834fadda ("selftests: mptcp: functional tests for the userspace = PM type") Acked-by: Paolo Abeni Signed-off-by: Kishen Maloor Signed-off-by: Mat Martineau --- tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 73 ++++++++++++++++++- .../selftests/net/mptcp/userspace_pm.sh | 32 ++++++++ 2 files changed, 103 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c b/tools/testing/= selftests/net/mptcp/pm_nl_ctl.c index 6a2f4b981e1d..cb79f0719e3b 100644 --- a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c +++ b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c @@ -39,7 +39,7 @@ static void syntax(char *argv[]) fprintf(stderr, "\tdsf lip lport rip = rport token \n"); fprintf(stderr, "\tdel []\n"); fprintf(stderr, "\tget \n"); - fprintf(stderr, "\tset [] [id ] flags [no]backup|[no]fullmesh [po= rt ]\n"); + fprintf(stderr, "\tset [] [id ] flags [no]backup|[no]fullmesh [po= rt ] [token ] [rip ] [rport ]\n"); fprintf(stderr, "\tflush\n"); fprintf(stderr, "\tdump\n"); fprintf(stderr, "\tlimits [ ]\n"); @@ -1279,7 +1279,10 @@ int set_flags(int fd, int pm_family, int argc, char = *argv[]) struct rtattr *rta, *nest; struct nlmsghdr *nh; u_int32_t flags =3D 0; + u_int32_t token =3D 0; + u_int16_t rport =3D 0; u_int16_t family; + void *rip =3D NULL; int nest_start; int use_id =3D 0; u_int8_t id; @@ -1339,7 +1342,13 @@ int set_flags(int fd, int pm_family, int argc, char = *argv[]) error(1, 0, " missing flags keyword"); =20 for (; arg < argc; arg++) { - if (!strcmp(argv[arg], "flags")) { + if (!strcmp(argv[arg], "token")) { + if (++arg >=3D argc) + error(1, 0, " missing token value"); + + /* token */ + token =3D atoi(argv[arg]); + } else if (!strcmp(argv[arg], "flags")) { char *tok, *str; =20 /* flags */ @@ -1378,12 +1387,72 @@ int set_flags(int fd, int pm_family, int argc, char= *argv[]) rta->rta_len =3D RTA_LENGTH(2); memcpy(RTA_DATA(rta), &port, 2); off +=3D NLMSG_ALIGN(rta->rta_len); + } else if (!strcmp(argv[arg], "rport")) { + if (++arg >=3D argc) + error(1, 0, " missing remote port"); + + rport =3D atoi(argv[arg]); + } else if (!strcmp(argv[arg], "rip")) { + if (++arg >=3D argc) + error(1, 0, " missing remote ip"); + + rip =3D argv[arg]; } else { error(1, 0, "unknown keyword %s", argv[arg]); } } nest->rta_len =3D off - nest_start; =20 + /* token */ + if (token) { + rta =3D (void *)(data + off); + rta->rta_type =3D MPTCP_PM_ATTR_TOKEN; + rta->rta_len =3D RTA_LENGTH(4); + memcpy(RTA_DATA(rta), &token, 4); + off +=3D NLMSG_ALIGN(rta->rta_len); + } + + /* remote addr/port */ + if (rip) { + nest_start =3D off; + nest =3D (void *)(data + off); + nest->rta_type =3D NLA_F_NESTED | MPTCP_PM_ATTR_ADDR_REMOTE; + nest->rta_len =3D RTA_LENGTH(0); + off +=3D NLMSG_ALIGN(nest->rta_len); + + /* addr data */ + rta =3D (void *)(data + off); + if (inet_pton(AF_INET, rip, RTA_DATA(rta))) { + family =3D AF_INET; + rta->rta_type =3D MPTCP_PM_ADDR_ATTR_ADDR4; + rta->rta_len =3D RTA_LENGTH(4); + } else if (inet_pton(AF_INET6, rip, RTA_DATA(rta))) { + family =3D AF_INET6; + rta->rta_type =3D MPTCP_PM_ADDR_ATTR_ADDR6; + rta->rta_len =3D RTA_LENGTH(16); + } else { + error(1, errno, "can't parse ip %s", (char *)rip); + } + off +=3D NLMSG_ALIGN(rta->rta_len); + + /* family */ + rta =3D (void *)(data + off); + rta->rta_type =3D MPTCP_PM_ADDR_ATTR_FAMILY; + rta->rta_len =3D RTA_LENGTH(2); + memcpy(RTA_DATA(rta), &family, 2); + off +=3D NLMSG_ALIGN(rta->rta_len); + + if (rport) { + rta =3D (void *)(data + off); + rta->rta_type =3D MPTCP_PM_ADDR_ATTR_PORT; + rta->rta_len =3D RTA_LENGTH(2); + memcpy(RTA_DATA(rta), &rport, 2); + off +=3D NLMSG_ALIGN(rta->rta_len); + } + + nest->rta_len =3D off - nest_start; + } + do_nl_req(fd, nh, off, 0); return 0; } diff --git a/tools/testing/selftests/net/mptcp/userspace_pm.sh b/tools/test= ing/selftests/net/mptcp/userspace_pm.sh index 78d0bb640b11..abe3d4ebe554 100755 --- a/tools/testing/selftests/net/mptcp/userspace_pm.sh +++ b/tools/testing/selftests/net/mptcp/userspace_pm.sh @@ -770,10 +770,42 @@ test_subflows() rm -f "$evts" } =20 +test_prio() +{ + local count + + # Send MP_PRIO signal from client to server machine + ip netns exec "$ns2" ./pm_nl_ctl set 10.0.1.2 port "$client4_port" flags = backup token "$client4_token" rip 10.0.1.1 rport "$server4_port" + sleep 0.5 + + # Check TX + stdbuf -o0 -e0 printf "MP_PRIO TX = \t" + count=3D$(ip netns exec "$ns2" nstat -as | grep MPTcpExtMPPrioTx | awk '{= print $2}') + [ -z "$count" ] && count=3D0 + if [ $count !=3D 1 ]; then + stdbuf -o0 -e0 printf "[FAIL]\n" + exit 1 + else + stdbuf -o0 -e0 printf "[OK]\n" + fi + + # Check RX + stdbuf -o0 -e0 printf "MP_PRIO RX = \t" + count=3D$(ip netns exec "$ns1" nstat -as | grep MPTcpExtMPPrioRx | awk '{= print $2}') + [ -z "$count" ] && count=3D0 + if [ $count !=3D 1 ]; then + stdbuf -o0 -e0 printf "[FAIL]\n" + exit 1 + else + stdbuf -o0 -e0 printf "[OK]\n" + fi +} + make_connection make_connection "v6" test_announce test_remove test_subflows +test_prio =20 exit 0 --=20 2.37.0 From nobody Fri May 3 09:55:08 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:ab0:590e:0:0:0:0:0 with SMTP id n14csp3841467uad; Tue, 5 Jul 2022 14:32:36 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sRAoqwxq8WnJLGz7YcO+q7hBIBAUFQfAVdBzsn/OkEKqVI/vLLI2t8l3c6J/hN6rBeXhHk X-Received: by 2002:a05:6870:9590:b0:de:27ca:c60c with SMTP id k16-20020a056870959000b000de27cac60cmr23232305oao.108.1657056755705; Tue, 05 Jul 2022 14:32:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657056755; cv=none; d=google.com; s=arc-20160816; b=FxT/Gu2DCoawsHSz6BIWJkTfkoG/Y655qMJyYbOo2DG9n0DPQ5XtZ8BcvzeyKNiXnb a1TDUedGcW9aKn3tkzLN/ObfkeUa6Ne+33rSZYblBbQi8HjVV8HGWJ+vSwz9PkV5JEoZ Lf2FmgnT43ddXfnjuGGbHPNbrunQSZwOddo9M23ydEzSthSTMlYe4a5s6Rn2Gkak25KN 7RKzpPOAWH0qaU4jTdSkM2zplkqnEdpwMYHTmiizSCLEH/YEJDajkz8XcxkAeG5o0kO5 Dk6nbxgYmWH0Y3QPuyAegMvDeQhRHbyoYKBcURcgUCxOUaVQTpV/+cDUW0K1H51kQUbv dLCQ== 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=7ruvxlvpg3FNXtgmABk+2Cg8/nd7Jq4eWSe5iohX1kE=; b=zZtHu+xKDSw7AvJw9TNa+FpEhO03dw3Aho0vQ4R2Zae/mea4JfBXBVU+60l5qFqqcw gKiaek5kjkcMQxGEpxDHDZyoRft/O499O4kv9AJVps8D6KJCPhD5SjC/5TT4N8bXGVYM jVYh/qpf+LWAeh4J9wija76EP/RXgXFHJUNfa+yAKJTaC6YJttj5iqFAjQDHqIQHrNl3 iPx43Sbcsu7Ts67bNgyO0+02avKeDmtJw0BSDC0tkRVVCwygkXKK/M/IO7Q6VJv0+fNh 2+euY304fkunhSHuoHYYNwG/RXMEQ6LNgLCmi0AngHPazChdaMXzpLnxk9DP+n2D5fcn Pjag== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="A8ngY8Q/"; spf=pass (google.com: domain of mptcp+bounces-5961-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) smtp.mailfrom="mptcp+bounces-5961-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id 20-20020aca2114000000b003251b6dda65si35825659oiz.245.2022.07.05.14.32.35 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Jul 2022 14:32:35 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5961-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="A8ngY8Q/"; spf=pass (google.com: domain of mptcp+bounces-5961-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) smtp.mailfrom="mptcp+bounces-5961-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 sv.mirrors.kernel.org (Postfix) with ESMTPS id 42B78280A7C for ; Tue, 5 Jul 2022 21:32:35 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 020076028; Tue, 5 Jul 2022 21:32:32 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (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 B08456027 for ; Tue, 5 Jul 2022 21:32:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1657056746; x=1688592746; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=PvAHdbWFjgKWzYWOfNz6TaMgTJhXnLK0rBu1llcVCjw=; b=A8ngY8Q/RBfbv6QdT1cZPR11uwaIDDHZA4L7EZ0Ii1Y+v2uGx1+QX+eq DpVILmr8ac9n1wXWl9avh84uLUthdZICBP9mDUvdBK2wjjt3fVCKIfZaP lMIEgVhw630BP4GP24j3UunzdlQkFyS16gx6nw1MqH8IPujA2OJmnk8Oo YsiBKqU84H1g0V3umScagJ59XNH+BvmkTZoasFy66ue75q/B8RN3mI/rd aAIEYIw+tO0xZLx7B0aCVLix1pD4mvNT+JAZ3I/YK53d8V3YnLUc+KFCk hRPaUFa4yms6S/UN392MZTv237lu8kBrIYOFWF/zpRjE8+0QyaBKKqVZO Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10399"; a="284633940" X-IronPort-AV: E=Sophos;i="5.92,247,1650956400"; d="scan'208";a="284633940" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jul 2022 14:32:23 -0700 X-IronPort-AV: E=Sophos;i="5.92,247,1650956400"; d="scan'208";a="590558752" Received: from rcenter-mobl.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.17.169]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jul 2022 14:32:22 -0700 From: Mat Martineau To: netdev@vger.kernel.org Cc: Paolo Abeni , davem@davemloft.net, kuba@kernel.org, edumazet@google.com, fw@strlen.de, geliang.tang@suse.com, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net 6/7] mptcp: fix local endpoint accounting Date: Tue, 5 Jul 2022 14:32:16 -0700 Message-Id: <20220705213217.146898-7-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.37.0 In-Reply-To: <20220705213217.146898-1-mathew.j.martineau@linux.intel.com> References: <20220705213217.146898-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 In mptcp_pm_nl_rm_addr_or_subflow() we always mark as available the id corresponding to the just removed address. The used bitmap actually tracks only the local IDs: we must restrict the operation when a (local) subflow is removed. Fixes: a88c9e496937 ("mptcp: do not block subflows creation on errors") Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/pm_netlink.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 2da251dd7c00..7c7395b58944 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -807,7 +807,8 @@ static void mptcp_pm_nl_rm_addr_or_subflow(struct mptcp= _sock *msk, removed =3D true; __MPTCP_INC_STATS(sock_net(sk), rm_type); } - __set_bit(rm_list->ids[i], msk->pm.id_avail_bitmap); + if (rm_type =3D=3D MPTCP_MIB_RMSUBFLOW) + __set_bit(rm_list->ids[i], msk->pm.id_avail_bitmap); if (!removed) continue; =20 --=20 2.37.0 From nobody Fri May 3 09:55:08 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:ab0:590e:0:0:0:0:0 with SMTP id n14csp3841410uad; Tue, 5 Jul 2022 14:32:28 -0700 (PDT) X-Google-Smtp-Source: AGRyM1s75dGirByykCPbaBkySp/jghhpIqvf5NBJQ7LjiwY/0YcXYXn889pBGn45BFzbNIahcadj X-Received: by 2002:a05:622a:2ca:b0:31d:2ac3:fb19 with SMTP id a10-20020a05622a02ca00b0031d2ac3fb19mr25824360qtx.449.1657056747870; Tue, 05 Jul 2022 14:32:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657056747; cv=none; d=google.com; s=arc-20160816; b=yGTP0ppcpJ3sko9sjKc5Xb6y4h2hjgcbj/7PE6NE6vC8Fluz8PkpoFkB54DDqSCYX/ uMzB6e2wuAiO/vlc1eni8qoJdSFPnMlhAlj5lWnxhSsUeIb5G3RWX03YL82BAyMs77e6 odewYa3o6s/yp5s93siv97FNekoDwMDI+DzaHz4GN/L8iPRXHicoepvUpd5Hn/89MlrA nvWvEb9vhvzAAb+iv32F4tc/aVir1Pod9g07BvNqHYccCs9EzCMCfZqELk71bua22Sf8 uNUXtINPpxVewwwDpN5iRw4+xjEJpw7DeR+KEVgtnSTEspMwTD6mpOgQuvQB2BlMwwmD cJXg== 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=4ndiYARcTCcdklwjijQZwn+IE0FWj1b8Jzp2XrIJxFI=; b=yQpmMu8MMlzmesry7J/S6RcvWiU8lG0NdurZBjpBKdT6Ub/Lgc72U5ffzLcKm9P97s 1vFbKchPMDFmQ6k9dUTw9w7nV6f7pEUMqpfcS35jzjZdPiCHqFiaVcecM9HygHY4woN5 eLlvV4Fcj06cBiGU5WYvQsp9bcHOBofp0tyffaDCAnXryy/KvPeTPYKvgjXAgF/nFdqq RVVgQqKbpjW019VOc+eWltAMOQI9+h6JNrPbkmi3VLYmuIsiReRt0pZdeEO/MqnyoQDr 5ctGOqAIeMHFaXtVo1Hb3hOXpyhNYNd6ka9TGadbEAy9+IDq07PJKHzWVBMSC5m9Ga2O sklg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=AvqVKdIp; spf=pass (google.com: domain of mptcp+bounces-5955-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.199.223 as permitted sender) smtp.mailfrom="mptcp+bounces-5955-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id c23-20020ac80097000000b003050ac1fb09si19134963qtg.85.2022.07.05.14.32.27 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Jul 2022 14:32:27 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5955-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=AvqVKdIp; spf=pass (google.com: domain of mptcp+bounces-5955-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.199.223 as permitted sender) smtp.mailfrom="mptcp+bounces-5955-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 ny.mirrors.kernel.org (Postfix) with ESMTPS id 9A35C1C208CA for ; Tue, 5 Jul 2022 21:32:27 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 0079B320C; Tue, 5 Jul 2022 21:32:25 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) (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 BA9466028 for ; Tue, 5 Jul 2022 21:32:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1657056743; x=1688592743; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=zdPUfS8BpWFcbtpib3NKokn6LkmEHx7NP2q0cxq90Bk=; b=AvqVKdIpqyZoWCcFbH0MK18Mcy/s9mY92Q80MaBY/jlcwYl6+8Dw/zOa m9Fw5QDF8/rl+jRNLwniZLzSMJ/ueOaJrFjkvKQGIoHdB+LVWrbiIwdBF j1RabIVwVVICxwfokkCOP5HBimqcg8z96elBdeIqdgGSU5UHtibnT7YQH FwcZrs/Y5FD4YRKGVqFJrX5OwGlBnIMrpdBcIjTaQNLEC2vSMyR7Pgfr0 p2K0u4sypzQpxhb4pQpGGMvheEIL7lA4RD+dMDYwje18+Ev3ApzzTy7Cp I3CecRRjZwn0MUlTzmetZk+QcUtVm/MmG2tIGjRVnEYlo3Jo52DvcNl2f Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10399"; a="284250763" X-IronPort-AV: E=Sophos;i="5.92,247,1650956400"; d="scan'208";a="284250763" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jul 2022 14:32:23 -0700 X-IronPort-AV: E=Sophos;i="5.92,247,1650956400"; d="scan'208";a="590558754" Received: from rcenter-mobl.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.17.169]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jul 2022 14:32:23 -0700 From: Mat Martineau To: netdev@vger.kernel.org Cc: Geliang Tang , davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, fw@strlen.de, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net 7/7] mptcp: update MIB_RMSUBFLOW in cmd_sf_destroy Date: Tue, 5 Jul 2022 14:32:17 -0700 Message-Id: <20220705213217.146898-8-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.37.0 In-Reply-To: <20220705213217.146898-1-mathew.j.martineau@linux.intel.com> References: <20220705213217.146898-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: Geliang Tang This patch increases MPTCP_MIB_RMSUBFLOW mib counter in userspace pm destroy subflow function mptcp_nl_cmd_sf_destroy() when removing subflow. Fixes: 702c2f646d42 ("mptcp: netlink: allow userspace-driven subflow establ= ishment") Signed-off-by: Geliang Tang Signed-off-by: Mat Martineau --- net/mptcp/pm_userspace.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index 51e2f066d54f..9e82250cbb70 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -5,6 +5,7 @@ */ =20 #include "protocol.h" +#include "mib.h" =20 void mptcp_free_local_addr_list(struct mptcp_sock *msk) { @@ -410,6 +411,7 @@ int mptcp_nl_cmd_sf_destroy(struct sk_buff *skb, struct= genl_info *info) =20 mptcp_subflow_shutdown(sk, ssk, RCV_SHUTDOWN | SEND_SHUTDOWN); mptcp_close_ssk(sk, ssk, subflow); + MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_RMSUBFLOW); err =3D 0; } else { err =3D -ESRCH; --=20 2.37.0