|
@@ -36,6 +36,7 @@
|
|
|
#define IEEE80211_AUTH_TIMEOUT (HZ / 5)
|
|
|
#define IEEE80211_AUTH_TIMEOUT_LONG (HZ / 2)
|
|
|
#define IEEE80211_AUTH_TIMEOUT_SHORT (HZ / 10)
|
|
|
+#define IEEE80211_AUTH_TIMEOUT_SAE (HZ * 2)
|
|
|
#define IEEE80211_AUTH_MAX_TRIES 3
|
|
|
#define IEEE80211_AUTH_WAIT_ASSOC (HZ * 5)
|
|
|
#define IEEE80211_ASSOC_TIMEOUT (HZ / 5)
|
|
@@ -1787,7 +1788,7 @@ static bool ieee80211_sta_wmm_params(struct ieee80211_local *local,
|
|
|
params[ac].acm = acm;
|
|
|
params[ac].uapsd = uapsd;
|
|
|
|
|
|
- if (params->cw_min == 0 ||
|
|
|
+ if (params[ac].cw_min == 0 ||
|
|
|
params[ac].cw_min > params[ac].cw_max) {
|
|
|
sdata_info(sdata,
|
|
|
"AP has invalid WMM params (CWmin/max=%d/%d for ACI %d), using defaults\n",
|
|
@@ -3814,16 +3815,19 @@ static int ieee80211_auth(struct ieee80211_sub_if_data *sdata)
|
|
|
tx_flags);
|
|
|
|
|
|
if (tx_flags == 0) {
|
|
|
- auth_data->timeout = jiffies + IEEE80211_AUTH_TIMEOUT;
|
|
|
- auth_data->timeout_started = true;
|
|
|
- run_again(sdata, auth_data->timeout);
|
|
|
+ if (auth_data->algorithm == WLAN_AUTH_SAE)
|
|
|
+ auth_data->timeout = jiffies +
|
|
|
+ IEEE80211_AUTH_TIMEOUT_SAE;
|
|
|
+ else
|
|
|
+ auth_data->timeout = jiffies + IEEE80211_AUTH_TIMEOUT;
|
|
|
} else {
|
|
|
auth_data->timeout =
|
|
|
round_jiffies_up(jiffies + IEEE80211_AUTH_TIMEOUT_LONG);
|
|
|
- auth_data->timeout_started = true;
|
|
|
- run_again(sdata, auth_data->timeout);
|
|
|
}
|
|
|
|
|
|
+ auth_data->timeout_started = true;
|
|
|
+ run_again(sdata, auth_data->timeout);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -3894,8 +3898,15 @@ void ieee80211_sta_work(struct ieee80211_sub_if_data *sdata)
|
|
|
ifmgd->status_received = false;
|
|
|
if (ifmgd->auth_data && ieee80211_is_auth(fc)) {
|
|
|
if (status_acked) {
|
|
|
- ifmgd->auth_data->timeout =
|
|
|
- jiffies + IEEE80211_AUTH_TIMEOUT_SHORT;
|
|
|
+ if (ifmgd->auth_data->algorithm ==
|
|
|
+ WLAN_AUTH_SAE)
|
|
|
+ ifmgd->auth_data->timeout =
|
|
|
+ jiffies +
|
|
|
+ IEEE80211_AUTH_TIMEOUT_SAE;
|
|
|
+ else
|
|
|
+ ifmgd->auth_data->timeout =
|
|
|
+ jiffies +
|
|
|
+ IEEE80211_AUTH_TIMEOUT_SHORT;
|
|
|
run_again(sdata, ifmgd->auth_data->timeout);
|
|
|
} else {
|
|
|
ifmgd->auth_data->timeout = jiffies - 1;
|