SAE: Send external auth failure status to driver
wpa_supplicant prepares auth commit request as part of the external authentication (first SAE authentication frame), but it fails to get prepared when wpa_supplicant is started without mentioning the SAE password in configuration. Send this failure status to the driver to make it aware that the external authentication has been aborted by wpa_supplicant. Signed-off-by: Srinivas Dasari <dasaris@codeaurora.org>
This commit is contained in:
parent
2552a3735a
commit
fb6ebd1ced
1 changed files with 21 additions and 16 deletions
|
@ -932,21 +932,23 @@ static int sme_external_auth_build_buf(struct wpabuf *buf,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void sme_external_auth_send_sae_commit(struct wpa_supplicant *wpa_s,
|
static int sme_external_auth_send_sae_commit(struct wpa_supplicant *wpa_s,
|
||||||
const u8 *bssid,
|
const u8 *bssid,
|
||||||
struct wpa_ssid *ssid)
|
struct wpa_ssid *ssid)
|
||||||
{
|
{
|
||||||
struct wpabuf *resp, *buf;
|
struct wpabuf *resp, *buf;
|
||||||
|
|
||||||
resp = sme_auth_build_sae_commit(wpa_s, ssid, bssid, 1, 0);
|
resp = sme_auth_build_sae_commit(wpa_s, ssid, bssid, 1, 0);
|
||||||
if (!resp)
|
if (!resp) {
|
||||||
return;
|
wpa_printf(MSG_DEBUG, "SAE: Failed to build SAE commit");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
wpa_s->sme.sae.state = SAE_COMMITTED;
|
wpa_s->sme.sae.state = SAE_COMMITTED;
|
||||||
buf = wpabuf_alloc(4 + SAE_COMMIT_MAX_LEN + wpabuf_len(resp));
|
buf = wpabuf_alloc(4 + SAE_COMMIT_MAX_LEN + wpabuf_len(resp));
|
||||||
if (!buf) {
|
if (!buf) {
|
||||||
wpabuf_free(resp);
|
wpabuf_free(resp);
|
||||||
return;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
wpa_s->sme.seq_num++;
|
wpa_s->sme.seq_num++;
|
||||||
|
@ -955,6 +957,8 @@ static void sme_external_auth_send_sae_commit(struct wpa_supplicant *wpa_s,
|
||||||
wpa_drv_send_mlme(wpa_s, wpabuf_head(buf), wpabuf_len(buf), 1, 0);
|
wpa_drv_send_mlme(wpa_s, wpabuf_head(buf), wpabuf_len(buf), 1, 0);
|
||||||
wpabuf_free(resp);
|
wpabuf_free(resp);
|
||||||
wpabuf_free(buf);
|
wpabuf_free(buf);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -972,8 +976,8 @@ static void sme_send_external_auth_status(struct wpa_supplicant *wpa_s,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void sme_handle_external_auth_start(struct wpa_supplicant *wpa_s,
|
static int sme_handle_external_auth_start(struct wpa_supplicant *wpa_s,
|
||||||
union wpa_event_data *data)
|
union wpa_event_data *data)
|
||||||
{
|
{
|
||||||
struct wpa_ssid *ssid;
|
struct wpa_ssid *ssid;
|
||||||
size_t ssid_str_len = data->external_auth.ssid_len;
|
size_t ssid_str_len = data->external_auth.ssid_len;
|
||||||
|
@ -987,13 +991,12 @@ static void sme_handle_external_auth_start(struct wpa_supplicant *wpa_s,
|
||||||
(ssid->key_mgmt & (WPA_KEY_MGMT_SAE | WPA_KEY_MGMT_FT_SAE)))
|
(ssid->key_mgmt & (WPA_KEY_MGMT_SAE | WPA_KEY_MGMT_FT_SAE)))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (ssid)
|
if (!ssid ||
|
||||||
sme_external_auth_send_sae_commit(wpa_s,
|
sme_external_auth_send_sae_commit(wpa_s, data->external_auth.bssid,
|
||||||
data->external_auth.bssid,
|
ssid) < 0)
|
||||||
ssid);
|
return -1;
|
||||||
else
|
|
||||||
sme_send_external_auth_status(wpa_s,
|
return 0;
|
||||||
WLAN_STATUS_UNSPECIFIED_FAILURE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1043,7 +1046,9 @@ void sme_external_auth_trigger(struct wpa_supplicant *wpa_s,
|
||||||
wpa_s->sme.sae.state = SAE_NOTHING;
|
wpa_s->sme.sae.state = SAE_NOTHING;
|
||||||
wpa_s->sme.sae.send_confirm = 0;
|
wpa_s->sme.sae.send_confirm = 0;
|
||||||
wpa_s->sme.sae_group_index = 0;
|
wpa_s->sme.sae_group_index = 0;
|
||||||
sme_handle_external_auth_start(wpa_s, data);
|
if (sme_handle_external_auth_start(wpa_s, data) < 0)
|
||||||
|
sme_send_external_auth_status(wpa_s,
|
||||||
|
WLAN_STATUS_UNSPECIFIED_FAILURE);
|
||||||
} else if (data->external_auth.action == EXT_AUTH_ABORT) {
|
} else if (data->external_auth.action == EXT_AUTH_ABORT) {
|
||||||
/* Report failure to driver for the wrong trigger */
|
/* Report failure to driver for the wrong trigger */
|
||||||
sme_send_external_auth_status(wpa_s,
|
sme_send_external_auth_status(wpa_s,
|
||||||
|
|
Loading…
Reference in a new issue