From: Lorenzo Bianconi <lore...@kernel.org>

[ Upstream commit 930e0eaddf810cfa90e114a0df02f48539e1346f ]

Fix Tx-Rx MIC overwrite during TKIP hw key configuration

Fixes: 01cfc1b45421 ("mt76: mt7615: add BIP_CMAC_128 cipher support")
Tested-by: YN Chen <yn.c...@mediatek.com>
Signed-off-by: Lorenzo Bianconi <lore...@kernel.org>
Signed-off-by: Felix Fietkau <n...@nbd.name>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/net/wireless/mediatek/mt76/mt7615/mac.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c 
b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
index 8dc645e398fda..3d62fda067e44 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
@@ -1046,15 +1046,17 @@ int mt7615_mac_wtbl_update_key(struct mt7615_dev *dev,
        if (cmd == SET_KEY) {
                if (cipher == MT_CIPHER_TKIP) {
                        /* Rx/Tx MIC keys are swapped */
+                       memcpy(data, key, 16);
                        memcpy(data + 16, key + 24, 8);
                        memcpy(data + 24, key + 16, 8);
+               } else {
+                       if (cipher != MT_CIPHER_BIP_CMAC_128 && wcid->cipher)
+                               memmove(data + 16, data, 16);
+                       if (cipher != MT_CIPHER_BIP_CMAC_128 || !wcid->cipher)
+                               memcpy(data, key, keylen);
+                       else if (cipher == MT_CIPHER_BIP_CMAC_128)
+                               memcpy(data + 16, key, 16);
                }
-               if (cipher != MT_CIPHER_BIP_CMAC_128 && wcid->cipher)
-                       memmove(data + 16, data, 16);
-               if (cipher != MT_CIPHER_BIP_CMAC_128 || !wcid->cipher)
-                       memcpy(data, key, keylen);
-               else if (cipher == MT_CIPHER_BIP_CMAC_128)
-                       memcpy(data + 16, key, 16);
        } else {
                if (wcid->cipher & ~BIT(cipher)) {
                        if (cipher != MT_CIPHER_BIP_CMAC_128)
-- 
2.27.0



Reply via email to