From nobody Thu Sep 18 06:46:31 2025 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp549136pis; Wed, 18 May 2022 15:04:56 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyDXkLhAH6ZhHxusgoul5cwtCPadwSQoeqJXthMd5e93LgQcyMYVXBuq6j5GBKb5Do6MRBL X-Received: by 2002:a05:6808:10d2:b0:326:cd01:472c with SMTP id s18-20020a05680810d200b00326cd01472cmr1013140ois.170.1652911496029; Wed, 18 May 2022 15:04:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652911496; cv=none; d=google.com; s=arc-20160816; b=sqBIalQlwqBDQFhvK4xohRrCXU1hnTKoDVpJaZUZm1unjgyZoZsTaq0u8wkrT2FXf3 3NFiuIss1F2TKX50V4EMnkO89lZ8AUOdVj1FvdzZBFP7nhPJxD2dChXDnBiiGYsYz3UM e9T8LQ5pFhzLrGdUQiy4PwLebp9igVyRPdq2bSCTrwvq99pfSP3qBkGjhhywFayXiPN3 gtiHmcY21qSllShHPVwioXxi/hG9VO+EtFAhwWpuPqbBYSz34dfOLMj0AfOOr0ecHd5S eZFlmHsNBqlXhg4vNwGq0/aXKQD7ihoNYF9lkLpbyp7tTBHxaEb0Gbd9dARK7zp1TQJN JJEg== 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=9bNbbiHy2RUPQuyWSU9YGZ2CLid+lrAjou8ZZ2IEur8=; b=aGz/aW3rZM2597pYe4wpDx0knHQwN/CTwD9PgwjU0dy+xRRspmG71pGdqVyuNVS9y3 OyJjr/0fRgJxBfkGxLXCEJ35nGyLxVFlFSypbOHTg6pCtfOJDcSf9uFGauQ2UpCdgNF1 ET8znBHpR1pJKZ46rFAdxFEpFbb6PHX9XBB8B+P/nfgQv18r1aE1iuKVprf9Ox+yoZiW 0jBvTXn7OYuJnuY/7Mvjqo0UPwk2vVaPcV6lPVGYqzMErXpV+GYvDk73D+td/iz5oUNx cWM/2JkbP8Lenffwrolrc8OO3LTt5wCuGHIL7W0YvkMKX1wfoaZQ5fOyLgTwIJboVCRs H0gg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=nshZX9Ir; spf=pass (google.com: domain of mptcp+bounces-5374-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5374-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 h23-20020a056830401700b006054e86efd4si3455687ots.317.2022.05.18.15.04.55 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 18 May 2022 15:04:56 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5374-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=nshZX9Ir; spf=pass (google.com: domain of mptcp+bounces-5374-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5374-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 CA51F2E09C7 for ; Wed, 18 May 2022 22:04:55 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5A5A533C3; Wed, 18 May 2022 22:04:54 +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 1267D2F5D for ; Wed, 18 May 2022 22:04:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1652911493; x=1684447493; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=XhH0wmTxQ1KVSwFHJOHPbb9tf9TWh9PPcfw1KfcbbPI=; b=nshZX9Iry91Z0Tc7XyKL0hM1zxwuCJQ22Z5cxG+qzn7W1t645VSkc8ep 5JJtaIW3nWDqmg84uYzzHu0Pl/86IRgqyfTuS2mnB0N0LFlHE/+79dvEE w4yJL2M+qbXFA10gEX7kPDAJulAg0V5hagx8aKqXqG8D9kRJJWJhhz/46 6ScQdDt0wVcaTtrGDpXftlRuBv8Ea2cztILR0tH9thqdNhsT4zkazyTDj TjjcbXCPhgsJBosMcDnN05VnZnstfDjHoIjJyM5dDi4RPQQzT0tzZ0GOy IwzAUkkpwWqJxdXfefwTokwRKeFdBQfMRNH2D86e9YGCC1UReN1cQK9r1 w==; X-IronPort-AV: E=McAfee;i="6400,9594,10351"; a="271865360" X-IronPort-AV: E=Sophos;i="5.91,235,1647327600"; d="scan'208";a="271865360" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 May 2022 15:04:51 -0700 X-IronPort-AV: E=Sophos;i="5.91,235,1647327600"; d="scan'208";a="598075435" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.36.18]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 May 2022 15:04:51 -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, Geliang Tang , Mat Martineau Subject: [PATCH net-next 1/4] mptcp: stop using the mptcp_has_another_subflow() helper Date: Wed, 18 May 2022 15:04:43 -0700 Message-Id: <20220518220446.209750-2-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220518220446.209750-1-mathew.j.martineau@linux.intel.com> References: <20220518220446.209750-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 mentioned helper requires the msk socket lock, and the current callers don't own it nor can't acquire it, so the access is racy. All the current callers are really checking for infinite mapping fallback, and the latter condition is explicitly tracked by the relevant msk variable: we can safely remove the caller usage - and the caller itself. The issue is present since MP_FAIL implementation, but the fix only applies since the infinite fallback support, ence the somewhat unexpected fixes tag. Fixes: 0530020a7c8f ("mptcp: track and update contiguous data status") Acked-and-tested-by: Geliang Tang Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/pm.c | 2 +- net/mptcp/protocol.h | 13 ------------- net/mptcp/subflow.c | 3 +-- 3 files changed, 2 insertions(+), 16 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index cdc2d79071f8..a3f9bf8e8912 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -304,7 +304,7 @@ void mptcp_pm_mp_fail_received(struct sock *sk, u64 fai= l_seq) =20 pr_debug("fail_seq=3D%llu", fail_seq); =20 - if (mptcp_has_another_subflow(sk) || !READ_ONCE(msk->allow_infinite_fallb= ack)) + if (!READ_ONCE(msk->allow_infinite_fallback)) return; =20 if (!READ_ONCE(subflow->mp_fail_response_expect)) { diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 4672901d0dfe..91f7ef6e6c56 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -649,19 +649,6 @@ static inline void mptcp_subflow_tcp_fallback(struct s= ock *sk, inet_csk(sk)->icsk_af_ops =3D ctx->icsk_af_ops; } =20 -static inline bool mptcp_has_another_subflow(struct sock *ssk) -{ - struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(ssk), *tmp; - struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); - - mptcp_for_each_subflow(msk, tmp) { - if (tmp !=3D subflow) - return true; - } - - return false; -} - void __init mptcp_proto_init(void); #if IS_ENABLED(CONFIG_MPTCP_IPV6) int __init mptcp_proto_v6_init(void); diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 6d59336a8e1e..1e07b4d7ee7b 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1218,8 +1218,7 @@ static bool subflow_check_data_avail(struct sock *ssk) if (!__mptcp_check_fallback(msk)) { /* RFC 8684 section 3.7. */ if (subflow->send_mp_fail) { - if (mptcp_has_another_subflow(ssk) || - !READ_ONCE(msk->allow_infinite_fallback)) { + if (!READ_ONCE(msk->allow_infinite_fallback)) { ssk->sk_err =3D EBADMSG; tcp_set_state(ssk, TCP_CLOSE); subflow->reset_transient =3D 0; --=20 2.36.1 From nobody Thu Sep 18 06:46:31 2025 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp549150pis; Wed, 18 May 2022 15:04:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyGOx/UMGlpn/ixmg2hUQn8xFZMHz8ucT1+kKQ1eLfaBohQcU6sS64w3Y+eDqHOOph2T/Zd X-Received: by 2002:a05:6871:b2c:b0:f1:d6ce:58d1 with SMTP id fq44-20020a0568710b2c00b000f1d6ce58d1mr941148oab.33.1652911497057; Wed, 18 May 2022 15:04:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652911497; cv=none; d=google.com; s=arc-20160816; b=WaXIktL3UidfD3ZVoobO80ORyGo3m3CQp8V0kMZ+JUvFw7RvbQ6GARRmC7fSNTMLjP Nqc+UoZrGdw8hm5vnp6XZJYGsQhVt2HpqqlzXtniDv+k3PL8gWWb9+hHeNvs1Wn5yHTF w8w8JZKmRukTctnFVU230GdBGPeZ1E+QOgj0jc1EBW9KWMRLmsHHNrjmh17cchGB00PG jEqKu2YaxVtgreST2J63DIXTWg8I/0CZXyxdW5xIIYORvDPL1BMkp4/v9+9R9xgKiNd1 DFF4rmsVSRj9p9o89eTjepqGMCqqorV4Ovw8xQxN1quaBMCbMfZ+y9xjRzmlUMBA4+M7 6YKw== 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=l0lErixsxpB/mv3SgNG1/5QZlHMru/Y0C8bG3x3hRMA=; b=O2L9dlKV6S9K3hTE46FO2XGpqokoZCF1vPSbznqxy8zEKSiriOM2troElNe7Bij5Wj bAaACUSHgRJczyjk/mUjaUz4/0gKW/M2QKxDFKdI6+jIbqNuPN5DzgaaveAM1piL11ka L2ByB50Rafd2UuCQqrBt+N9QsSrazSV42Vgm8fOQj9SoEYc0Arw88mtiYaPAj9MbcH8h qDCx+fFGisy1kWAlto/GzF6WtLAKzeBvTfgR8c4N/xwrhrz3sjZf5tOEHkE6+Ss1m0Qq EdbMsQRM2wQg+MUp1frBv3pDPMHivyVa4I2PUs7NHD/yj/ENvBsE+2H/nCS5uzaANBu+ Bftw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=GDnjcLAv; spf=pass (google.com: domain of mptcp+bounces-5375-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5375-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 fz18-20020a056870ed9200b000ee09167dcesi3041448oab.46.2022.05.18.15.04.56 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 18 May 2022 15:04:57 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5375-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=GDnjcLAv; spf=pass (google.com: domain of mptcp+bounces-5375-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5375-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 82C7B280A73 for ; Wed, 18 May 2022 22:04:56 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9492933CA; Wed, 18 May 2022 22:04:54 +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 4FF3633C1 for ; Wed, 18 May 2022 22:04:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1652911493; x=1684447493; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=GVWGQpvg+UyEHqjI+bX3d9iFhUdLescrDXVKmRlkUj0=; b=GDnjcLAvYSGXSji+F6zi7TouczKYx86lQr0ScJGczQYgp9QF8HmNuK80 G3iD10CPVjsqmQWUQkoULiWxrF1NR9bAXnMh+8xsUq/D3fbhZ9sK9aVVo oVwPECIERv5Fra7xi8eccmbYgLR+GacYEv2y/jEsCTk5JcVjazHC9FABo mTOomCJM3qEnMndIR2hD8hTKxJ24XOHCWbP2Up0HLHwCb3ogTuHX5u6tg Gj7PjU57W9ddu4tDZO8sx5AP0KJMOr42Tj7CSSw1wEUAFrmmz5XloPvvg BUcEULVpyIysMiLBn6BK8jCF2YOzhqOQWA+z/767g012x4xVGuGo26wAu Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10351"; a="271865361" X-IronPort-AV: E=Sophos;i="5.91,235,1647327600"; d="scan'208";a="271865361" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 May 2022 15:04:51 -0700 X-IronPort-AV: E=Sophos;i="5.91,235,1647327600"; d="scan'208";a="598075438" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.36.18]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 May 2022 15:04:51 -0700 From: Mat Martineau To: netdev@vger.kernel.org Cc: Mat Martineau , davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, matthieu.baerts@tessares.net, mptcp@lists.linux.dev Subject: [PATCH net-next 2/4] mptcp: Check for orphaned subflow before handling MP_FAIL timer Date: Wed, 18 May 2022 15:04:44 -0700 Message-Id: <20220518220446.209750-3-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220518220446.209750-1-mathew.j.martineau@linux.intel.com> References: <20220518220446.209750-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" MP_FAIL timeout (waiting for a peer to respond to an MP_FAIL with another MP_FAIL) is implemented using the MPTCP socket's sk_timer. That timer is also used at MPTCP socket close, so it's important to not have the two timer users interfere with each other. At MPTCP socket close, all subflows are orphaned before sk_timer is manipulated. By checking the SOCK_DEAD flag on the subflows, each subflow can determine if the timer is safe to alter without acquiring any MPTCP-level lock. This replaces code that was using the mptcp_data_lock and MPTCP-level socket state checks that did not correctly protect the timer. Fixes: 49fa1919d6bc ("mptcp: reset subflow when MP_FAIL doesn't respond") Reviewed-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/pm.c | 7 ++----- net/mptcp/subflow.c | 12 ++++-------- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index a3f9bf8e8912..e4ce2bdd2b07 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -313,13 +313,10 @@ void mptcp_pm_mp_fail_received(struct sock *sk, u64 f= ail_seq) subflow->send_mp_fail =3D 1; MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_MPFAILTX); subflow->send_infinite_map =3D 1; - } else if (s && inet_sk_state_load(s) !=3D TCP_CLOSE) { + } else if (!sock_flag(sk, SOCK_DEAD)) { pr_debug("MP_FAIL response received"); =20 - mptcp_data_lock(s); - if (inet_sk_state_load(s) !=3D TCP_CLOSE) - sk_stop_timer(s, &s->sk_timer); - mptcp_data_unlock(s); + sk_stop_timer(s, &s->sk_timer); } } =20 diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 1e07b4d7ee7b..cb6e54fd401e 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1013,12 +1013,9 @@ static enum mapping_status get_mapping_status(struct= sock *ssk, pr_debug("infinite mapping received"); MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_INFINITEMAPRX); subflow->map_data_len =3D 0; - if (sk && inet_sk_state_load(sk) !=3D TCP_CLOSE) { - mptcp_data_lock(sk); - if (inet_sk_state_load(sk) !=3D TCP_CLOSE) - sk_stop_timer(sk, &sk->sk_timer); - mptcp_data_unlock(sk); - } + if (!sock_flag(ssk, SOCK_DEAD)) + sk_stop_timer(sk, &sk->sk_timer); + return MAPPING_INVALID; } =20 @@ -1226,9 +1223,8 @@ static bool subflow_check_data_avail(struct sock *ssk) tcp_send_active_reset(ssk, GFP_ATOMIC); while ((skb =3D skb_peek(&ssk->sk_receive_queue))) sk_eat_skb(ssk, skb); - } else { + } else if (!sock_flag(ssk, SOCK_DEAD)) { WRITE_ONCE(subflow->mp_fail_response_expect, true); - /* The data lock is acquired in __mptcp_move_skbs() */ sk_reset_timer((struct sock *)msk, &((struct sock *)msk)->sk_timer, jiffies + TCP_RTO_MAX); --=20 2.36.1 From nobody Thu Sep 18 06:46:31 2025 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp549164pis; Wed, 18 May 2022 15:04:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwkhcHJ13uqoBAYQm7uBUhiwB6xAvzSTzIdw0YkyQbQje6FkPBFDKyGziwQIHOA7ocYw6sE X-Received: by 2002:a05:6870:4348:b0:f1:ec31:10e7 with SMTP id x8-20020a056870434800b000f1ec3110e7mr635168oah.156.1652911498226; Wed, 18 May 2022 15:04:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652911498; cv=none; d=google.com; s=arc-20160816; b=AUoYOP9K62HbkSiqldj4hrF7IguvTEOEssE0b1m27lHOBzLimGEf3reQUIX8gjSpHi Rv4eN11T3CAYW7G/JaWvMwIyPbj7WFevb7U2rNjR+PT/als42A8OShXP9znSJOOF8WOk KJwYzERJuGelpRc+VHzG++KOiFIv+snQlTBOM3gHuRjn/Qlz07VXkCfDeGhtUlzpdos9 BYK8j+444HYWuSv4jJZ/bKaKtquj/jsjo6BiTHX+5PoO8o6H6VFML0QigI+oPtY4D9bt FI9JtCJabOvi5X1TTAEXPYzohduEW4d7zXNxvhy6jwFb6OfibCgTBgT3ToAI/eInNR/g Hraw== 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=WtEztFjo5BtWAj/O8XHBNno7bGNiZwIik/SBu6Bfwuk=; b=BNHeSyFNweVeXC+ELlLX2O4qVjhxrUvdZplPUdu1PKf7m26Fiv9oF+hOnQXf//fOxH xJyO0H3NFWfnsGRmOlkktsNm0k3P1Zx4eKHMJDlcmCh6U7hxZmnygvT5tJ+sn1fVyNQy PDNLJF4RLIkDOksp3GQILoUJCyuzDgum2yBXoT5Ge2tuCelJ2Ps6z+z1HTeD5IUVMAK9 Z9HzczO5U5OWOCUht8QSq02GDLwfwMZgi/ukvUbvfWprZN7oEQLCp2cXpJ1V5PUAUE6X HMUTtHV7+rFxh69rgBK9Ot9p6eXAfT0iCjO5/W7BKNVtnZzQsP8nUuf6QDcNa/KnduSY r8HQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=bxYICvfS; spf=pass (google.com: domain of mptcp+bounces-5376-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5376-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 u3-20020a0568301f4300b006061ff7afd5si3882836oth.123.2022.05.18.15.04.58 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 18 May 2022 15:04:58 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5376-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=bxYICvfS; spf=pass (google.com: domain of mptcp+bounces-5376-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5376-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 1247B2E09D3 for ; Wed, 18 May 2022 22:04:58 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6C0E033C1; Wed, 18 May 2022 22:04:55 +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 5E8F333C5 for ; Wed, 18 May 2022 22:04:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1652911494; x=1684447494; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=hIRxRCdZVwJzOTRyToBDC8wOrpXFZqS/+AneHQ5JYEA=; b=bxYICvfSszbGSMmULaS73D6cuEXQIG//rubXf47I7oj5bI7amblQFJkx j4Lqw45XUlvLJnX1x0CukZvO3+a5+EnEnPINhIBn8d0NjwPgf0UIRhW0q N/CZSLGcUkcMFNikEih8jDi8B1HWXNxN47MaBpCUSrLjcYgEQGmpt6DN3 0yZtaCigFk2vz6YcoBuBYpqzB3fyimK24Z7H/ofu5aWxkvW7OOu0mLmJD ePh3SPU1nofFxrZFzemIix7q+6Lt8XXw13F47agR5a3wpDHrybTk1e8nQ cpDAT9NYn36tXq85AtiMHR8tG1e/vHIZ+aTgiM4im1St9/fRpkdDfX33Y A==; X-IronPort-AV: E=McAfee;i="6400,9594,10351"; a="271865363" X-IronPort-AV: E=Sophos;i="5.91,235,1647327600"; d="scan'208";a="271865363" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 May 2022 15:04:51 -0700 X-IronPort-AV: E=Sophos;i="5.91,235,1647327600"; d="scan'208";a="598075440" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.36.18]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 May 2022 15:04:51 -0700 From: Mat Martineau To: netdev@vger.kernel.org Cc: Mat Martineau , davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, matthieu.baerts@tessares.net, mptcp@lists.linux.dev Subject: [PATCH net-next 3/4] mptcp: Do not traverse the subflow connection list without lock Date: Wed, 18 May 2022 15:04:45 -0700 Message-Id: <20220518220446.209750-4-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220518220446.209750-1-mathew.j.martineau@linux.intel.com> References: <20220518220446.209750-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 MPTCP socket's conn_list (list of subflows) requires the socket lock to access. The MP_FAIL timeout code added such an access, where it would check the list of subflows both in timer context and (later) in workqueue context where the socket lock is held. Rather than check the list twice, remove the check in the timeout handler and only depend on the check in the workqueue. Also remove the MPTCP_FAIL_NO_RESPONSE flag, since mptcp_mp_fail_no_response() has insignificant overhead and can be checked on each worker run. Fixes: 49fa1919d6bc ("mptcp: reset subflow when MP_FAIL doesn't respond") Reported-by: Paolo Abeni Reviewed-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/protocol.c | 16 +--------------- net/mptcp/protocol.h | 1 - 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 921d67174e49..17e13396024a 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2190,23 +2190,10 @@ mp_fail_response_expect_subflow(struct mptcp_sock *= msk) return ret; } =20 -static void mptcp_check_mp_fail_response(struct mptcp_sock *msk) -{ - struct mptcp_subflow_context *subflow; - struct sock *sk =3D (struct sock *)msk; - - bh_lock_sock(sk); - subflow =3D mp_fail_response_expect_subflow(msk); - if (subflow) - __set_bit(MPTCP_FAIL_NO_RESPONSE, &msk->flags); - bh_unlock_sock(sk); -} - static void mptcp_timeout_timer(struct timer_list *t) { struct sock *sk =3D from_timer(sk, t, sk_timer); =20 - mptcp_check_mp_fail_response(mptcp_sk(sk)); mptcp_schedule_work(sk); sock_put(sk); } @@ -2588,8 +2575,7 @@ static void mptcp_worker(struct work_struct *work) if (test_and_clear_bit(MPTCP_WORK_RTX, &msk->flags)) __mptcp_retrans(sk); =20 - if (test_and_clear_bit(MPTCP_FAIL_NO_RESPONSE, &msk->flags)) - mptcp_mp_fail_no_response(msk); + mptcp_mp_fail_no_response(msk); =20 unlock: release_sock(sk); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 91f7ef6e6c56..5e371b278252 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -117,7 +117,6 @@ #define MPTCP_WORK_EOF 3 #define MPTCP_FALLBACK_DONE 4 #define MPTCP_WORK_CLOSE_SUBFLOW 5 -#define MPTCP_FAIL_NO_RESPONSE 6 =20 /* MPTCP socket release cb flags */ #define MPTCP_PUSH_PENDING 1 --=20 2.36.1 From nobody Thu Sep 18 06:46:31 2025 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp549170pis; Wed, 18 May 2022 15:04:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyf+Tf/6wJlGXhVDOspg5PE+pmHHkHCsoyUJbotIKQz1h5GjUiknt1AXVpt2ehU+nWhKuHB X-Received: by 2002:a9d:73d9:0:b0:606:21c9:a283 with SMTP id m25-20020a9d73d9000000b0060621c9a283mr744661otk.321.1652911499368; Wed, 18 May 2022 15:04:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652911499; cv=none; d=google.com; s=arc-20160816; b=KIYNkD6oN3XkwNQknX5lDyl3DkbLGyVMck1NpW5JkMnVQiLczwQmWPmrdxAegnN8au VspcrFLlcu4PUUd59/GZKABP9OsxXmM2V0QyI8b2S9qqHhM4fnD+ZRcNgZyR4AB+6B0y yocSAPzCz5SC8nbNxPSEYOATgi+4B/RMPlCRIw7KFRcox6IeS8/dTsFRyNE5h7Ks0eEM 2FojWkJDwfkM/hxA4CHKBR6+d6mGH+2/ya3gIiX1coDN0DFC4ECx8sVZm4Ch3LTws8V8 QaWu6g093Mi13lsAn1bnvPUeZXMB+V4hUnUDN1bl4eawAMQN1lcVmPNt/x9kIYett9V3 H84g== 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=/Q9ZwGA7jnsgjBdP5vnhlivv6FeW/WCHlNzjId+JSWg=; b=KpIBOWTJVNy2YjCl2jUxxAiM4mUs/D4wsV6sGMPAyEyMZBAcVx+MtuipKbwsO2jeqD 4Nq35jxfFAw3PwcS7nmWCbgIene4M9WdULpKRHZHX0kKvHy04poA0/MQCj4cQ0/+vtax z5zNie4QoQtTbdGcAGF4Wv36dARhL6sNx4OlBn1nCMN2x0thmBEVtSSsvv5O9fSrrdHf ylhJtpvMxcE9uEDB4+2M21NJv79140MJ7ry9nU9E1vRuY/focPqcfeUfifyjBWiYYVoD UjIXbvZOV3qcu9Cx/abEKqOFuFokcja8RjtzIieTyXfFuQAOHSlVlTgmqBSLCIOCNh+J 9uwg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=ZYM6iBSF; spf=pass (google.com: domain of mptcp+bounces-5377-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5377-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 y128-20020aca3286000000b002fa7b9cdfa7si3016104oiy.207.2022.05.18.15.04.59 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 18 May 2022 15:04:59 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5377-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=ZYM6iBSF; spf=pass (google.com: domain of mptcp+bounces-5377-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5377-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 33C722E09F8 for ; Wed, 18 May 2022 22:04:59 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 53B0333C5; Wed, 18 May 2022 22:04:56 +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 8F6F933C7 for ; Wed, 18 May 2022 22:04:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1652911494; x=1684447494; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=7jv4TLkPgS77sTOajhv/AhHBPudRU+BK3j6zHr5UKYM=; b=ZYM6iBSFBCNyJ0IkB/0PJGvv45zYTq3yHYHZ0kZASVuAZCHxFEzaptTp EgYsXK4BLmePCAlUKV0hJAj3UUj+2r4RBnT/F6sM8EGjHS79iJfFHPsQ5 no+K94t8x+BdlUXrhv3xoyGTo8S020EyCnTIUCzfb7GdAOFTZroP1M6US oc3s2ChZaBiQOsIiFE40assefS1qS6FDHrIEOdDYagza81zrwqwpxL7Cv ASmbLcjfTwuTYdTAaoQbueJadKGkOAbT2B5u9CNsWdCxBzXLeVz4eZwRy Ou/8+uqCersrBiAb+R2mj3/SzgzVH7uEwZy9vEtezJ9wfbJyAY2Fv6/HK A==; X-IronPort-AV: E=McAfee;i="6400,9594,10351"; a="271865365" X-IronPort-AV: E=Sophos;i="5.91,235,1647327600"; d="scan'208";a="271865365" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 May 2022 15:04:51 -0700 X-IronPort-AV: E=Sophos;i="5.91,235,1647327600"; d="scan'208";a="598075443" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.209.36.18]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 May 2022 15:04:51 -0700 From: Mat Martineau To: netdev@vger.kernel.org Cc: Geliang Tang , davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net-next 4/4] selftests: mptcp: add MP_FAIL reset testcase Date: Wed, 18 May 2022 15:04:46 -0700 Message-Id: <20220518220446.209750-5-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220518220446.209750-1-mathew.j.martineau@linux.intel.com> References: <20220518220446.209750-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 Add the multiple subflows test case for MP_FAIL, to test the MP_FAIL reset case. Use the test_linkfail value to make 1024KB test files. Invoke reset_with_fail() to use 'iptables' and 'tc action pedit' rules to produce the bit flips to trigger the checksum failures on ns2eth2. Add delays on ns2eth1 to make sure more data can translate on ns2eth2. The check_invert flag is enabled in reset_with_fail(), so this test prints out the inverted bytes, instead of the file mismatch errors. Invoke pedit_action_pkts() to get the numbers of the packets edited by the tc pedit actions, and print this numbers to the output. Co-developed-by: Paolo Abeni Signed-off-by: Paolo Abeni Signed-off-by: Geliang Tang Signed-off-by: Mat Martineau --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 7381d1f85209..91039605d82f 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -2705,6 +2705,16 @@ fail_tests() chk_join_nr 0 0 0 +1 +0 1 0 1 "$(pedit_action_pkts)" chk_fail_nr 1 -1 invert fi + + # multiple subflows + if reset_with_fail "MP_FAIL MP_RST" 2; then + tc -n $ns2 qdisc add dev ns2eth1 root netem rate 1mbit delay 5 + pm_nl_set_limits $ns1 0 1 + pm_nl_set_limits $ns2 0 1 + pm_nl_add_endpoint $ns2 10.0.2.2 dev ns2eth2 flags subflow + run_tests $ns1 $ns2 10.0.1.1 1024 + chk_join_nr 1 1 1 1 0 1 1 0 "$(pedit_action_pkts)" + fi } =20 userspace_tests() --=20 2.36.1