Skip to content

Commit

Permalink
ath11k_nss: Fix Broadcast Issues After GTK Key Exchange
Browse files Browse the repository at this point in the history
Patch resolves issues where certain brodcast frames like ARP or mDNS are
not reliably transmitted after GTK key exchange.

Signed-off-by: Sean Khan <[email protected]>
  • Loading branch information
qosmio committed Jan 16, 2025
1 parent da5cdcf commit a21abc0
Showing 1 changed file with 48 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
From 52393e2ae12f18fb1a60578c24c46ebab292ddb6 Mon Sep 17 00:00:00 2001
From: Rameshkumar Sundaram <[email protected]>
Date: Mon, 28 Mar 2022 13:21:04 +0530
Subject: [PATCH] ath11k: Revert: clear the keys properly when DISABLE_KEY
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Reverting the Upstream clear key change added as a part of
436a4e886598 ("ath11k: clear the keys properly
when DISABLE_KEY")
This change exposed a race in WLAN Firmware where target asserts
are seen frequently due FW not synchronizing ath11k host’s clear
key commands(CIPHER changes to NONE) with frames in TX queue.
Hence reverting this change untill FW fixes to synchronize
ath11k host’s clear key command are available.

Signed-off-by: Rameshkumar Sundaram <[email protected]>
---
drivers/net/wireless/ath/ath11k/mac.c | 4 +++-
drivers/net/wireless/ath/ath11k/wmi.c | 3 +--
2 files changed, 4 insertions(+), 3 deletions(-)

--- a/drivers/net/wireless/ath/ath11k/mac.c
+++ b/drivers/net/wireless/ath/ath11k/mac.c
@@ -4312,7 +4312,9 @@ static int ath11k_install_key(struct ath
arg.group_key_idx = key->hw_key_idx;

if (cmd == DISABLE_KEY) {
- arg.key_cipher = WMI_CIPHER_NONE;
+ /* TODO: Check if FW expects value other than NONE for del */
+ /* arg.key_cipher = WMI_CIPHER_NONE; */
+ arg.key_len = 0;
arg.key_data = NULL;
goto install;
}
--- a/drivers/net/wireless/ath/ath11k/wmi.c
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
@@ -1991,8 +1991,7 @@ int ath11k_wmi_vdev_install_key(struct a
tlv = (struct wmi_tlv *)(skb->data + sizeof(*cmd));
tlv->header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_ARRAY_BYTE) |
FIELD_PREP(WMI_TLV_LEN, key_len_aligned);
- if (arg->key_data)
- memcpy(tlv->value, (u8 *)arg->key_data, key_len_aligned);
+ memcpy(tlv->value, (u8 *)arg->key_data, key_len_aligned);

ret = ath11k_wmi_cmd_send(wmi, skb, WMI_VDEV_INSTALL_KEY_CMDID);
if (ret) {

0 comments on commit a21abc0

Please sign in to comment.