Commit f7c65594 authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville

mac80211: fix ieee80211_find_sta[_by_hw]

Both of these functions can currently return
a station pointer that, to the driver, is
invalid (in IBSS mode only) because adding
the station failed. Check for that, and also
make ieee80211_find_sta() properly use the
per interface station search.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent c7ab1a4d
...@@ -855,8 +855,12 @@ struct ieee80211_sta *ieee80211_find_sta_by_hw(struct ieee80211_hw *hw, ...@@ -855,8 +855,12 @@ struct ieee80211_sta *ieee80211_find_sta_by_hw(struct ieee80211_hw *hw,
struct sta_info *sta, *nxt; struct sta_info *sta, *nxt;
/* Just return a random station ... first in list ... */ /* Just return a random station ... first in list ... */
for_each_sta_info(hw_to_local(hw), addr, sta, nxt) for_each_sta_info(hw_to_local(hw), addr, sta, nxt) {
if (!sta->uploaded)
return NULL;
return &sta->sta; return &sta->sta;
}
return NULL; return NULL;
} }
EXPORT_SYMBOL_GPL(ieee80211_find_sta_by_hw); EXPORT_SYMBOL_GPL(ieee80211_find_sta_by_hw);
...@@ -864,14 +868,19 @@ EXPORT_SYMBOL_GPL(ieee80211_find_sta_by_hw); ...@@ -864,14 +868,19 @@ EXPORT_SYMBOL_GPL(ieee80211_find_sta_by_hw);
struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_vif *vif, struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_vif *vif,
const u8 *addr) const u8 *addr)
{ {
struct ieee80211_sub_if_data *sdata; struct sta_info *sta;
if (!vif) if (!vif)
return NULL; return NULL;
sdata = vif_to_sdata(vif); sta = sta_info_get_bss(vif_to_sdata(vif), addr);
if (!sta)
return NULL;
if (!sta->uploaded)
return NULL;
return ieee80211_find_sta_by_hw(&sdata->local->hw, addr); return &sta->sta;
} }
EXPORT_SYMBOL(ieee80211_find_sta); EXPORT_SYMBOL(ieee80211_find_sta);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment