The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=9b03cc2a70e4b6354c5f5b90e4c51b850b6b1dd2
commit 9b03cc2a70e4b6354c5f5b90e4c51b850b6b1dd2 Author: Bjoern A. Zeeb <[email protected]> AuthorDate: 2026-03-02 10:33:53 +0000 Commit: Bjoern A. Zeeb <[email protected]> CommitDate: 2026-03-05 13:44:00 +0000 net80211: sta: use IEEE80211_STATUS_SUCCESS instead of magic 0 Rather than using the status != 0 check use the way more descriptive status != IEEE80211_STATUS_SUCCESS definition. This makes it a lot more clear what is checked here. While here add a comment in case aof the (Re)Assoc Resp failure as we do not update state in that case but rely on a timeout which will bounce us back to State 1 (cf. 802.11-2024, Figure 11-23) which means SCAN in our case, rather than possibly moving us back to AUTH. We will likely have to revisit this when SAE hits the tree. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D55643 --- sys/net80211/ieee80211_sta.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/sys/net80211/ieee80211_sta.c b/sys/net80211/ieee80211_sta.c index 19e5ffe9a367..3522b1b24742 100644 --- a/sys/net80211/ieee80211_sta.c +++ b/sys/net80211/ieee80211_sta.c @@ -1011,7 +1011,7 @@ sta_auth_open(struct ieee80211_node *ni, struct ieee80211_frame *wh, vap->iv_stats.is_rx_bad_auth++; return; } - if (status != 0) { + if (status != IEEE80211_STATUS_SUCCESS) { IEEE80211_NOTE(vap, IEEE80211_MSG_DEBUG | IEEE80211_MSG_AUTH, ni, "open auth failed (reason %d)", status); vap->iv_stats.is_rx_auth_fail++; @@ -1100,7 +1100,7 @@ sta_auth_shared(struct ieee80211_node *ni, struct ieee80211_frame *wh, IEEE80211_FREE(ni->ni_challenge, M_80211_NODE); ni->ni_challenge = NULL; } - if (status != 0) { + if (status != IEEE80211_STATUS_SUCCESS) { IEEE80211_NOTE_FRAME(vap, IEEE80211_MSG_DEBUG | IEEE80211_MSG_AUTH, wh, "shared key auth failed (reason %d)", status); @@ -1766,7 +1766,12 @@ sta_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m0, int subtype, frm += 2; status = le16toh(*(uint16_t *)frm); frm += 2; - if (status != 0) { + if (status != IEEE80211_STATUS_SUCCESS) { + /* + * See ieee80211_tx_mgt_cb() for state handling. This + * essentially provokes a timeout bouncing us back to + * State 1 instead of dealing with it properly. + */ IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ASSOC, wh->i_addr2, "%sassoc failed (reason %d)", ISREASSOC(subtype) ? "re" : "", status);
