From nobody Sun May 5 14:45:42 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:ab0:35eb:0:0:0:0:0 with SMTP id w11csp2725280uau; Tue, 28 Jun 2022 12:04:50 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sUQpPlO14KGfUbdedcxNzGDiFvEVMq5xqeUxVKKRQJ+A4p4tngH44Y50EJ7EyqOrnDiX1C X-Received: by 2002:a05:6870:2418:b0:101:9461:787c with SMTP id n24-20020a056870241800b001019461787cmr721129oap.196.1656443090563; Tue, 28 Jun 2022 12:04:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656443090; cv=none; d=google.com; s=arc-20160816; b=AYRn2kKUmUJ+ThfokFHThpFi3XIGgudLFSDImITh6PhKbQbyfhZtUotziDX/wHfTmQ rJ02ZgQxEUmE2Cz8zkK6eMDn21xJq9iyqt34p24FeCagThqOYgEBXs0yXsii6yOWDpun 0y3H2stnwaHLoOlsU4RD8up307j5hbIkGjQ3vobVN1LjXw4NGnUyiMy+G+Ted5bmsN7k h4sWrJIdkD771p60IYCnQmVxJwK+rUxmuyjGz15oJ7OvQxgcmWIa8G/7+Zs24oyo+Ktv KbCcuc6s4LGWRlo6GfQNUcoSHs49cJUlwntbChMVhEOOv3gfo8yv7oP3uasglvkJUHA2 zW5g== 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=KlggsVt+ufpwZ93O2NFiXQrMIjC1wE8cuQl/MLBZ9Ew=; b=gG3EqPJMWDIsNhaOSbipGie6Tk83tQeek2FzT68098w9aC3ER9ncX0+pr2Sh/4K182 tYgc9FDfq3STbkz50B3O8+nDRtkO6eNSxlEaMNEExEv9jgZmxrJdhsOl36QQChcymfnt a4dtLEWd+rDomN8WHag4j8pPKLyD2kFWzM3pU5OP+YWZ/lbxpQ6cv2oPIHzra/hDhfwl vi0tvOTfQmO6CnhU1ZtqcKx4uGUZ0J8ViCmgdJ/u2faeIQ+3hqFeuEA4F/p9CCfO3Pei Z015Ep3ARYh/MyKLLON4rSkZ6/zO0xjnjM0qlYkHoOcY0gnOk9p212Bz56u5hoSccswg Ps9Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=lfQ9JW0J; spf=pass (google.com: domain of mptcp+bounces-5865-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5865-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. [139.178.84.19]) by mx.google.com with ESMTPS id c38-20020a9d27a9000000b00616a150dbb4si14917249otb.253.2022.06.28.12.04.50 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 28 Jun 2022 12:04:50 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5865-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) client-ip=139.178.84.19; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=lfQ9JW0J; spf=pass (google.com: domain of mptcp+bounces-5865-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5865-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 2AE4F2E0C78 for ; Tue, 28 Jun 2022 19:04:21 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 36B777A; Tue, 28 Jun 2022 19:04:19 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) (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 A19734C72 for ; Tue, 28 Jun 2022 19:04:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1656443057; x=1687979057; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=HkfPWCq7EsGiUJu3Y+0zZO77SJ0g4FFIxWbiZJWNGf0=; b=lfQ9JW0JepB+oib0msJM8RdiG485GCYokaDHhELC7ferqaYJp71P8FJK 5RQPcYHY1uG8HJDCrObZRZGuF/c2+SBlkwGnFP7HNQKhnU75KANHtSZe3 smeQYCHUJ5E4hMUUXQjy6FeLPBTVIufRLCmGQ0thSyBV633hbZsfTe7kP TL7OoudjhvVF9CG05lH4M7p88Dawsie5tI8TXToGFG2Xdkcs4PLndMS3T mI5HxvMVHcVRUhHMvNU9DBCkL8XgmQltH/EGfzdC0WxgQoZ4glE7TBWTl b2tmAXB4yBf9OY0b2ZwuO+JfgWpt6FiTlwACDTj1WpEPYWR1gtIMOo/T2 g==; X-IronPort-AV: E=McAfee;i="6400,9594,10392"; a="343514646" X-IronPort-AV: E=Sophos;i="5.92,229,1650956400"; d="scan'208";a="343514646" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jun 2022 12:04:01 -0700 X-IronPort-AV: E=Sophos;i="5.92,229,1650956400"; d="scan'208";a="917294948" Received: from gwbruss-mobl1.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.112.228]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jun 2022 12:04:01 -0700 From: Mat Martineau To: mptcp@lists.linux.dev Cc: Mat Martineau Subject: [PATCH mptcp-net 1/3] mptcp: Avoid acquiring PM lock for subflow priority changes Date: Tue, 28 Jun 2022 12:03:54 -0700 Message-Id: <20220628190356.326233-2-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220628190356.326233-1-mathew.j.martineau@linux.intel.com> References: <20220628190356.326233-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. 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") Signed-off-by: Mat Martineau --- net/mptcp/pm_netlink.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index e099f2a12504..d04b34fc9a8e 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -741,10 +741,8 @@ static int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_s= ock *msk, 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 +1814,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 +1835,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 Sun May 5 14:45:42 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:ab0:35eb:0:0:0:0:0 with SMTP id w11csp2725059uau; Tue, 28 Jun 2022 12:04:22 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vf8bhZnlxMHAMngvYOhHSZBZQb9EykUh5SQdU1GX+UItBKm8ubD0Wm9tzD7tvuPMmSqwBs X-Received: by 2002:a63:4a4e:0:b0:401:baa6:d695 with SMTP id j14-20020a634a4e000000b00401baa6d695mr19764144pgl.259.1656443062300; Tue, 28 Jun 2022 12:04:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656443062; cv=none; d=google.com; s=arc-20160816; b=JVbkgbkwDfGzC334xZKkk7HUfIxmZos67PxBuo56ZmVqk/AHQ6RW8ZtXKDRNUAzqu7 9Ov4HLAymhErVuKwySKU1usGEBymHz2qqkjp0ZJoqg8GzVIze8bIl13H4RCitE7TUArE o7RHLsboGDVRsMFR3xJFdnbUTp3TNwHcxhelJLS+BqPDyUvHEEjRDmGBcqxVFvEo1VSK gBoIpoIu8bsglSaQInexENkg48W5KauS/fcrkSVCEXrM6E68j7ovkyGfQv6ntX0eCXkj JfAap84r16GVoB4mR9omWXJYmOawHkcKOGX7fW91QspAyOzQ1/mEuuUBgL3uLYgH+0H8 XrNQ== 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=dG888aR6ZbB5jyxUnmEtsfcFKxrcl17BHx7TZQJHOSg=; b=KXQ26zUH3xqpE/VhMEDyo65PG8jWrJYWfzvVTuryxMRxJceHjI/u50VkLP1RSsPWG6 Yfte6ivC6m14jp2xNEu3zAN+NawWPwDg1SrQ+ytYBxW4QX4tqDercE4ZYjeKVm61nR6j EEqtzELlg1dcFqLwVlroOyM61V+u6NCpak4eW2WTnw+oIjQo8MfBHbE+jFj7ECh9UTsf 9MivlqomrdYEssYsESids38m1MK4Wgw5gn6YX1iCtCFswdMEB2ZJAoxT+kpBjkml+H9r kQthybDIPVvIjYtDvvV33CT6Lkg8sFPoXN4xbcVnXB/X6Sm7K861ZIGjplFz6chT3WFQ 3RMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=KLuT14xg; spf=pass (google.com: domain of mptcp+bounces-5866-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) smtp.mailfrom="mptcp+bounces-5866-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 ot7-20020a17090b3b4700b001ead1c2f859si534785pjb.187.2022.06.28.12.04.22 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 28 Jun 2022 12:04:22 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5866-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=KLuT14xg; spf=pass (google.com: domain of mptcp+bounces-5866-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) smtp.mailfrom="mptcp+bounces-5866-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 ED5BE280CC4 for ; Tue, 28 Jun 2022 19:04:21 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5FCBA46BB; Tue, 28 Jun 2022 19:04:20 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) (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 D5B384C75 for ; Tue, 28 Jun 2022 19:04:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1656443058; x=1687979058; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=KLD6tyHtFOIl8tUbSzN0mzIm//0DER4c0z5tbUBNWHM=; b=KLuT14xgpwo/4wHS5bWW33wGdy+J7nXDpLz76JNWb6FvozsrOx4PkLox OUGmk1uCFhyVLPcVHT4Of5zYLhxeYMPcPvzZRKwzMWI8e2fwZ3IBX4hqr UoLAPq0Zt1HuMH94qGX3FXKCwg9QxS56WAeLuPNw0KXFwz/BgwsaZtUwD 7CUherfTbRDROrqiFtkmJS+hLL5F/jwFep4UI8vKWwbCmU4FDXYx+DWmE cqckNJOf5Ye09IQzWK2kBuQY1u1rAS8sighfFEiRpT5ohVuBrWiuLNrHx pazTkB55ELXV+ftEqeo/qYVoypyezoSxr4REaSQQV+b2C4bkkv9ttF+0x A==; X-IronPort-AV: E=McAfee;i="6400,9594,10392"; a="343514647" X-IronPort-AV: E=Sophos;i="5.92,229,1650956400"; d="scan'208";a="343514647" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jun 2022 12:04:01 -0700 X-IronPort-AV: E=Sophos;i="5.92,229,1650956400"; d="scan'208";a="917294952" Received: from gwbruss-mobl1.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.112.228]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jun 2022 12:04:01 -0700 From: Mat Martineau To: mptcp@lists.linux.dev Cc: Mat Martineau Subject: [PATCH mptcp-net 2/3] mptcp: Add a variant of mptcp_subflow_send_ack() for locked subflows Date: Tue, 28 Jun 2022 12:03:55 -0700 Message-Id: <20220628190356.326233-3-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220628190356.326233-1-mathew.j.martineau@linux.intel.com> References: <20220628190356.326233-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 existing mptcp_subflow_send_ack() function handles subflow locking, but it's also sometimes necessary to force an ack from a caller that already holds the subflow socket lock. This is required for the following commit. Fixes: 340fa6667a69 ("mptcp: Only send extra TCP acks in eligible socket st= ates") Signed-off-by: Mat Martineau --- net/mptcp/protocol.c | 9 +++++++-- net/mptcp/protocol.h | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 3efbae948707..b96a80c8e22a 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 Sun May 5 14:45:42 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:ab0:35eb:0:0:0:0:0 with SMTP id w11csp2725033uau; Tue, 28 Jun 2022 12:04:19 -0700 (PDT) X-Google-Smtp-Source: AGRyM1s4c5gq4F/30hlNa/2ejTA858TfnFwevCfOI0M/4LmCoPUbaYFTyIRGTnnWEo2PuDftNyvH X-Received: by 2002:a17:90b:1b49:b0:1ec:a756:edc with SMTP id nv9-20020a17090b1b4900b001eca7560edcmr1195915pjb.200.1656443059421; Tue, 28 Jun 2022 12:04:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656443059; cv=none; d=google.com; s=arc-20160816; b=SueXBFjhvbkIssAGMNBQntuiJRHmlK9S0RQsAJvVBaLuns4xx83y++duIXUAZ59Cwf Gbxu6qhQnP599lik5lbM8pvYoZSUPSGajS3indIajn9sA8aPb2bxNabaWL0p7+9vQxc/ l4/Xfz4C5LOUdEYvJvO7CODCS3aQuF+H7D8+1yGGnNeFU0Yxnz3s5vSg8vM1rutDulv+ QRXS5C1xe+Qr9UJw+IuJRJ0Ovt2JUvCXG4ohHmQBKq4f03/Zhzg4so+xKnBdeB/Zafh6 2JTDPsI/nEVS20LcyjMcvWexokYHvVWJC7x0QV5QIXqTb+W+HxoMG1SVtTRkeXmYweZJ i9Ug== 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=wYzBd27OF58hpaFflbEpgNuA2hI5wyKsPD74jeTzi5A=; b=EB0275h9An/1Tsm0YVNBT6VMIK/9IkVY5Py6ZamV1IfQuCJPXhCNtq8o3D/cbwSbvm vU1pyyB9Mf+p2bGLUc8UjK/Y8aXZmRFxKC6/Lf0gQzXnm7uUG9x7zb+jtVLFgCpd7dwY zPTq9aJa7ZgI8Zlmtgskz4t/TcyVO75tWPf8LvoZ4oRiw8qjzSFLsjEtWW+y5Fm/MiD2 bWZN8DF0fbEM5MesqiqPD1ZuyNv/aUlgmPGOMpJPneF3QHBOtmpeV5qCI1yxCj0FbsZL ShwIfv0MeBOEo5WiUlx7dMl7NR00ULhfJ+BM+NR9+WufMSuuE57ZJadLJwGQTXDbYG2Y HV1Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=BfBUq1nz; spf=pass (google.com: domain of mptcp+bounces-5863-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5863-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 a12-20020a170902eccc00b0016a0f6b053fsi21945063plh.450.2022.06.28.12.04.19 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 28 Jun 2022 12:04:19 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5863-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=BfBUq1nz; spf=pass (google.com: domain of mptcp+bounces-5863-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5863-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 95B6F280C43 for ; Tue, 28 Jun 2022 19:04:18 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 58B5246BB; Tue, 28 Jun 2022 19:04:17 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) (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 C91F57A for ; Tue, 28 Jun 2022 19:04:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1656443053; x=1687979053; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=9oafj8IEchmde+4lypiQotwbsnPAYCakx9LD9twZoQs=; b=BfBUq1nzsPMO8/d92Leqdd+Zs23k+WNZyDPnjz1GPembMeaX6ce/ucWc oA1CdDpxMN5wYKuFbJ9ULa9pnZqzE7HcPeRN1aaInkX/X3Pv3hzsO5nng lLp/TDe4oMLMRAhKn6GEUAYKAVqU7++XsOoSP1mdjGX5rSEZUsdOdF4Z7 2l9sG3b8P/7eLJLwpzT3mQQmEu8jnruHjLQ8RrDLZakgq6ewYVq+PF7AI TuO8xBUoZJ+rwoT+Pm4+jqFBB0f3BIn+XrSO8rr0iFK+XO6wNLH+eSBGr rDsYFOY2LrVg3yCSL+ODG0AyWGLd8lSre254ZAGisKJuRAIh7xJtu1edv g==; X-IronPort-AV: E=McAfee;i="6400,9594,10392"; a="343514649" X-IronPort-AV: E=Sophos;i="5.92,229,1650956400"; d="scan'208";a="343514649" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jun 2022 12:04:01 -0700 X-IronPort-AV: E=Sophos;i="5.92,229,1650956400"; d="scan'208";a="917294954" Received: from gwbruss-mobl1.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.112.228]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jun 2022 12:04:01 -0700 From: Mat Martineau To: mptcp@lists.linux.dev Cc: Mat Martineau Subject: [PATCH mptcp-net 3/3] mptcp: Acquire the subflow socket lock before modifying MP_PRIO flags Date: Tue, 28 Jun 2022 12:03:56 -0700 Message-Id: <20220628190356.326233-4-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220628190356.326233-1-mathew.j.martineau@linux.intel.com> References: <20220628190356.326233-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. Fixes: 067065422fcd ("mptcp: add the outgoing MP_PRIO support") Signed-off-by: Mat Martineau --- net/mptcp/pm_netlink.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index d04b34fc9a8e..05c6a95e9c28 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -729,11 +729,13 @@ static int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_= sock *msk, struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); struct sock *sk =3D (struct sock *)msk; 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; @@ -742,7 +744,8 @@ static int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_so= ck *msk, __MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_MPPRIOTX); =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; } --=20 2.37.0