OSDN Git Service

mt76: fix tkip configuration for mt7615/7663 devices
authorLorenzo Bianconi <lorenzo@kernel.org>
Sat, 17 Oct 2020 15:15:25 +0000 (17:15 +0200)
committerFelix Fietkau <nbd@nbd.name>
Fri, 4 Dec 2020 13:31:12 +0000 (14:31 +0100)
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.chen@mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/mac.c

index abb86a1..09da41c 100644 (file)
@@ -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)