From f7648c8679b35916e0d94a2d36d787de90147838 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Sun, 20 Mar 2016 11:46:04 +0200 Subject: [PATCH] P2P: Advertise IP Address Allocation only if it is enabled on GO This group capability bit was previously added unconditionally which could result in the P2P Client assuming the functionality is available even though the GO would always reject the request (not reply to it with an assigned IP address) during the 4-way handshake. Fix this by advertising the capability only if the GO configuration allow IP address assignment to be completed. Signed-off-by: Jouni Malinen --- src/p2p/p2p.h | 6 ++++++ src/p2p/p2p_group.c | 3 ++- wpa_supplicant/p2p_supplicant.c | 2 ++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/p2p/p2p.h b/src/p2p/p2p.h index fc545b417..0feafd312 100644 --- a/src/p2p/p2p.h +++ b/src/p2p/p2p.h @@ -1715,6 +1715,12 @@ struct p2p_group_config { */ int freq; + /** + * ip_addr_alloc - Whether IP address allocation within 4-way handshake + * is supported + */ + int ip_addr_alloc; + /** * cb_ctx - Context to use with callback functions */ diff --git a/src/p2p/p2p_group.c b/src/p2p/p2p_group.c index 2cf245077..eac73ef0c 100644 --- a/src/p2p/p2p_group.c +++ b/src/p2p/p2p_group.c @@ -155,7 +155,8 @@ static void p2p_group_add_common_ies(struct p2p_group *group, group_capab |= P2P_GROUP_CAPAB_CROSS_CONN; if (group->num_members >= group->cfg->max_clients) group_capab |= P2P_GROUP_CAPAB_GROUP_LIMIT; - group_capab |= P2P_GROUP_CAPAB_IP_ADDR_ALLOCATION; + if (group->cfg->ip_addr_alloc) + group_capab |= P2P_GROUP_CAPAB_IP_ADDR_ALLOCATION; p2p_buf_add_capability(ie, dev_capab, group_capab); } diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c index 5ff758f68..67ca67cb5 100644 --- a/wpa_supplicant/p2p_supplicant.c +++ b/wpa_supplicant/p2p_supplicant.c @@ -6328,6 +6328,8 @@ struct p2p_group * wpas_p2p_group_init(struct wpa_supplicant *wpa_s, cfg->cb_ctx = wpa_s; cfg->ie_update = wpas_p2p_ie_update; cfg->idle_update = wpas_p2p_idle_update; + cfg->ip_addr_alloc = WPA_GET_BE32(wpa_s->p2pdev->conf->ip_addr_start) + != 0; group = p2p_group_init(wpa_s->global->p2p, cfg); if (group == NULL)