wpa_supplicant: Search BSS list from back to front
authorNathan Williams <njw@chromium.org>
Sun, 20 Mar 2011 10:06:36 +0000 (12:06 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 20 Mar 2011 10:06:36 +0000 (12:06 +0200)
This fixes an issue seen in our wifi testbed, where we frequently
switch the SSID of the AP. wpa_supplicant's BSS list will have, for
example both <bssid, "Check11b"> (from the previous test) and <bssid,
"Check11g"> (from the current test) - note that the bssid is the same for
both. The (old) D-Bus API for fetching scan responses from wpa_supplicant
is fetch-by-bssid, so the caller (flimflam) incorrectly believes we're
associated with <bssid, "Check11b">.

wpa_supplicant/bss.c

index 5809284..145b716 100644 (file)
@@ -492,7 +492,7 @@ struct wpa_bss * wpa_bss_get_bssid(struct wpa_supplicant *wpa_s,
                                   const u8 *bssid)
 {
        struct wpa_bss *bss;
-       dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) {
+       dl_list_for_each_reverse(bss, &wpa_s->bss, struct wpa_bss, list) {
                if (os_memcmp(bss->bssid, bssid, ETH_ALEN) == 0)
                        return bss;
        }