|
Takashi Iwai |
4694e7 |
From 89b89e52153fda2733562776c7c9d9d3ebf8dd6d Mon Sep 17 00:00:00 2001
|
|
Takashi Iwai |
4694e7 |
From: Hector Martin <marcan@marcan.st>
|
|
Takashi Iwai |
4694e7 |
Date: Tue, 14 Feb 2023 18:24:19 +0900
|
|
Takashi Iwai |
4694e7 |
Subject: [PATCH] wifi: brcmfmac: cfg80211: Pass the PMK in binary instead of hex
|
|
Takashi Iwai |
4694e7 |
Git-commit: 89b89e52153fda2733562776c7c9d9d3ebf8dd6d
|
|
Takashi Iwai |
4694e7 |
Patch-mainline: v6.4-rc1
|
|
Takashi Iwai |
4694e7 |
References: git-fixes
|
|
Takashi Iwai |
4694e7 |
|
|
Takashi Iwai |
4694e7 |
Apparently the hex passphrase mechanism does not work on newer
|
|
Takashi Iwai |
4694e7 |
chips/firmware (e.g. BCM4387). It seems there was a simple way of
|
|
Takashi Iwai |
4694e7 |
passing it in binary all along, so use that and avoid the hexification.
|
|
Takashi Iwai |
4694e7 |
|
|
Takashi Iwai |
4694e7 |
OpenBSD has been doing it like this from the beginning, so this should
|
|
Takashi Iwai |
4694e7 |
work on all chips.
|
|
Takashi Iwai |
4694e7 |
|
|
Takashi Iwai |
4694e7 |
Also clear the structure before setting the PMK. This was leaking
|
|
Takashi Iwai |
4694e7 |
uninitialized stack contents to the device.
|
|
Takashi Iwai |
4694e7 |
|
|
Takashi Iwai |
4694e7 |
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
|
|
Takashi Iwai |
4694e7 |
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
|
Takashi Iwai |
4694e7 |
Signed-off-by: Hector Martin <marcan@marcan.st>
|
|
Takashi Iwai |
4694e7 |
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
|
Takashi Iwai |
4694e7 |
Link: https://lore.kernel.org/r/20230214092423.15175-6-marcan@marcan.st
|
|
Takashi Iwai |
4694e7 |
Acked-by: Takashi Iwai <tiwai@suse.de>
|
|
Takashi Iwai |
4694e7 |
|
|
Takashi Iwai |
4694e7 |
---
|
|
Takashi Iwai |
4694e7 |
.../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 13 +++++++------
|
|
Takashi Iwai |
4694e7 |
1 file changed, 7 insertions(+), 6 deletions(-)
|
|
Takashi Iwai |
4694e7 |
|
|
Takashi Iwai |
4694e7 |
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
Takashi Iwai |
4694e7 |
index b561ca6b467e..e0a70a671550 100644
|
|
Takashi Iwai |
4694e7 |
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
Takashi Iwai |
4694e7 |
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
Takashi Iwai |
4694e7 |
@@ -1686,13 +1686,14 @@ static int brcmf_set_pmk(struct brcmf_if *ifp, const u8 *pmk_data, u16 pmk_len)
|
|
Takashi Iwai |
4694e7 |
{
|
|
Takashi Iwai |
4694e7 |
struct brcmf_pub *drvr = ifp->drvr;
|
|
Takashi Iwai |
4694e7 |
struct brcmf_wsec_pmk_le pmk;
|
|
Takashi Iwai |
4694e7 |
- int i, err;
|
|
Takashi Iwai |
4694e7 |
+ int err;
|
|
Takashi Iwai |
4694e7 |
|
|
Takashi Iwai |
4694e7 |
- /* convert to firmware key format */
|
|
Takashi Iwai |
4694e7 |
- pmk.key_len = cpu_to_le16(pmk_len << 1);
|
|
Takashi Iwai |
4694e7 |
- pmk.flags = cpu_to_le16(BRCMF_WSEC_PASSPHRASE);
|
|
Takashi Iwai |
4694e7 |
- for (i = 0; i < pmk_len; i++)
|
|
Takashi Iwai |
4694e7 |
- snprintf(&pmk.key[2 * i], 3, "%02x", pmk_data[i]);
|
|
Takashi Iwai |
4694e7 |
+ memset(&pmk, 0, sizeof(pmk));
|
|
Takashi Iwai |
4694e7 |
+
|
|
Takashi Iwai |
4694e7 |
+ /* pass pmk directly */
|
|
Takashi Iwai |
4694e7 |
+ pmk.key_len = cpu_to_le16(pmk_len);
|
|
Takashi Iwai |
4694e7 |
+ pmk.flags = cpu_to_le16(0);
|
|
Takashi Iwai |
4694e7 |
+ memcpy(pmk.key, pmk_data, pmk_len);
|
|
Takashi Iwai |
4694e7 |
|
|
Takashi Iwai |
4694e7 |
/* store psk in firmware */
|
|
Takashi Iwai |
4694e7 |
err = brcmf_fil_cmd_data_set(ifp, BRCMF_C_SET_WSEC_PMK,
|
|
Takashi Iwai |
4694e7 |
--
|
|
Takashi Iwai |
4694e7 |
2.35.3
|
|
Takashi Iwai |
4694e7 |
|