Files
linux-t2-patches/8025-brcmfmac-cfg80211-Pass-the-PMK-in-binary-instead-of-.patch
T
Redecorating e9cd73ca95 Take WiFi patches from Asahi Linux to read OTP
This means firmware will be selected automatically like macOS
does. These patches also fix a couple of bugs and make a few
optimisations.

For this firmware selection:

 # in macos (or linux if you have a copy of the wifi folder):
git clone https://github.com/AsahiLinux/asahi-installer --depth=1
cd asahi-installer/src
python3 -m firmware.wifi /usr/share/firmware/wifi firmware.tar
 # in linux
cd /lib/firmware
sudo tar xf /path/to/firmware.tar
2021-12-24 17:24:05 +11:00

50 lines
1.8 KiB
Diff

From a27a7388f9ad605b90998037d6e75910252bab4f Mon Sep 17 00:00:00 2001
From: Hector Martin <marcan@marcan.st>
Date: Mon, 20 Dec 2021 19:15:58 +0900
Subject: [PATCH 25/30] 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.
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 ccda7ce39..d6d34e079 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -1420,13 +1420,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