diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-07-29 11:23:49 +0200 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-08-04 16:43:24 -0400 |
commit | df7fc0f9735085bb617fff774bfd71465edb448c (patch) | |
tree | 2b47f3823a8aee6c13e86aa3dedc06bda9ebae38 /net/wireless/core.h | |
parent | 97af743207466ff8b477e14bfb7af0ba2c93375b (diff) | |
download | kernel-mfld-blackbay-df7fc0f9735085bb617fff774bfd71465edb448c.tar.gz kernel-mfld-blackbay-df7fc0f9735085bb617fff774bfd71465edb448c.tar.bz2 kernel-mfld-blackbay-df7fc0f9735085bb617fff774bfd71465edb448c.zip |
cfg80211: keep track of current_bss for userspace SME
When a userspace SME is active, we're currently not
keeping track of the BSS properly for reporting the
current link and for internal use. Additionally, it
looks like there is a possible BSS leak in that the
BSS never gets removed from auth_bsses[]. To fix it,
pass the BSS struct to __cfg80211_connect_result in
this case.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless/core.h')
-rw-r--r-- | net/wireless/core.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/net/wireless/core.h b/net/wireless/core.h index 6d903c1d721..325c17e6198 100644 --- a/net/wireless/core.h +++ b/net/wireless/core.h @@ -127,6 +127,11 @@ static inline struct cfg80211_internal_bss *bss_from_pub(struct cfg80211_bss *pu return container_of(pub, struct cfg80211_internal_bss, pub); } +static inline void cfg80211_ref_bss(struct cfg80211_internal_bss *bss) +{ + kref_get(&bss->ref); +} + static inline void cfg80211_hold_bss(struct cfg80211_internal_bss *bss) { atomic_inc(&bss->hold); @@ -323,7 +328,8 @@ void cfg80211_mlme_down(struct cfg80211_registered_device *rdev, void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid, const u8 *req_ie, size_t req_ie_len, const u8 *resp_ie, size_t resp_ie_len, - u16 status, bool wextev); + u16 status, bool wextev, + struct cfg80211_bss *bss); /* SME */ int __cfg80211_connect(struct cfg80211_registered_device *rdev, |