diff options
Diffstat (limited to 'net/mac80211/ibss.c')
-rw-r--r-- | net/mac80211/ibss.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c index 71c55cc0f7b6..055fa9436e95 100644 --- a/net/mac80211/ibss.c +++ b/net/mac80211/ibss.c | |||
@@ -242,6 +242,8 @@ static void ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata, | |||
242 | u32 basic_rates; | 242 | u32 basic_rates; |
243 | int i, j; | 243 | int i, j; |
244 | u16 beacon_int = cbss->beacon_interval; | 244 | u16 beacon_int = cbss->beacon_interval; |
245 | const struct cfg80211_bss_ies *ies; | ||
246 | u64 tsf; | ||
245 | 247 | ||
246 | lockdep_assert_held(&sdata->u.ibss.mtx); | 248 | lockdep_assert_held(&sdata->u.ibss.mtx); |
247 | 249 | ||
@@ -265,13 +267,17 @@ static void ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata, | |||
265 | } | 267 | } |
266 | } | 268 | } |
267 | 269 | ||
270 | rcu_read_lock(); | ||
271 | ies = rcu_dereference(cbss->ies); | ||
272 | tsf = ies->tsf; | ||
273 | rcu_read_unlock(); | ||
274 | |||
268 | __ieee80211_sta_join_ibss(sdata, cbss->bssid, | 275 | __ieee80211_sta_join_ibss(sdata, cbss->bssid, |
269 | beacon_int, | 276 | beacon_int, |
270 | cbss->channel, | 277 | cbss->channel, |
271 | basic_rates, | 278 | basic_rates, |
272 | cbss->capability, | 279 | cbss->capability, |
273 | cbss->tsf, | 280 | tsf, false); |
274 | false); | ||
275 | } | 281 | } |
276 | 282 | ||
277 | static struct sta_info *ieee80211_ibss_finish_sta(struct sta_info *sta, | 283 | static struct sta_info *ieee80211_ibss_finish_sta(struct sta_info *sta, |
@@ -535,8 +541,8 @@ static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata, | |||
535 | 541 | ||
536 | cbss = container_of((void *)bss, struct cfg80211_bss, priv); | 542 | cbss = container_of((void *)bss, struct cfg80211_bss, priv); |
537 | 543 | ||
538 | /* was just updated in ieee80211_bss_info_update */ | 544 | /* same for beacon and probe response */ |
539 | beacon_timestamp = cbss->tsf; | 545 | beacon_timestamp = le64_to_cpu(mgmt->u.beacon.timestamp); |
540 | 546 | ||
541 | /* check if we need to merge IBSS */ | 547 | /* check if we need to merge IBSS */ |
542 | 548 | ||