[PATCH v2] wifi: brcmfmac: cfg80211: Report port_authorized for 4-way HS offload
From: Janne Grunau
Date: Tue Sep 15 2026 - 15:28:52 EST
Since commit 416386060 ("Mark authorization completed on driver
indication during 4-way HS offload") [0] wpa_supplicant expects
NL80211_CMD_PORT_AUTHORIZED to complete the authentication when the
driver supports 4-way handshake offload.
This was apparently never tested with the upstream brcmfmac driver as it
does not report this. This broke authentication on Apple silicon devices
(BRCM4378, BRMC4387, BRMC4388) and other devices when wpa_supplicant
2.11 was released [1]. This was initially dealt with by reverting the
commit in Fedora [2] and other Linux distributions.
Instead of carrying the revert over to wpa_supplicant 2.12 add the
expected NL80211_CMD_PORT_AUTHORIZED when the connection is established.
The "Fixes:" tag is not fully accurate as this has only became an issue
after userspace changes years after the change. Since the change is
expected to be required in all active stable branches for wpa_supplicant
2.11 / 2.12 compatibility it is helpful even though
BRCMF_PROFILE_FWSUP_SAE did not exists then.
Link: https://github.com/zephyrproject-rtos/hostap/commit/41638606054a09867fe3f9a2b5523aa4678cbfa5 [0]
Link: https://lists.infradead.org/pipermail/hostap/2024-August/042893.html [1]
Link: https://bugzilla.redhat.com/show_bug.cgi?id=2302577 [2]
Link: https://lore.kernel.org/linux-wireless/20260911065656.1269623-5-Jason.Huang2@xxxxxxxxxxxx/ [3]
Cc: stable@xxxxxxxxxxxxxxx
Fixes: b8a64f0e96c2 ("brcmfmac: support 4-way handshake offloading for WPA/WPA2-PSK")
Signed-off-by: Janne Grunau <j@xxxxxxxxxx>
---
Changes in v2:
- rebased on wireless-next with "brcmfmac: add FT/OKC roaming offload
support" applied
- updated commit message
- Link to v1: https://lore.kernel.org/r/20260912-brcmfmac-4way-handshake-offload-authenticated-event-v1-1-e41a6a8281a2@xxxxxxxxxx
---
.../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index 9d8ce7bb046e..3e30d84835a2 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -6585,6 +6585,21 @@ brcmf_bss_roaming_done(struct brcmf_cfg80211_info *cfg,
return err;
}
+static bool
+brcmf_fwsup_is_authorized(struct brcmf_cfg80211_profile *profile,
+ struct cfg80211_connect_resp_params *conn_params)
+{
+ if ((profile->use_fwsup == BRCMF_PROFILE_FWSUP_1X ||
+ profile->use_fwsup == BRCMF_PROFILE_FWSUP_ROAM) &&
+ brcmf_has_pmkid(conn_params->req_ie, conn_params->req_ie_len))
+ return true;
+ if (profile->use_fwsup == BRCMF_PROFILE_FWSUP_SAE ||
+ profile->use_fwsup == BRCMF_PROFILE_FWSUP_PSK)
+ return true;
+
+ return false;
+}
+
static s32
brcmf_bss_connect_done(struct brcmf_cfg80211_info *cfg,
struct net_device *ndev, const struct brcmf_event_msg *e,
@@ -6622,10 +6637,7 @@ brcmf_bss_connect_done(struct brcmf_cfg80211_info *cfg,
conn_params.resp_ie = conn_info->resp_ie;
conn_params.resp_ie_len = conn_info->resp_ie_len;
authorized = completed &&
- (profile->use_fwsup == BRCMF_PROFILE_FWSUP_1X ||
- profile->use_fwsup == BRCMF_PROFILE_FWSUP_ROAM) &&
- brcmf_has_pmkid(conn_params.req_ie,
- conn_params.req_ie_len);
+ brcmf_fwsup_is_authorized(profile, &conn_params);
cfg80211_connect_done(ndev, &conn_params, GFP_KERNEL);
if (authorized)
cfg80211_port_authorized(ndev, profile->bssid, NULL, 0,
---
base-commit: 42aa76b3fd9278a8504dbfaf0a449993104d2a48
change-id: 20260912-brcmfmac-4way-handshake-offload-authenticated-event-853f58ae203e
Best regards,
--
Janne Grunau <j@xxxxxxxxxx>