Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp2088161pxf; Sat, 27 Mar 2021 02:16:56 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx/xrxuznMYGQUJY7/unNG11GexJuZU36JavY2lkcBM4ElxSTagojStv/LA3gITBQo6YjYP X-Received: by 2002:a17:907:68a:: with SMTP id wn10mr19662645ejb.551.1616836616068; Sat, 27 Mar 2021 02:16:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616836616; cv=none; d=google.com; s=arc-20160816; b=eMxZcwSGmVf41Zya+vMhu8BaGN793XEj/KNAeKzO5DtOMugvFy3SZ+gzIQLkIyNXnX vR2cvstN9oLk/83GuuS8Job+poYAtZ5glwQINgOyf8/caahAZvYPwcj2w0XNgAGd+iMh uXjED0x50vBbyOtzo7IhM1n7FQy7o9aqGXuKr1lli6/9spmNQKl3B01CeRpD4LXWUHYJ Q3+ZqIhduSLaQmT/DbhmW5aCn+OEbn6Q7jao4JUabuPo0qYwZ+VToSmomijzeHmLAqJd nQZgW3L0sy30NX9u7M03g+Aq86gihJxoAL3IZHXVzvVjw/XG60KigU+eB4B7puZS193b xTog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=LxCJ58sa6sGkVKK/yAz5zjHdCvPwTTrF9YTlhv5AaPM=; b=X62VaF1xrOhRwEPD91wlpYNi7BWTghaY5F0jj5aEgDrRTNo/HRO8fE9JKirbEeW/nq cMKCrMkaoZk/eJh83AAQU4GZ8Ft/3XGdoe2v+VAdqxidRW2ZwoUHpnx/p9g9I/bTLs9c iqCihAanbNEotoLBK32BQle7xXfZIfconxvTBioshQBlMbui6Au4X+2llUQ4uS/N5s5V xMzYsEy9h5b0OacAKguOjYKYERPVwTb70e2C/Ni0VRBrbunO7yDtcM8Fjlu3+hEF5uTK MVh/At0NoX+i1XWGggEJ1L3y9dOwIjF9eu/3Z5tu/guHMRJ/Zl5KcB6FPVQcxNAzJ8+e /eOA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=D2suNFkD; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s9si8542996edc.296.2021.03.27.02.16.09; Sat, 27 Mar 2021 02:16:56 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=D2suNFkD; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230415AbhC0JK5 (ORCPT + 99 others); Sat, 27 Mar 2021 05:10:57 -0400 Received: from mail.kernel.org ([198.145.29.99]:54916 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230427AbhC0JK3 (ORCPT ); Sat, 27 Mar 2021 05:10:29 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 192E5619C9; Sat, 27 Mar 2021 09:10:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1616836229; bh=jpGfudS3XIaY1+wnBRLaZ63cR4rZ0792GRG0qOc/tsE=; h=From:To:Cc:Subject:Date:From; b=D2suNFkDKfuYPi9f4sgL0QejJpnak5RUoAmiAkuRomyjhXoEWMMyVVKH3qzG0o8+j ePTTADBtJkVUq8EOmRhrW1ozI2oE42m/vAfxoMD4KSq1SoXeIwb92C/+5I5AgXn2t3 3u0H2sZQ1sI/BerUgaxOsKvrFujVLld3jDQWXOVWsx0qkI7HVePRAP4uFwJwZ8Bwjc OnfQ0tSh53rf6bUpkQ+4VrDKlozrEq57Ky/Q89dgGFGd2owpqzkMs25HQWwyufZOEv fCDVs5AISrkS6/FxG3Ctk042C0/nNdqzMYkU4/NB08C5FQbKZxCGaaefelLx4vlFZ2 gCEQ+Oi0Y33LA== From: Lorenzo Bianconi To: nbd@nbd.name Cc: linux-wireless@vger.kernel.org, lorenzo.bianconi@redhat.com, sean.wang@mediatek.com Subject: [PATCH] mt76: mt7921: fix key set/delete issue Date: Sat, 27 Mar 2021 10:10:14 +0100 Message-Id: <03ae98875c71f593e6290c7e87a41fea7e374465.1616836088.git.lorenzo@kernel.org> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org Similar to the mt7915 driver, deleting a key with the previous key index deletes the current key. Rework the code to better keep track of multiple keys and check for the key index before deleting the current key Signed-off-by: Lorenzo Bianconi --- .../net/wireless/mediatek/mt76/mt7921/main.c | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c b/drivers/net/wireless/mediatek/mt76/mt7921/main.c index 92775f98a80c..c0ebb6077fa8 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c @@ -418,7 +418,8 @@ static int mt7921_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, struct mt7921_sta *msta = sta ? (struct mt7921_sta *)sta->drv_priv : &mvif->sta; struct mt76_wcid *wcid = &msta->wcid; - int idx = key->keyidx; + u8 *wcid_keyidx = &wcid->hw_key_idx; + int idx = key->keyidx, err = 0; /* The hardware does not support per-STA RX GTK, fallback * to software mode for these. @@ -434,6 +435,7 @@ static int mt7921_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, switch (key->cipher) { case WLAN_CIPHER_SUITE_AES_CMAC: key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIE; + wcid_keyidx = &wcid->hw_key_idx2; break; case WLAN_CIPHER_SUITE_TKIP: case WLAN_CIPHER_SUITE_CCMP: @@ -448,16 +450,23 @@ static int mt7921_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, return -EOPNOTSUPP; } - if (cmd == SET_KEY) { - key->hw_key_idx = wcid->idx; - wcid->hw_key_idx = idx; - } else if (idx == wcid->hw_key_idx) { - wcid->hw_key_idx = -1; - } + mt7921_mutex_acquire(dev); + + if (cmd == SET_KEY) + *wcid_keyidx = idx; + else if (idx == *wcid_keyidx) + *wcid_keyidx = -1; + else + goto out; + mt76_wcid_key_setup(&dev->mt76, wcid, cmd == SET_KEY ? key : NULL); - return mt7921_mcu_add_key(dev, vif, msta, key, cmd); + err = mt7921_mcu_add_key(dev, vif, msta, key, cmd); +out: + mt7921_mutex_release(dev); + + return err; } static int mt7921_config(struct ieee80211_hw *hw, u32 changed) -- 2.30.2