From patchwork Fri Oct 20 03:34:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Lin X-Patchwork-Id: 13430001 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2E66FC001DF for ; Fri, 20 Oct 2023 03:34:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346942AbjJTDeX (ORCPT ); Thu, 19 Oct 2023 23:34:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50936 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346929AbjJTDeU (ORCPT ); Thu, 19 Oct 2023 23:34:20 -0400 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2085.outbound.protection.outlook.com [40.107.21.85]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 165BBD7C; Thu, 19 Oct 2023 20:34:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BggqzKtX1Jlm/fJufr7QNaNrRgcogN1WzJ8O09mJ5bIUh54HkuTThupevACV1Ph3oBGkK9OwglXfmx7cEK1XZey3uB5kw0uGbcQ1Q/iq4p0XennHz1Es57f5ynm6lOkUlP++5sKNqkMLj4GJx2zUXtR+dUyygs2BH0ud22hr2gMD0Wmodkro1hspDWdqueO0kElLu9dq1ry4BgIPYcwnJ5fPRDyker4TR6HI2eKCA3Tenpbn8uSL65RZtekd+hQKEGvOpGz7gSDfehuU72yePmqgEUFT1Wpzv4ivuirMLNT7LbQyoRUsCKO0LwSigh3WhCZFnraxHS5d7GKqRJTkPQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=U4SkeeAq/HkU/8HoKVchswjM51I1gqV16brMIKI5cU0=; b=b8TnDLNc35mAQsDUAmc0AsPACN6HWr4c/Z6AfQuQVQPnxAJ9v//I/l/80HEBAwk/e6hbhEGotl3BNbiz4wdC9wu+aEBgOBv5CtWdZSFiSPGGde8WGABQFFuiCTqKA/EVJrIUa5YHYZDnLaO5HZJyNo/kBhgRKGZColFODQiQqh5argzdxt8j+tOG4Te9ccLgBcZJgvWhAgERqlJz49OGSGGfCChPTa6Nu5sR0JwCytoDbNsnm/HGyXPVkjNBS9vHnlPKY7VbUyaKhzCVIWpw2FxXB/r+pKXUjnX2BRIAP0Oynqyqa5akzuexpOtrAdWmz/BKnMpkxEGfoRA0DiAQrQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=U4SkeeAq/HkU/8HoKVchswjM51I1gqV16brMIKI5cU0=; b=RdLe+Rz+KqSJM6IwUNXdbzq+S5Vxc8SaW/NAYqKuQHnBbhLZPJ4LvCNMO4nvnJmqvFoVunRvhwN8EZsTqoz0xKlqDTBpCQWI+0gDvOo5qQfKlj5K9O9WNX9rjRPCi55s5oH4p8dRzTkDXxbjPb9u8SLaPckXUIxdfi5vKk0YN5s= Received: from PA4PR04MB9638.eurprd04.prod.outlook.com (2603:10a6:102:273::20) by DB9PR04MB8236.eurprd04.prod.outlook.com (2603:10a6:10:245::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6886.34; Fri, 20 Oct 2023 03:34:11 +0000 Received: from PA4PR04MB9638.eurprd04.prod.outlook.com ([fe80::34dd:289e:9e8b:9c9b]) by PA4PR04MB9638.eurprd04.prod.outlook.com ([fe80::34dd:289e:9e8b:9c9b%7]) with mapi id 15.20.6933.011; Fri, 20 Oct 2023 03:34:11 +0000 From: David Lin To: "linux-wireless@vger.kernel.org" CC: "linux-kernel@vger.kernel.org" , "briannorris@chromium.org" , "kvalo@kernel.org" , "francesco@dolcini.it" , Sharvari Harisangam , David Lin , Pete Hsieh Subject: [PATCH v5 3/6] wifi: mwifiex: fixed reassocation issue for WPA3. Thread-Topic: [PATCH v5 3/6] wifi: mwifiex: fixed reassocation issue for WPA3. Thread-Index: AdoDBklPP2ms8qKvSYKhwn8ugGVR0w== Date: Fri, 20 Oct 2023 03:34:11 +0000 Message-ID: Accept-Language: zh-TW, en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PA4PR04MB9638:EE_|DB9PR04MB8236:EE_ x-ms-office365-filtering-correlation-id: 84d3de13-bbec-4b12-2a01-08dbd11d6ce3 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 897YWYWYWfmdXuSGPPFPrLlFg8OgSDhKRvvPzdHRklSzOPmbngJvYGI2B2dH9ESTh66WDaVbg7HSi4PTvMLPHP6r/AVHhUjJSlv+tPkM0WUobVDxUdExOhy3/TDj6yUG9Rg3g0BBC93GnQbIxzfsHo/3gUpt4kRKeOU4LCQYAL4gm/WS5NI1pbiPrawtawkXX4fgSZA15MRDIa+prkcQVW0cvEHhvtNLWP/t4KVuIAHWoXcH1JRxWAlJsIRBzdH9HWFXAD9xti6DgglaLmEV7vK7+oWGidmgbfvfegfBOXfp/nXRJJIac2Q6fvgVHoF3N3YTt6IuH/vsh0x3hvpomeWNj7SPVvAqGFta7wuXCeCfTITWjQUyqEb3RF3k4aZbjS3iY47XAcJBtCllPFeKg40PPL6IXrfCwSkF16ldCuaYRkY1ThVF9EQF6JJgY94yN4etVprYugE639mvi5Pi0PdbvkGt0sG21SlTr6dXGLK+SbXJv6557U92fbNig0TPJ0NWqo+FSuqfP6r6MHFPeRAFBOXv5nr7cEckkfLmKzL373Z84UIiNXZrxmLrZWQXbtVrS1XxJ36rOuACnaeTJhaZfTQQWIFUQTuef147xF1LQpWA4GlL5NWzqmRY7zQG x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PA4PR04MB9638.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(136003)(396003)(376002)(346002)(366004)(39860400002)(230922051799003)(451199024)(1800799009)(64100799003)(186009)(38070700009)(66446008)(38100700002)(66556008)(33656002)(64756008)(478600001)(66476007)(54906003)(66946007)(6506007)(6916009)(76116006)(71200400001)(2906002)(8936002)(5660300002)(8676002)(52536014)(9686003)(41300700001)(4326008)(86362001)(316002)(7696005)(83380400001)(122000001)(26005)(55016003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: yQ4oaXk4FSwAwMxmU2fxK3aBDJ0xcLQrilFipKKjqzFnuJoeLDunsSgGD47pwPl2zz1VWwXXAxlyOPsMymoopZpVtMYrbt6clLwv60849sU0KWa/PRuXF5uVtUDIyzJzkgkImoYVJhP6DwbzXLgmgTWkwL6KNcWpSUwlEw9o5chplEU/PXnRYDwEQKyjqp0/vp94fOJjhOk0EbRRLxVe+wLQ3fj2Kb93dz3+m7h4V8NxZgTkXjj7/GEklFypb+UEk//mfpbzUtRzESJk9I2hyMT75GgnFbloe0S7ydZ13tJCPnjiVHM+EWnKMjhbdsOZfSsQX9Rw2W2YIBbkFfMxuZXlU9ylJdYNhQ5GeOvPyUnT/ec/xtmgNXpWSIqigiKLIbu3CZFRaS9moVseIXEIeM9UcgtM2j1CmTwsDU+4M5AJUh3pAvZMfM9HsGcT3wpaUeXlpdeepjmhb0ad23Sdt5ZfpI5uzS9sPsVadSr31QVZTav/JQm3a1Qp7lJf74wKvzO+pal7d03rQvDW0OdmxsEdJdDyUkKcanGDz+9pza7lKmbA4tBEr8hiv9bg2pUJZPi3sUkYheWtzxDllHcA51ryxdZUyPxn5oNVP6RzqHETp/V8kDLlod4yWZue6XJ4mjkg+2oQ99z1s1VsHSUWRWt6t5zq9y9CVoA5DqyC2YL6kBYaXIEqAW1rBaP9iGq75PW2RR7829KaziK9rFcYtCirXbJnhkJNIZjt1zO2jkrI+tfXgCfGCX0LKbshg0+V0zbVdhzzIqZSSWRAhedimjZW4ZO0PdK6N+Km3KYxms6Dqzy8PiJpanXzrpf6wl6+sHDfBDWRqUrcD1eRN5No1L1SXlJyEMmq9mpXKYC/9YkD7oYX3rLy1iUvzz0FhiDjWaxswAWoPalKOGRZFoF4yt6Ew318H1pxpCYRfcifwMCfSKmJF/y9tLg2o4MBX84p0hIyss74aKzAvWVGCSw8YA5L2Z5/zvCYXAMfBf5HhHSe5ZFcO92H6RnVJOd67DoJdHnDTFzzNfvFWMJkCY2wEB8+hsOkcexlZ6Bjwi4IBaUDouc52OmH4BtEjI2K+opg3NByW9yfIPN25EZvSpn/PPU3YYFS56fUYD/BbcfJKBFtK5pEFIIuUWe2smRbNrDQaVXa9BdpilCkK/6BN1eSiPOGtvlPcCkxZC+GEsYHM25Cb8AIsi9WtUJXyiWB5aMQqmgvdVGshB+1CG5lhQLXQtmvqxK93mcz+rxu/Fz8inmMUJbXyrBXHraafLim9+g/2naC6Sd7TbLD0BQxLNy+EEo9QwTVPBEZOv4IOZq3w3+I9CFa7VRVKPF8f5qtcCOvQxTMVsDWgko2bEsb9JuWU7A+B8yIvrYQZVcYpicpAFaKSAkg+e+HvUeDLrKIeCrJNKNG7GxkX1ZWaGcO99flIZv7/3hBLlKY1KALAD/BYtoO6iCEJU1yYrGTxMnkVan0crHtZwATT5KXowfCzrkci1IqF/tIVYztDAhknsq2g0CP3sw1yktC/l5You4g0CxKFfeXGP+XMiWjxvn8zjmeDjoFmAVAm27Uw9O/ArqCbRTC71jhFds7b6aXFRHsyTko MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PA4PR04MB9638.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 84d3de13-bbec-4b12-2a01-08dbd11d6ce3 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Oct 2023 03:34:11.3639 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Nk9ParlmJ8D4ny0+O9C/o95ImvuYruCgBHuVwBVterkTTmaD4aF9qWkJAYZTA6H8J6UMtXnhZ+g1wSywl/Ginw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8236 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org This issue is related to resatart/reconfigure AP. When AP is restarted or reconfigured, wpa_supplilcant will use cached PMKSA to do association to AP. Because association failure does not report to cfg80211/wpa_supplicant, wpa_supplicant will always use cached PMKSA to do assocaiton. Connection can't be established under this way. Signed-off-by: David Lin --- .../net/wireless/marvell/mwifiex/cfg80211.c | 25 ++++++++----------- drivers/net/wireless/marvell/mwifiex/cmdevt.c | 18 +++++++++++++ drivers/net/wireless/marvell/mwifiex/init.c | 1 + drivers/net/wireless/marvell/mwifiex/main.c | 6 +++++ drivers/net/wireless/marvell/mwifiex/main.h | 3 +++ 5 files changed, 39 insertions(+), 14 deletions(-) diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c index 3d59e6a441b9..a21310f3807c 100644 --- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c +++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c @@ -4395,9 +4395,6 @@ mwifiex_cfg80211_associate(struct wiphy *wiphy, struct net_device *dev, int ret; struct cfg80211_ssid req_ssid; const u8 *ssid_ie; - struct cfg80211_rx_assoc_resp assoc_resp = { - .uapsd_queues = -1, - }; if (GET_BSS_ROLE(priv) != MWIFIEX_BSS_ROLE_STA) { mwifiex_dbg(adapter, ERROR, @@ -4433,13 +4430,13 @@ mwifiex_cfg80211_associate(struct wiphy *wiphy, struct net_device *dev, req_ssid.ssid_len = ssid_ie[1]; if (req_ssid.ssid_len > IEEE80211_MAX_SSID_LEN) { - mwifiex_dbg(priv->adapter, ERROR, "invalid SSID - aborting\n"); + mwifiex_dbg(adapter, ERROR, "invalid SSID - aborting\n"); goto ssid_err; } memcpy(req_ssid.ssid, ssid_ie + 2, req_ssid.ssid_len); if (!req_ssid.ssid_len || req_ssid.ssid[0] < 0x20) { - mwifiex_dbg(priv->adapter, ERROR, "invalid SSID - aborting\n"); + mwifiex_dbg(adapter, ERROR, "invalid SSID - aborting\n"); goto ssid_err; } rcu_read_unlock(); @@ -4466,25 +4463,25 @@ mwifiex_cfg80211_associate(struct wiphy *wiphy, struct net_device *dev, memcpy(priv->cfg_bssid, req->bss->bssid, ETH_ALEN); - mwifiex_dbg(priv->adapter, MSG, + mwifiex_dbg(adapter, MSG, "assoc: send association to %pM\n", req->bss->bssid); - cfg80211_ref_bss(priv->adapter->wiphy, req->bss); + cfg80211_ref_bss(adapter->wiphy, req->bss); ret = mwifiex_bss_start(priv, req->bss, &req_ssid); - if (!ret) { - assoc_resp.links[0].bss = priv->attempted_bss_desc->bss; - assoc_resp.buf = priv->assoc_rsp_buf; - assoc_resp.len = priv->assoc_rsp_size; - cfg80211_rx_assoc_resp(priv->netdev, - &assoc_resp); - } else { + if (ret) { priv->auth_flag = 0; priv->auth_alg = 0xFFFF; eth_zero_addr(priv->cfg_bssid); } + if (priv->assoc_rsp_size) { + priv->req_bss = req->bss; + adapter->assoc_resp_received = true; + queue_work(adapter->workqueue, &adapter->main_work); + } + cfg80211_put_bss(priv->adapter->wiphy, req->bss); return 0; diff --git a/drivers/net/wireless/marvell/mwifiex/cmdevt.c b/drivers/net/wireless/marvell/mwifiex/cmdevt.c index 311af5f40c3e..16777af50097 100644 --- a/drivers/net/wireless/marvell/mwifiex/cmdevt.c +++ b/drivers/net/wireless/marvell/mwifiex/cmdevt.c @@ -924,6 +924,24 @@ int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter) return ret; } +void mwifiex_process_assoc_resp(struct mwifiex_adapter *adapter) +{ + struct cfg80211_rx_assoc_resp assoc_resp = { + .uapsd_queues = -1, + }; + struct mwifiex_private *priv = + mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA); + + if (priv->assoc_rsp_size) { + assoc_resp.links[0].bss = priv->req_bss; + assoc_resp.buf = priv->assoc_rsp_buf; + assoc_resp.len = priv->assoc_rsp_size; + cfg80211_rx_assoc_resp(priv->netdev, + &assoc_resp); + priv->assoc_rsp_size = 0; + } +} + /* * This function handles the timeout of command sending. * diff --git a/drivers/net/wireless/marvell/mwifiex/init.c b/drivers/net/wireless/marvell/mwifiex/init.c index f86a527fd7ca..4326e03a66d3 100644 --- a/drivers/net/wireless/marvell/mwifiex/init.c +++ b/drivers/net/wireless/marvell/mwifiex/init.c @@ -223,6 +223,7 @@ static void mwifiex_init_adapter(struct mwifiex_adapter *adapter) adapter->cmd_resp_received = false; adapter->event_received = false; adapter->data_received = false; + adapter->assoc_resp_received = false; clear_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags); diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c index 3bebb6c37604..1dac77946813 100644 --- a/drivers/net/wireless/marvell/mwifiex/main.c +++ b/drivers/net/wireless/marvell/mwifiex/main.c @@ -365,6 +365,12 @@ int mwifiex_main_process(struct mwifiex_adapter *adapter) } } + /* Chekc for Assoc Resp */ + if (adapter->assoc_resp_received) { + adapter->assoc_resp_received = false; + mwifiex_process_assoc_resp(adapter); + } + /* Check if we need to confirm Sleep Request received previously */ if (adapter->ps_state == PS_STATE_PRE_SLEEP) diff --git a/drivers/net/wireless/marvell/mwifiex/main.h b/drivers/net/wireless/marvell/mwifiex/main.h index 83449ad84d15..ae4b44ad6c50 100644 --- a/drivers/net/wireless/marvell/mwifiex/main.h +++ b/drivers/net/wireless/marvell/mwifiex/main.h @@ -615,6 +615,7 @@ struct mwifiex_private { #define MWIFIEX_ASSOC_RSP_BUF_SIZE 500 u8 assoc_rsp_buf[MWIFIEX_ASSOC_RSP_BUF_SIZE]; u32 assoc_rsp_size; + struct cfg80211_bss *req_bss; #define MWIFIEX_GENIE_BUF_SIZE 256 u8 gen_ie_buf[MWIFIEX_GENIE_BUF_SIZE]; @@ -915,6 +916,7 @@ struct mwifiex_adapter { u8 cmd_resp_received; u8 event_received; u8 data_received; + u8 assoc_resp_received; u16 seq_num; struct cmd_ctrl_node *cmd_pool; struct cmd_ctrl_node *curr_cmd; @@ -1104,6 +1106,7 @@ void mwifiex_insert_cmd_to_pending_q(struct mwifiex_adapter *adapter, int mwifiex_exec_next_cmd(struct mwifiex_adapter *adapter); int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter); +void mwifiex_process_assoc_resp(struct mwifiex_adapter *adapter); int mwifiex_handle_rx_packet(struct mwifiex_adapter *adapter, struct sk_buff *skb); int mwifiex_process_tx(struct mwifiex_private *priv, struct sk_buff *skb,