Received: by 2002:a05:6a10:a852:0:0:0:0 with SMTP id d18csp624798pxy; Wed, 5 May 2021 09:47:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwQU4CDkafOIUZt/NI0lyHiEfX082285rgzGyYwEgIKaDxZLRjnsvEgY78oEq9NPFZy+0qF X-Received: by 2002:aa7:90d4:0:b029:28e:b912:acf with SMTP id k20-20020aa790d40000b029028eb9120acfmr13224408pfk.43.1620233257196; Wed, 05 May 2021 09:47:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620233257; cv=none; d=google.com; s=arc-20160816; b=smn/3+Y4G8ZhMTn7VQ0ESfGpZYn8CQIAit0zSKVjlw0CR1cTIYi+eHZ70Q8WHHwCTW MTNoPFnXX0wSwcpyprp77/+5jN8hEteXFtqOLHIIQdDlE4AyY4q//LIeDrFQ1ceFoXLq Qzlst6DwjPUpBNQC0I2S5+8i8Vo2p6H1XOj6L2LukN/yy8h0mDnOM4PakxLRBGdT2Wat 5tOQ05i3gUA9OJcwpxFULhgDBfcAh+00gRzdfRLcvMuAWQZVz4FvfCwgqzn2fGadWP07 7D/YI80PubM9Lrq90sznITCWl37qCkAZgM2elRvNTw7NGrC+MXk8L7gM50eVu6XuysP4 Fd7A== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=arehUmzUY/LglN8e6XBlYVdVHexm99v5B4MIfUsXJ44=; b=T+NZ776Y6CYN/Hh8eAxVB+SrczoHeOBeQXfwWdIlSepM/Kfz/hemZNhyl1WieSuHgP wtlDC5KVwRNYn2enIZWoja7P13x4Xd8nJz91seOJPjogo0/6Ux+/Alc7WFMZhXfbUodh 98SEefWJeVZFtOtGHSgyJB/GDpxhwCkVi1gVI/EfKHfPI6P9q+aOVwj9wD5jKkX049Ou uA4EojjPwnoFl2czEemVcUPF/bwzs/G1vXhWii5KBYxfqWkHvoNxkyTaReVR+dr9hsaf r0Dnp2gpLoW5VfUhzizgpTmalpnnB8nKmRNVYxaHmosfDPckgsXnXmj3ywmSrj+QKnBQ J2ZQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=UU8IoALC; 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 t14si8729858plb.78.2021.05.05.09.47.24; Wed, 05 May 2021 09:47:37 -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=UU8IoALC; 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 S235977AbhEEQro (ORCPT + 99 others); Wed, 5 May 2021 12:47:44 -0400 Received: from mail.kernel.org ([198.145.29.99]:49322 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235758AbhEEQo5 (ORCPT ); Wed, 5 May 2021 12:44:57 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id D26B061874; Wed, 5 May 2021 16:35:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1620232533; bh=GsWVx2TWKCIrL5inlj2AYPPNbMQvBe2WbhYn+taTPsc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UU8IoALC3WSCUQOv2eK1afDWT9cKND277qQYqb2FBSkuSVoJcW5j/bM+/wxXgbTc/ u+eZ1DGUYNxC6B0T2ysTKkRDDHnbVYZVCiFq9Fzfi9GnvJTbsatcQel7dj2u5Ccjap GlhD4z63DuLIhuPNpcc8rd0dt3au1kWU3A09tu7t4ioIwK2J1NvRN8jq1DGs0SGUIx GQGSgm7QmbZZXA5S59xicxiuav/Z1NJKNyRtpCF8TalG4SsCW1sMg9FV0rydc2ZHYy 6Q7FBPqTdsfWyUGpqenWgRzmKwWF6SI+0axniHHXji4eKrG917zYHUP7SlWAYIEwen GvM1lsIak7r1g== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Felix Fietkau , Sasha Levin , linux-wireless@vger.kernel.org, netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: [PATCH AUTOSEL 5.11 055/104] mt76: mt7915: fix key set/delete issue Date: Wed, 5 May 2021 12:33:24 -0400 Message-Id: <20210505163413.3461611-55-sashal@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210505163413.3461611-1-sashal@kernel.org> References: <20210505163413.3461611-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Felix Fietkau [ Upstream commit 1da4fd48d28436f8b690cdc2879603dede6d8355 ] 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: Felix Fietkau Signed-off-by: Sasha Levin --- .../net/wireless/mediatek/mt76/mt7915/main.c | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c index 0c82aa2ef219..2c75a5987544 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c @@ -314,7 +314,9 @@ static int mt7915_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, struct mt7915_sta *msta = sta ? (struct mt7915_sta *)sta->drv_priv : &mvif->sta; struct mt76_wcid *wcid = &msta->wcid; + u8 *wcid_keyidx = &wcid->hw_key_idx; int idx = key->keyidx; + int err = 0; /* The hardware does not support per-STA RX GTK, fallback * to software mode for these. @@ -329,6 +331,7 @@ static int mt7915_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, /* fall back to sw encryption for unsupported ciphers */ switch (key->cipher) { case WLAN_CIPHER_SUITE_AES_CMAC: + wcid_keyidx = &wcid->hw_key_idx2; key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIE; break; case WLAN_CIPHER_SUITE_TKIP: @@ -344,16 +347,24 @@ static int mt7915_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; - } + mutex_lock(&dev->mt76.mutex); + + 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 mt7915_mcu_add_key(dev, vif, msta, key, cmd); + err = mt7915_mcu_add_key(dev, vif, msta, key, cmd); + +out: + mutex_unlock(&dev->mt76.mutex); + + return err; } static int mt7915_config(struct ieee80211_hw *hw, u32 changed) -- 2.30.2