From f8467ce3721b7154974a1f8a6e0dff54d4493f4d Mon Sep 17 00:00:00 2001 From: Srinivas Dasari Date: Wed, 12 Aug 2015 15:54:54 +0530 Subject: nl80211: Use beacon TSF if it is newer than Probe Response TSF cfg80211 sends TSF information with the attribute NL80211_BSS_BEACON_TSF if the scan results include information from Beacon frame. Probe Response frame information is included in NL80211_BSS_TSF. If the device receives only Beacon frames, NL80211_BSS_TSF might not carry updated TSF, which results an older TSF being used in wpa_supplicant. Fetch both possible TSF values (if available) and choose the latest TSF for the BSS entry. Signed-off-by: Jouni Malinen Signed-off-by: Dmitry Shmidt Bug: 22412559 Change-Id: I21a28265d5a9a2efec7a0deb51b353df368c4706 --- src/drivers/driver_nl80211_scan.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src') diff --git a/src/drivers/driver_nl80211_scan.c b/src/drivers/driver_nl80211_scan.c index 9cd3162f..f3d45e58 100644 --- a/src/drivers/driver_nl80211_scan.c +++ b/src/drivers/driver_nl80211_scan.c @@ -583,6 +583,11 @@ int bss_info_handler(struct nl_msg *msg, void *arg) r->flags |= WPA_SCAN_LEVEL_INVALID | WPA_SCAN_QUAL_INVALID; if (bss[NL80211_BSS_TSF]) r->tsf = nla_get_u64(bss[NL80211_BSS_TSF]); + if (bss[NL80211_BSS_BEACON_TSF]) { + u64 tsf = nla_get_u64(bss[NL80211_BSS_BEACON_TSF]); + if (tsf > r->tsf) + r->tsf = tsf; + } if (bss[NL80211_BSS_SEEN_MS_AGO]) r->age = nla_get_u32(bss[NL80211_BSS_SEEN_MS_AGO]); r->ie_len = ie_len; -- cgit v1.2.3