git: 5393cd34854e - main - LinuxKPI: 802.11: try to limit VHT (11ac) to 5Ghz
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 11 Apr 2025 21:26:26 UTC
The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=5393cd34854e1fe23ab214e9f741879fa6bf1193 commit 5393cd34854e1fe23ab214e9f741879fa6bf1193 Author: Bjoern A. Zeeb <bz@FreeBSD.org> AuthorDate: 2025-04-09 19:22:25 +0000 Commit: Bjoern A. Zeeb <bz@FreeBSD.org> CommitDate: 2025-04-11 21:26:05 +0000 LinuxKPI: 802.11: try to limit VHT (11ac) to 5Ghz We have multiple reports for iwlwifi firmware crashes where net80211 logged: ieee80211_sta_join: BSS xx:xx:xx:xx:xx:xx: 2GHz channel, VHT info; ignoring Make sure when we sync from net80211 or set state that we only do VHT if we are on the 5Ghz band. This change is likely helpful whether it fixes the originally reported problems or not. Sponsored by: The FreeBSD Foundation Reported by: Jonathan Vasquez (jon xyinn.org) Reported by: Michael Butler (imb protected-networks.net) Reported by: others (fw crash w/o net80211 logging) MFC after: 3 days Tested by: Eirik Øverby (ltning-freebsd-wireless anduin.net) Tested by: lwhsu Tested by: Michael Butler (imb protected-networks.net) Differential Revision: https://reviews.freebsd.org/D49761 --- sys/compat/linuxkpi/common/src/linux_80211.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sys/compat/linuxkpi/common/src/linux_80211.c b/sys/compat/linuxkpi/common/src/linux_80211.c index 65f203c0eec9..12897a38459e 100644 --- a/sys/compat/linuxkpi/common/src/linux_80211.c +++ b/sys/compat/linuxkpi/common/src/linux_80211.c @@ -442,7 +442,8 @@ lkpi_sta_sync_vht_from_ni(struct ieee80211_sta *sta, struct ieee80211_node *ni) uint16_t rx_mcs_map; uint8_t mcs; - if ((ni->ni_flags & IEEE80211_NODE_VHT) == 0) { + if ((ni->ni_flags & IEEE80211_NODE_VHT) == 0 || + !IEEE80211_IS_CHAN_VHT_5GHZ(ni->ni_chan)) { sta->deflink.vht_cap.vht_supported = false; return; } @@ -1878,7 +1879,7 @@ lkpi_sta_scan_to_auth(struct ieee80211vap *vap, enum ieee80211_state nstate, int } #endif #ifdef LKPI_80211_VHT - if (IEEE80211_IS_CHAN_VHT(ni->ni_chan)) { + if (IEEE80211_IS_CHAN_VHT_5GHZ(ni->ni_chan)) { #ifdef __notyet__ if (IEEE80211_IS_CHAN_VHT80P80(ni->ni_chan)) chanctx_conf->def.width = NL80211_CHAN_WIDTH_80P80; @@ -3860,7 +3861,8 @@ lkpi_scan_ies_add(uint8_t *p, struct ieee80211_scan_ies *scan_ies, } #endif #if defined(LKPI_80211_VHT) - if ((vap->iv_vht_flags & IEEE80211_FVHT_VHT) != 0) { + if (band == NL80211_BAND_5GHZ && + (vap->iv_vht_flags & IEEE80211_FVHT_VHT) != 0) { struct ieee80211_channel *c; c = ieee80211_ht_adjust_channel(ic, ic->ic_curchan, @@ -5362,7 +5364,7 @@ lkpi_ic_getradiocaps(struct ieee80211com *ic, int maxchan, NL80211_BAND_5GHZ); #ifdef LKPI_80211_VHT - if (hw->wiphy->bands[NL80211_BAND_5GHZ]->vht_cap.vht_supported){ + if (hw->wiphy->bands[NL80211_BAND_5GHZ]->vht_cap.vht_supported) { ic->ic_flags_ext |= IEEE80211_FEXT_VHT; ic->ic_vht_cap.vht_cap_info =