WPS: Allow Device Password Id changes between PIN methods

Commit b4a17a6ea7 added support for the
WPS Registrar to change the Device Password based on WSC specification
design. However, this added validation for Registrar behavior which
resulted in preventing a common P2P use case from working. Relax the
validation rules for builds with P2P enabled to allow the Enrollee (P2P
client) accepting M1/M2 changes in Device Password Id between Default
and Registrar-specified PIN.

Signed-hostap: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2013-05-28 00:35:47 +03:00
parent 1ba51ec02b
commit 9b1693a162

View file

@ -842,6 +842,24 @@ static int wps_process_dev_pw_id(struct wps_data *wps, const u8 *dev_pw_id)
return 0; return 0;
} }
#ifdef CONFIG_P2P
if ((id == DEV_PW_DEFAULT &&
wps->dev_pw_id == DEV_PW_REGISTRAR_SPECIFIED) ||
(id == DEV_PW_REGISTRAR_SPECIFIED &&
wps->dev_pw_id == DEV_PW_DEFAULT)) {
/*
* Common P2P use cases indicate whether the PIN is from the
* client or GO using Device Password Id in M1/M2 in a way that
* does not look fully compliant with WSC specification. Anyway,
* this is deployed and needs to be allowed, so ignore changes
* between Registrar-Specified and Default PIN.
*/
wpa_printf(MSG_DEBUG, "WPS: Allow PIN Device Password ID "
"change");
return 0;
}
#endif /* CONFIG_P2P */
wpa_printf(MSG_DEBUG, "WPS: Registrar trying to change Device Password " wpa_printf(MSG_DEBUG, "WPS: Registrar trying to change Device Password "
"ID from %u to %u", wps->dev_pw_id, id); "ID from %u to %u", wps->dev_pw_id, id);