mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
wifi: ath10k: Fix connection after GTK rekeying
[ Upstream commit 487e8a8c3421df0af3707e54c7e069f1d89cbda7 ] It appears that not all hardware/firmware implementations support group key deletion correctly, which can lead to connection hangs and deauthentication following GTK rekeying (delete and install). To avoid this issue, instead of attempting to delete the key using the special WMI_CIPHER_NONE value, we now replace the key with an invalid (random) value. This behavior has been observed with WCN39xx chipsets. Tested-on: WCN3990 hw1.0 WLAN.HL.3.3.7.c2-00931-QCAHLSWMTPLZ-1 Reported-by: Alexey Klimov <alexey.klimov@linaro.org> Closes: https://lore.kernel.org/all/DAWJQ2NIKY28.1XOG35E4A682G@linaro.org Signed-off-by: Loic Poulain <loic.poulain@oss.qualcomm.com> Reviewed-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com> Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com> Tested-by: Alexey Klimov <alexey.klimov@linaro.org> # QRB2210 RB1 Link: https://patch.msgid.link/20250902143225.837487-1-loic.poulain@oss.qualcomm.com Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
df0a0f229f
commit
c9e7bb702b
@@ -14,6 +14,7 @@
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/random.h>
|
||||
|
||||
#include "hif.h"
|
||||
#include "core.h"
|
||||
@@ -287,8 +288,15 @@ static int ath10k_send_key(struct ath10k_vif *arvif,
|
||||
key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
|
||||
|
||||
if (cmd == DISABLE_KEY) {
|
||||
arg.key_cipher = ar->wmi_key_cipher[WMI_CIPHER_NONE];
|
||||
arg.key_data = NULL;
|
||||
if (flags & WMI_KEY_GROUP) {
|
||||
/* Not all hardware handles group-key deletion operation
|
||||
* correctly. Replace the key with a junk value to invalidate it.
|
||||
*/
|
||||
get_random_bytes(key->key, key->keylen);
|
||||
} else {
|
||||
arg.key_cipher = ar->wmi_key_cipher[WMI_CIPHER_NONE];
|
||||
arg.key_data = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return ath10k_wmi_vdev_install_key(arvif->ar, &arg);
|
||||
|
||||
Reference in New Issue
Block a user