diff options
author | Arik Nemtsov <arik@wizery.com> | 2014-06-11 17:18:19 +0300 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2014-06-23 14:24:55 +0200 |
commit | 68885a54cd04742a2e6e10e9d3ff5976d046832e (patch) | |
tree | 76bdd966f2c88d2047d5f73f314282da82a17bf9 /net/mac80211 | |
parent | 9deba04d0f0b43ca60a867f006e06625ad85f8c2 (diff) | |
download | linux-stable-68885a54cd04742a2e6e10e9d3ff5976d046832e.tar.gz linux-stable-68885a54cd04742a2e6e10e9d3ff5976d046832e.tar.bz2 linux-stable-68885a54cd04742a2e6e10e9d3ff5976d046832e.zip |
mac80211: set auth flags after other station info
For TDLS, the AUTHORIZED flag arrives with all other important station
info (supported rates, HT/VHT caps, ...). Make sure to set the station
state in the low-level driver after transferring this information to
the mac80211 STA entry.
This aligns the STA information during sta_state callbacks with the
non-TDLS case.
Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com>
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211')
-rw-r--r-- | net/mac80211/cfg.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index a0d7a0362f1f..73c9e1003e25 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c @@ -997,9 +997,12 @@ static int sta_apply_parameters(struct ieee80211_local *local, } } - ret = sta_apply_auth_flags(local, sta, mask, set); - if (ret) - return ret; + /* auth flags will be set later for TDLS stations */ + if (!test_sta_flag(sta, WLAN_STA_TDLS_PEER)) { + ret = sta_apply_auth_flags(local, sta, mask, set); + if (ret) + return ret; + } if (mask & BIT(NL80211_STA_FLAG_SHORT_PREAMBLE)) { if (set & BIT(NL80211_STA_FLAG_SHORT_PREAMBLE)) @@ -1136,6 +1139,13 @@ static int sta_apply_parameters(struct ieee80211_local *local, #endif } + /* set the STA state after all sta info from usermode has been set */ + if (test_sta_flag(sta, WLAN_STA_TDLS_PEER)) { + ret = sta_apply_auth_flags(local, sta, mask, set); + if (ret) + return ret; + } + return 0; } |