GAS: Do not reply to P2P SD query from generic GAS/ANQP server

This avoids an issue where a wpa_supplicant build with CONFIG_P2P=y and
CONFIG_HS20=y ended up processing a P2P SD query twice when operating as
a GO and sending out two replies. Only the P2P SD implementation should
reply to P2P SD query in such a case.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
Jouni Malinen 2014-10-21 12:16:47 +03:00 committed by Jouni Malinen
parent 97752f7930
commit a6b1215769

View file

@ -748,6 +748,7 @@ struct anqp_query_info {
size_t home_realm_query_len; size_t home_realm_query_len;
const u8 *icon_name; const u8 *icon_name;
size_t icon_name_len; size_t icon_name_len;
int p2p_sd;
}; };
@ -919,6 +920,21 @@ static void rx_anqp_vendor_specific(struct hostapd_data *hapd,
return; return;
} }
#ifdef CONFIG_P2P
if (*pos == P2P_OUI_TYPE) {
/*
* This is for P2P SD and will be taken care of by the P2P
* implementation. This query needs to be ignored in the generic
* GAS server to avoid duplicated response.
*/
wpa_printf(MSG_DEBUG,
"ANQP: Ignore WFA vendor type %u (P2P SD) in generic GAS server",
*pos);
qi->p2p_sd = 1;
return;
}
#endif /* CONFIG_P2P */
if (*pos != HS20_ANQP_OUI_TYPE) { if (*pos != HS20_ANQP_OUI_TYPE) {
wpa_printf(MSG_DEBUG, "ANQP: Unsupported WFA vendor type %u", wpa_printf(MSG_DEBUG, "ANQP: Unsupported WFA vendor type %u",
*pos); *pos);
@ -969,6 +985,14 @@ static void gas_serv_req_local_processing(struct hostapd_data *hapd,
buf); buf);
if (!buf) if (!buf)
return; return;
#ifdef CONFIG_P2P
if (wpabuf_len(buf) == 0 && qi->p2p_sd) {
wpa_printf(MSG_DEBUG,
"ANQP: Do not send response to P2P SD from generic GAS service (P2P SD implementation will process this)");
wpabuf_free(buf);
return;
}
#endif /* CONFIG_P2P */
if (wpabuf_len(buf) > hapd->gas_frag_limit || if (wpabuf_len(buf) > hapd->gas_frag_limit ||
hapd->conf->gas_comeback_delay) { hapd->conf->gas_comeback_delay) {