SAE: Allow commit fields to be overridden for testing purposes (STA)

The new "SET sae_commit_override <hexdump>" control interface command
can be used to force wpa_supplicant to override SAE commit message
fields for testing purposes. This is included only in
CONFIG_TESTING_OPTIONS=y builds.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
Jouni Malinen 2017-09-02 02:12:44 +03:00 committed by Jouni Malinen
parent cd06e2663b
commit a0f19e9c74
3 changed files with 22 additions and 0 deletions

View file

@ -636,6 +636,12 @@ static int wpa_supplicant_ctrl_iface_set(struct wpa_supplicant *wpa_s,
wpa_s->get_pref_freq_list_override = NULL; wpa_s->get_pref_freq_list_override = NULL;
else else
wpa_s->get_pref_freq_list_override = os_strdup(value); wpa_s->get_pref_freq_list_override = os_strdup(value);
} else if (os_strcasecmp(cmd, "sae_commit_override") == 0) {
wpabuf_free(wpa_s->sae_commit_override);
if (value[0] == '\0')
wpa_s->sae_commit_override = NULL;
else
wpa_s->sae_commit_override = wpabuf_parse_bin(value);
#ifdef CONFIG_DPP #ifdef CONFIG_DPP
} else if (os_strcasecmp(cmd, "dpp_config_obj_override") == 0) { } else if (os_strcasecmp(cmd, "dpp_config_obj_override") == 0) {
os_free(wpa_s->dpp_config_obj_override); os_free(wpa_s->dpp_config_obj_override);
@ -7766,6 +7772,8 @@ static void wpa_supplicant_ctrl_iface_flush(struct wpa_supplicant *wpa_s)
wpa_sm_set_test_assoc_ie(wpa_s->wpa, NULL); wpa_sm_set_test_assoc_ie(wpa_s->wpa, NULL);
os_free(wpa_s->get_pref_freq_list_override); os_free(wpa_s->get_pref_freq_list_override);
wpa_s->get_pref_freq_list_override = NULL; wpa_s->get_pref_freq_list_override = NULL;
wpabuf_free(wpa_s->sae_commit_override);
wpa_s->sae_commit_override = NULL;
#endif /* CONFIG_TESTING_OPTIONS */ #endif /* CONFIG_TESTING_OPTIONS */
wpa_s->disconnected = 0; wpa_s->disconnected = 0;

View file

@ -88,6 +88,19 @@ static struct wpabuf * sme_auth_build_sae_commit(struct wpa_supplicant *wpa_s,
struct wpabuf *buf; struct wpabuf *buf;
size_t len; size_t len;
#ifdef CONFIG_TESTING_OPTIONS
if (wpa_s->sae_commit_override) {
wpa_printf(MSG_DEBUG, "SAE: TESTING - commit override");
buf = wpabuf_alloc(4 + wpabuf_len(wpa_s->sae_commit_override));
if (!buf)
return NULL;
wpabuf_put_le16(buf, 1); /* Transaction seq# */
wpabuf_put_le16(buf, WLAN_STATUS_SUCCESS);
wpabuf_put_buf(buf, wpa_s->sae_commit_override);
return buf;
}
#endif /* CONFIG_TESTING_OPTIONS */
if (ssid->passphrase == NULL) { if (ssid->passphrase == NULL) {
wpa_printf(MSG_DEBUG, "SAE: No password available"); wpa_printf(MSG_DEBUG, "SAE: No password available");
return NULL; return NULL;

View file

@ -1076,6 +1076,7 @@ struct wpa_supplicant {
unsigned int p2p_go_csa_on_inv:1; unsigned int p2p_go_csa_on_inv:1;
unsigned int ignore_auth_resp:1; unsigned int ignore_auth_resp:1;
unsigned int ignore_assoc_disallow:1; unsigned int ignore_assoc_disallow:1;
struct wpabuf *sae_commit_override;
#endif /* CONFIG_TESTING_OPTIONS */ #endif /* CONFIG_TESTING_OPTIONS */
struct wmm_ac_assoc_data *wmm_ac_assoc_info; struct wmm_ac_assoc_data *wmm_ac_assoc_info;