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 <j@w1.fi>
This commit is contained in:
Jouni Malinen 2016-03-20 11:46:04 +02:00
parent 7f46ad9ee5
commit f7648c8679
3 changed files with 10 additions and 1 deletions

View file

@ -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
*/

View file

@ -155,6 +155,7 @@ 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;
if (group->cfg->ip_addr_alloc)
group_capab |= P2P_GROUP_CAPAB_IP_ADDR_ALLOCATION;
p2p_buf_add_capability(ie, dev_capab, group_capab);
}

View file

@ -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)