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@infineon.com/ [3] Cc: stable@vger.kernel.org Fixes: b8a64f0e96c2 ("brcmfmac: support 4-way handshake offloading for WPA/WPA2-PSK") Signed-off-by: Janne Grunau --- 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@jannau.net --- .../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