From 4694e755e9edcf15ea0cc501261375790428ed0f Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: May 25 2023 07:19:33 +0000 Subject: wifi: brcmfmac: cfg80211: Pass the PMK in binary instead of hex (git-fixes). --- diff --git a/patches.suse/wifi-brcmfmac-cfg80211-Pass-the-PMK-in-binary-instea.patch b/patches.suse/wifi-brcmfmac-cfg80211-Pass-the-PMK-in-binary-instea.patch new file mode 100644 index 0000000..78b1874 --- /dev/null +++ b/patches.suse/wifi-brcmfmac-cfg80211-Pass-the-PMK-in-binary-instea.patch @@ -0,0 +1,57 @@ +From 89b89e52153fda2733562776c7c9d9d3ebf8dd6d Mon Sep 17 00:00:00 2001 +From: Hector Martin +Date: Tue, 14 Feb 2023 18:24:19 +0900 +Subject: [PATCH] wifi: brcmfmac: cfg80211: Pass the PMK in binary instead of hex +Git-commit: 89b89e52153fda2733562776c7c9d9d3ebf8dd6d +Patch-mainline: v6.4-rc1 +References: git-fixes + +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 +Reviewed-by: Arend van Spriel +Signed-off-by: Hector Martin +Signed-off-by: Kalle Valo +Link: https://lore.kernel.org/r/20230214092423.15175-6-marcan@marcan.st +Acked-by: Takashi Iwai + +--- + .../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 b561ca6b467e..e0a70a671550 100644 +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +@@ -1686,13 +1686,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; + +- /* 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]); ++ memset(&pmk, 0, sizeof(pmk)); ++ ++ /* 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.35.3 + diff --git a/series.conf b/series.conf index 52fc3d3..4283969 100644 --- a/series.conf +++ b/series.conf @@ -19906,6 +19906,7 @@ patches.suse/scsi-lpfc-Fix-ioremap-issues-in-lpfc_sli4_pci_mem_se.patch patches.suse/scsi-lpfc-Silence-an-incorrect-device-output.patch patches.suse/wifi-brcmfmac-support-CQM-RSSI-notification-with-old.patch + patches.suse/wifi-brcmfmac-cfg80211-Pass-the-PMK-in-binary-instea.patch patches.suse/wifi-rtw88-mac-Return-the-original-error-from-rtw_pw.patch patches.suse/wifi-rtw88-mac-Return-the-original-error-from-rtw_ma.patch patches.suse/wifi-mac80211-adjust-scan-cancel-comment-check.patch