#endif /* CONFIG_IEEE80211BE */
if (sta->sae->tmp) {
- rx_id = sta->sae->tmp->pw_id;
+ rx_id = sta->sae->tmp->parsed_pw_id ?
+ sta->sae->tmp->parsed_pw_id : sta->sae->tmp->pw_id;
use_pt = sta->sae->h2e;
#ifdef CONFIG_SAE_PK
os_memcpy(sta->sae->tmp->own_addr, own_addr, ETH_ALEN);
u16 status;
data = auth_build_sae_commit(hapd, sta, update, status_code);
- if (!data && sta->sae->tmp && sta->sae->tmp->pw_id)
+ if (!data && sta->sae->tmp &&
+ (sta->sae->tmp->pw_id || sta->sae->tmp->parsed_pw_id))
return WLAN_STATUS_UNKNOWN_PASSWORD_IDENTIFIER;
if (data == NULL)
return WLAN_STATUS_UNSPECIFIED_FAILURE;
switch (sta->sae->state) {
case SAE_NOTHING:
if (auth_transaction == 1) {
- if (sta->sae->tmp) {
+ struct sae_temporary_data *tmp = sta->sae->tmp;
+
+ if (tmp) {
sta->sae->h2e =
(status_code ==
WLAN_STATUS_SAE_HASH_TO_ELEMENT ||
}
ret = auth_sae_send_commit(hapd, sta,
!allow_reuse, status_code);
+ if (ret == WLAN_STATUS_UNKNOWN_PASSWORD_IDENTIFIER)
+ wpa_msg(hapd->msg_ctx, MSG_INFO,
+ WPA_EVENT_SAE_UNKNOWN_PASSWORD_IDENTIFIER
+ MACSTR, MAC2STR(sta->addr));
if (ret)
return ret;
+
+ if (tmp && tmp->parsed_pw_id && !tmp->pw_id) {
+ tmp->pw_id = tmp->parsed_pw_id;
+ tmp->parsed_pw_id = NULL;
+ wpa_printf(MSG_DEBUG,
+ "SAE: Known Password Identifier bound to this STA: '%s'",
+ tmp->pw_id);
+ }
+
sae_set_state(sta, SAE_COMMITTED, "Sent Commit");
if (sae_process_commit(sta->sae) < 0)
data ? wpabuf_head(data) : (u8 *) "",
data ? wpabuf_len(data) : 0, "auth-sae");
sae_sme_send_external_auth_status(hapd, sta, resp);
- if (sta->sae && sta->sae->tmp && sta->sae->tmp->pw_id &&
- resp == WLAN_STATUS_UNKNOWN_PASSWORD_IDENTIFIER &&
- auth_transaction == 1) {
- wpa_printf(MSG_DEBUG,
- "SAE: Clear stored password identifier since this SAE commit was not accepted");
- os_free(sta->sae->tmp->pw_id);
- sta->sae->tmp->pw_id = NULL;
- }
}
remove_sta:
wpabuf_free(tmp->own_rejected_groups);
wpabuf_free(tmp->peer_rejected_groups);
os_free(tmp->pw_id);
+ os_free(tmp->parsed_pw_id);
bin_clear_free(tmp, sizeof(*tmp));
sae->tmp = NULL;
}
sae->tmp->pw_id);
return WLAN_STATUS_UNKNOWN_PASSWORD_IDENTIFIER;
}
- os_free(sae->tmp->pw_id);
- sae->tmp->pw_id = NULL;
+ os_free(sae->tmp->parsed_pw_id);
+ sae->tmp->parsed_pw_id = NULL;
return WLAN_STATUS_SUCCESS; /* No Password Identifier */
}
return WLAN_STATUS_UNKNOWN_PASSWORD_IDENTIFIER;
}
- os_free(sae->tmp->pw_id);
- sae->tmp->pw_id = os_malloc(len + 1);
- if (!sae->tmp->pw_id)
+ os_free(sae->tmp->parsed_pw_id);
+ sae->tmp->parsed_pw_id = os_malloc(len + 1);
+ if (!sae->tmp->parsed_pw_id)
return WLAN_STATUS_UNSPECIFIED_FAILURE;
- os_memcpy(sae->tmp->pw_id, epos, len);
- sae->tmp->pw_id[len] = '\0';
+ os_memcpy(sae->tmp->parsed_pw_id, epos, len);
+ sae->tmp->parsed_pw_id[len] = '\0';
wpa_hexdump_ascii(MSG_DEBUG, "SAE: Received Password Identifier",
- sae->tmp->pw_id, len);
+ sae->tmp->parsed_pw_id, len);
*pos = epos + len;
return WLAN_STATUS_SUCCESS;
}