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: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
c7ab1a4dcb
commit
f7c65594f7
|
@ -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);
|
||||||
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;
|
||||||
|
|
||||||
return ieee80211_find_sta_by_hw(&sdata->local->hw, addr);
|
if (!sta->uploaded)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return &sta->sta;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ieee80211_find_sta);
|
EXPORT_SYMBOL(ieee80211_find_sta);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue