From patchwork Fri May 15 08:33:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?SsOpcsO0bWUgUG91aWxsZXI=?= X-Patchwork-Id: 219192 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3966AC433DF for ; Fri, 15 May 2020 08:35:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 10811205CB for ; Fri, 15 May 2020 08:35:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.b="Owso4xi7" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728474AbgEOIfT (ORCPT ); Fri, 15 May 2020 04:35:19 -0400 Received: from mail-dm6nam11on2053.outbound.protection.outlook.com ([40.107.223.53]:55808 "EHLO NAM11-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728272AbgEOIeZ (ORCPT ); Fri, 15 May 2020 04:34:25 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fxzeQpgfV/FLNtZ+A1nAcxYQFDLud27TTmhjIDpkgu+H0jUglnzq6bob3slIGmeaqH5uTysB2ngZhZTj+6deIf8H+7ES1sr5kM4ltN/6liq0sxVEurnNuz2RMqxhcQO7uWJnPiEpTatnmWe39GJC0paLVrLIQUF0XBwqWPYUqSsMckq7HrE0zyiEpEXrUMYEo8bwI0ajzPE5SIiJhkoSq1KMXYhm43MJBF4cJ9Pa4FPWoVeOzHhVtFzLM5EomQTdGcWrkTyNX9NOoOOhpQ/LA8ATVJvJgjHRpALbn0INjx8zx0mxXKA6sVFwk7Il2/FxNRR6UslpZBJVTHBCgr0dwg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nIdi0OfIf4U/a1I4T0zQSQJkaEp77HTnXw31zXyAl6Y=; b=TQ8SZFTPyfOdsCl5OM6dnXSgI6MHvz88HD7pbuiyzq+bG3kGvMow6RxTcBvhECxuEjiHXZ5EVICSYYg09nk8YaU27A6f6ARBXSUoVF/b/9NTYOxhd+GsbIou2m2zEOTneWGqxtSTCKtSkx4aEClojQaUclddfEPTsoKYKZ5SYZ3ip9HFIG7rP9Anoisgy49IlcHJ5niYBfth7iah0pI6IaG1L5FSK9mJcuVQnxuYfYs1b++xldyHJj3NZfjijYUEH8h5p/09L7pII191Y92JfAvBlozUYMAuwPg98tf9iJfnb1R2Et7/Pp7XJmOCIjtO/Re+g3RUHnmrVXxgykGUzQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nIdi0OfIf4U/a1I4T0zQSQJkaEp77HTnXw31zXyAl6Y=; b=Owso4xi7af8KgRQK3yTraa4M+f7RT7vVdmDizkRsL1C+/OmA1TzTHDsxRDABHrPm33t9MZm7LqNFiwLdBN6rAYTxFITiCvSNCpZBMBsEq06rZYFwP0G6VxNdoXTUL2dsPx1lplCkEO9vFrf5O8ZqCBEGrYfLlE2NLjRBsJl6JlM= Authentication-Results: driverdev.osuosl.org; dkim=none (message not signed) header.d=none; driverdev.osuosl.org; dmarc=none action=none header.from=silabs.com; Received: from MWHPR11MB1775.namprd11.prod.outlook.com (2603:10b6:300:10e::14) by MWHPR11MB1310.namprd11.prod.outlook.com (2603:10b6:300:28::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2979.26; Fri, 15 May 2020 08:34:13 +0000 Received: from MWHPR11MB1775.namprd11.prod.outlook.com ([fe80::e055:3e6d:ff4:56da]) by MWHPR11MB1775.namprd11.prod.outlook.com ([fe80::e055:3e6d:ff4:56da%5]) with mapi id 15.20.3000.022; Fri, 15 May 2020 08:34:13 +0000 From: Jerome Pouiller To: devel@driverdev.osuosl.org, linux-wireless@vger.kernel.org Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , =?utf-8?b?SsOpcsO0bWUgUG91aWxsZXI=?= Subject: [PATCH 13/19] staging: wfx: fix potential dead lock between join and scan Date: Fri, 15 May 2020 10:33:19 +0200 Message-Id: <20200515083325.378539-14-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200515083325.378539-1-Jerome.Pouiller@silabs.com> References: <20200515083325.378539-1-Jerome.Pouiller@silabs.com> X-ClientProxiedBy: PR0P264CA0076.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:18::16) To MWHPR11MB1775.namprd11.prod.outlook.com (2603:10b6:300:10e::14) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pc-42.home (82.67.86.106) by PR0P264CA0076.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:18::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3000.24 via Frontend Transport; Fri, 15 May 2020 08:34:11 +0000 X-Mailer: git-send-email 2.26.2 X-Originating-IP: [82.67.86.106] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b11781d8-7919-44bc-8b4b-08d7f8aabf32 X-MS-TrafficTypeDiagnostic: MWHPR11MB1310: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6430; X-Forefront-PRVS: 04041A2886 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jvYECiRVwMPGmjp/uCCqfoyHw9gxC/TrBgMFfgnjC1ktH9Se16XhGx5ZXSrgPzg5ySeWEaNQOPSrcaAeKwoOe40UVzhb3U1NJFJjy9Md+F3k3RtWqbAaO7dKJPO5VS8Tba6EJ/C0keI+z2p3AY0n+St2d0ush0NX4sQhy5YuywpKHBngVnF75+t6d4j02bV6FeSha106ZmuyqJnmF27LYhjhxxilgWrAf8Ks27JC+bA5EluGQkcTztCeJqezTNfl2paFXdtNAlfwQowt4SuQw39tE2utqYn3qrNgm7b4uXFZdgc/GM4VBHWaNP7X4JsTHfWjQmyIr/TLbAM3c2x0pztU48n50XAvXoYkdkUvy+G4qHQn5AR7paPgjk9z47cAprSl0vswW20HIwrDenSRmsOaBB3xKyWHe3Dz5dc3qIDhGss14d4bcE7eP+mihy9p X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MWHPR11MB1775.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(346002)(136003)(376002)(366004)(39850400004)(396003)(8886007)(66556008)(186003)(6512007)(66946007)(6506007)(36756003)(316002)(66476007)(26005)(52116002)(16526019)(54906003)(2906002)(2616005)(478600001)(66574014)(107886003)(956004)(8936002)(86362001)(8676002)(6486002)(5660300002)(4326008)(1076003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: Azbewu1Tyn/YS8cETNK9/rwn2mgG9UDW/leibxhhQsd0JKLr5U/D/7qQS+mKxbDU/JCst0+HHkcW+sMJQtPj4wz0/FYsc+cFc+v5gVhWRc9+LhdKKnrMKfKeUFv3EJOX5R1t+86CuPtkfGEd+UF7soNHe1g3LPX/7c5O7R93ZF2I92RrZS99p+R6kpBxt+sl0qJnChsMJ5SbtxWhuZcBEQ5KWpa0wCUjQQ9T+1mIE6A7fBfj3WwWPNwUFGOixKgR5AN2Mvdnogu0tWcKqk8IhaYWplXFC8spRd0s57u5BQV5tgM0+uXIg/Kcus8WmnZDsqtUBIaIqF5sruHaiLxEZJYPrkFLjdkzezBin143f5JGj66fhu6woALyOsVA4ZBp7fmjC2g846Fd2ydGF2NVHM/3oIEtL2Pj6jHbVqPLAG1K91jGMu8mJDY+7Fi3UiqgAKdOm4Suk9ooat2otucRbHQqQSIdvBwpTeFXnu+n1go= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: b11781d8-7919-44bc-8b4b-08d7f8aabf32 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 May 2020 08:34:13.3273 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: wrRaQEDS8bQUhJGgrxFz0OpJcxXQYC9vc+qYhQR7Wri/+wUO37PQKapRgDa30K8YyYddBHLOQbFgeL0FaoPPnw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1310 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jérôme Pouiller The device disallows to start a scan request between hif_join() and hif_set_bss_params(). The driver is not protected against that. The worst case happens when association is aborted and hif_set_bss_params() never happens. mac80211 would never ask for scan during the association process. So, this patch just aborts the association in progress when scan is requested. Signed-off-by: Jérôme Pouiller --- drivers/staging/wfx/scan.c | 5 +++++ drivers/staging/wfx/sta.c | 3 +++ drivers/staging/wfx/wfx.h | 2 ++ 3 files changed, 10 insertions(+) diff --git a/drivers/staging/wfx/scan.c b/drivers/staging/wfx/scan.c index bf7ddc75c7db..e9de19784865 100644 --- a/drivers/staging/wfx/scan.c +++ b/drivers/staging/wfx/scan.c @@ -90,6 +90,11 @@ void wfx_hw_scan_work(struct work_struct *work) mutex_lock(&wvif->wdev->conf_mutex); mutex_lock(&wvif->scan_lock); + if (wvif->join_in_progress) { + dev_info(wvif->wdev->dev, "%s: abort in-progress REQ_JOIN", + __func__); + wfx_reset(wvif); + } update_probe_tmpl(wvif, &hw_req->req); chan_cur = 0; do { diff --git a/drivers/staging/wfx/sta.c b/drivers/staging/wfx/sta.c index 7d9f680ca53a..6e9f38d051ab 100644 --- a/drivers/staging/wfx/sta.c +++ b/drivers/staging/wfx/sta.c @@ -353,6 +353,7 @@ void wfx_reset(struct wfx_vif *wvif) if (wvif_count(wvif->wdev) <= 1) hif_set_block_ack_policy(wvif, 0xFF, 0xFF); wfx_tx_unlock(wvif->wdev); + wvif->join_in_progress = false; wvif->bss_not_support_ps_poll = false; cancel_delayed_work_sync(&wvif->beacon_loss_work); } @@ -390,6 +391,7 @@ static void wfx_do_join(struct wfx_vif *wvif) wfx_set_mfp(wvif, bss); cfg80211_put_bss(wvif->wdev->hw->wiphy, bss); + wvif->join_in_progress = true; ret = hif_join(wvif, conf, wvif->channel, ssid, ssidlen); if (ret) { ieee80211_connection_loss(wvif->vif); @@ -485,6 +487,7 @@ void wfx_stop_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif) static void wfx_join_finalize(struct wfx_vif *wvif, struct ieee80211_bss_conf *info) { + wvif->join_in_progress = false; hif_set_association_mode(wvif, info); hif_keep_alive_period(wvif, 0); // beacon_loss_count is defined to 7 in net/mac80211/mlme.c. Let's use diff --git a/drivers/staging/wfx/wfx.h b/drivers/staging/wfx/wfx.h index 09a24561f092..cc9f7d16ee8b 100644 --- a/drivers/staging/wfx/wfx.h +++ b/drivers/staging/wfx/wfx.h @@ -69,6 +69,8 @@ struct wfx_vif { u32 link_id_map; bool after_dtim_tx_allowed; + bool join_in_progress; + struct delayed_work beacon_loss_work; struct tx_policy_cache tx_policy_cache;