|
@@ -275,6 +275,7 @@ struct cfg80211_bss *cfg80211_get_bss(struct wiphy *wiphy,
|
|
{
|
|
{
|
|
struct cfg80211_registered_device *dev = wiphy_to_dev(wiphy);
|
|
struct cfg80211_registered_device *dev = wiphy_to_dev(wiphy);
|
|
struct cfg80211_internal_bss *bss, *res = NULL;
|
|
struct cfg80211_internal_bss *bss, *res = NULL;
|
|
|
|
+ unsigned long now = jiffies;
|
|
|
|
|
|
spin_lock_bh(&dev->bss_lock);
|
|
spin_lock_bh(&dev->bss_lock);
|
|
|
|
|
|
@@ -283,6 +284,10 @@ struct cfg80211_bss *cfg80211_get_bss(struct wiphy *wiphy,
|
|
continue;
|
|
continue;
|
|
if (channel && bss->pub.channel != channel)
|
|
if (channel && bss->pub.channel != channel)
|
|
continue;
|
|
continue;
|
|
|
|
+ /* Don't get expired BSS structs */
|
|
|
|
+ if (time_after(now, bss->ts + IEEE80211_SCAN_RESULT_EXPIRE) &&
|
|
|
|
+ !atomic_read(&bss->hold))
|
|
|
|
+ continue;
|
|
if (is_bss(&bss->pub, bssid, ssid, ssid_len)) {
|
|
if (is_bss(&bss->pub, bssid, ssid, ssid_len)) {
|
|
res = bss;
|
|
res = bss;
|
|
kref_get(&res->ref);
|
|
kref_get(&res->ref);
|