mirror of https://gitee.com/openkylin/linux.git
iwlwifi: mvm: refuse connection to APs with BI < 16
Due to a firmware bug, it crashes when the beacon interval is smaller than 16. Avoid this by refusing the station state change creating the AP station, causing mac80211 to abandon the attempt to connect to the AP, and eventually wpa_s to blacklist it. Cc: stable@vger.kernel.org Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
113a04470d
commit
48bc130721
|
@ -1011,6 +1011,21 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
|
||||||
mutex_lock(&mvm->mutex);
|
mutex_lock(&mvm->mutex);
|
||||||
if (old_state == IEEE80211_STA_NOTEXIST &&
|
if (old_state == IEEE80211_STA_NOTEXIST &&
|
||||||
new_state == IEEE80211_STA_NONE) {
|
new_state == IEEE80211_STA_NONE) {
|
||||||
|
/*
|
||||||
|
* Firmware bug - it'll crash if the beacon interval is less
|
||||||
|
* than 16. We can't avoid connecting at all, so refuse the
|
||||||
|
* station state change, this will cause mac80211 to abandon
|
||||||
|
* attempts to connect to this AP, and eventually wpa_s will
|
||||||
|
* blacklist the AP...
|
||||||
|
*/
|
||||||
|
if (vif->type == NL80211_IFTYPE_STATION &&
|
||||||
|
vif->bss_conf.beacon_int < 16) {
|
||||||
|
IWL_ERR(mvm,
|
||||||
|
"AP %pM beacon interval is %d, refusing due to firmware bug!\n",
|
||||||
|
sta->addr, vif->bss_conf.beacon_int);
|
||||||
|
ret = -EINVAL;
|
||||||
|
goto out_unlock;
|
||||||
|
}
|
||||||
ret = iwl_mvm_add_sta(mvm, vif, sta);
|
ret = iwl_mvm_add_sta(mvm, vif, sta);
|
||||||
} else if (old_state == IEEE80211_STA_NONE &&
|
} else if (old_state == IEEE80211_STA_NONE &&
|
||||||
new_state == IEEE80211_STA_AUTH) {
|
new_state == IEEE80211_STA_AUTH) {
|
||||||
|
@ -1043,6 +1058,7 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
|
||||||
} else {
|
} else {
|
||||||
ret = -EIO;
|
ret = -EIO;
|
||||||
}
|
}
|
||||||
|
out_unlock:
|
||||||
mutex_unlock(&mvm->mutex);
|
mutex_unlock(&mvm->mutex);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in New Issue