mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-07-22 11:16:59 +08:00
51 lines
1.8 KiB
Diff
51 lines
1.8 KiB
Diff
From 1afeed973f6d538e18e171e55bfa91e25e6b804f Mon Sep 17 00:00:00 2001
|
|
From: Hector Martin <marcan@marcan.st>
|
|
Date: Mon, 20 Dec 2021 19:15:58 +0900
|
|
Subject: [PATCH 107/171] brcmfmac: cfg80211: Pass the PMK in binary instead of
|
|
hex
|
|
|
|
Apparently the hex passphrase mechanism does not work on newer
|
|
chips/firmware (e.g. BCM4387). It seems there was a simple way of
|
|
passing it in binary all along, so use that and avoid the hexification.
|
|
|
|
OpenBSD has been doing it like this from the beginning, so this should
|
|
work on all chips.
|
|
|
|
Also clear the structure before setting the PMK. This was leaking
|
|
uninitialized stack contents to the device.
|
|
|
|
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
|
|
Signed-off-by: Hector Martin <marcan@marcan.st>
|
|
---
|
|
.../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 13 +++++++------
|
|
1 file changed, 7 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
index 6ed53665b0dd..7789f74707a7 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
@@ -1421,13 +1421,14 @@ static int brcmf_set_pmk(struct brcmf_if *ifp, const u8 *pmk_data, u16 pmk_len)
|
|
{
|
|
struct brcmf_pub *drvr = ifp->drvr;
|
|
struct brcmf_wsec_pmk_le pmk;
|
|
- int i, err;
|
|
+ int err;
|
|
+
|
|
+ memset(&pmk, 0, sizeof(pmk));
|
|
|
|
- /* convert to firmware key format */
|
|
- pmk.key_len = cpu_to_le16(pmk_len << 1);
|
|
- pmk.flags = cpu_to_le16(BRCMF_WSEC_PASSPHRASE);
|
|
- for (i = 0; i < pmk_len; i++)
|
|
- snprintf(&pmk.key[2 * i], 3, "%02x", pmk_data[i]);
|
|
+ /* pass pmk directly */
|
|
+ pmk.key_len = cpu_to_le16(pmk_len);
|
|
+ pmk.flags = cpu_to_le16(0);
|
|
+ memcpy(pmk.key, pmk_data, pmk_len);
|
|
|
|
/* store psk in firmware */
|
|
err = brcmf_fil_cmd_data_set(ifp, BRCMF_C_SET_WSEC_PMK,
|
|
--
|
|
2.34.1
|
|
|