lkml.org 
[lkml]   [2021]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.14 462/849] mt76: connac: fix GTK rekey offload failure on WPA mixed mode
    Date
    From: Leon Yen <Leon.Yen@mediatek.com>

    [ Upstream commit 781f62960c635cfed55a8f8c0f909bdaf8268257 ]

    Update the proper firmware programming sequence to fix GTK rekey
    offload failure on WPA mixed mode.

    In the mt76_connac_mcu_key_iter,
    gtk_tlv->proto should be only set up on pairwise key
    and gtk_tlk->group_cipher should be only set up on the group key.

    Otherwise, those parameters required by firmware would be set
    incorrectly to cause GTK rekey offload failure on WPA mixed mode
    and then disconnection follows.

    Fixes: b47e21e75c80 ("mt76: mt7615: add gtk rekey offload support")
    Co-developed-by: Sean Wang <sean.wang@mediatek.com>
    Signed-off-by: Sean Wang <sean.wang@mediatek.com>
    Signed-off-by: Leon Yen <Leon.Yen@mediatek.com>
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    .../net/wireless/mediatek/mt76/mt76_connac_mcu.c | 15 +++++++++------
    1 file changed, 9 insertions(+), 6 deletions(-)

    diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
    index 5c3a81e5f559d..f57f047fce99c 100644
    --- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
    +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
    @@ -1929,19 +1929,22 @@ mt76_connac_mcu_key_iter(struct ieee80211_hw *hw,
    key->cipher != WLAN_CIPHER_SUITE_TKIP)
    return;

    - if (key->cipher == WLAN_CIPHER_SUITE_TKIP) {
    - gtk_tlv->proto = cpu_to_le32(NL80211_WPA_VERSION_1);
    + if (key->cipher == WLAN_CIPHER_SUITE_TKIP)
    cipher = BIT(3);
    - } else {
    - gtk_tlv->proto = cpu_to_le32(NL80211_WPA_VERSION_2);
    + else
    cipher = BIT(4);
    - }

    /* we are assuming here to have a single pairwise key */
    if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE) {
    + if (key->cipher == WLAN_CIPHER_SUITE_TKIP)
    + gtk_tlv->proto = cpu_to_le32(NL80211_WPA_VERSION_1);
    + else
    + gtk_tlv->proto = cpu_to_le32(NL80211_WPA_VERSION_2);
    +
    gtk_tlv->pairwise_cipher = cpu_to_le32(cipher);
    - gtk_tlv->group_cipher = cpu_to_le32(cipher);
    gtk_tlv->keyid = key->keyidx;
    + } else {
    + gtk_tlv->group_cipher = cpu_to_le32(cipher);
    }
    }

    --
    2.33.0


    \
     
     \ /
      Last update: 2021-11-16 00:05    [W:2.121 / U:1.400 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site