Use the latest updated BSS entry for sending ANQP requests

Try to find the BSS entry that contains the most likely current
information for the target BSS. This is mainly needed to avoid some
unusual behavior with APs changing their Beacon frame information in a
manner that shows up in automated testing, but this might help with some
more dynamic real world uses as well, so better do the BSS entry search
for the newest entry.

Signed-off-by: Jouni Malinen <quic_jouni@quicinc.com>
This commit is contained in:
Jouni Malinen 2024-03-27 22:37:18 +02:00 committed by Jouni Malinen
parent 0e4bff095b
commit 94506e8ed8

View file

@ -2812,7 +2812,7 @@ int anqp_send_req(struct wpa_supplicant *wpa_s, const u8 *dst, int freq,
struct wpa_bss *bss;
int res;
bss = wpa_bss_get_bssid(wpa_s, dst);
bss = wpa_bss_get_bssid_latest(wpa_s, dst);
if (!bss && !freq) {
wpa_printf(MSG_WARNING,
"ANQP: Cannot send query without BSS freq info");
@ -3167,7 +3167,7 @@ void anqp_resp_cb(void *ctx, const u8 *dst, u8 dialog_token,
}
}
if (bss == NULL)
bss = wpa_bss_get_bssid(wpa_s, dst);
bss = wpa_bss_get_bssid_latest(wpa_s, dst);
pos = wpabuf_head(resp);
end = pos + wpabuf_len(resp);
@ -3282,7 +3282,7 @@ int gas_send_request(struct wpa_supplicant *wpa_s, const u8 *dst,
u8 query_resp_len_limit = 0;
freq = wpa_s->assoc_freq;
bss = wpa_bss_get_bssid(wpa_s, dst);
bss = wpa_bss_get_bssid_latest(wpa_s, dst);
if (bss)
freq = bss->freq;
if (freq <= 0)