From nobody Mon Feb 9 08:58:12 2026 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