mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
fix(wpa_supplicant): Ensure dpp auth structure is deinited in dpp task context
- Ensure that the dpp auth data gets deinited only in DPP task context to ensure that there are no concurrency issues in usage of DPP auth data.
This commit is contained in:
parent
93f7ae7f7f
commit
1830bc4d29
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2020-2023 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@ -63,20 +63,31 @@ static int esp_dpp_post_evt(uint32_t evt_id, uint32_t data)
|
||||
if (evt_id != SIG_DPP_DEL_TASK) {
|
||||
DPP_API_UNLOCK();
|
||||
}
|
||||
wpa_printf(MSG_DEBUG,"DPP: Sent event %d to DPP task", evt_id);
|
||||
|
||||
return ret;
|
||||
end:
|
||||
if (evt) {
|
||||
os_free(evt);
|
||||
}
|
||||
wpa_printf(MSG_ERROR,"DPP: Failed to send event %d to DPP task", evt_id);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint8_t esp_dpp_deinit_auth(void)
|
||||
{
|
||||
esp_err_t ret = esp_dpp_post_evt(SIG_DPP_DEINIT_AUTH, 0);
|
||||
if (ESP_OK != ret) {
|
||||
wpa_printf(MSG_ERROR, "Failed to post DPP auth deinit to DPP Task(status=%d)", ret);
|
||||
return ret;
|
||||
}
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
static void esp_dpp_call_cb(esp_supp_dpp_event_t evt, void *data)
|
||||
{
|
||||
if ( evt == ESP_SUPP_DPP_FAIL && s_dpp_ctx.dpp_auth) {
|
||||
dpp_auth_deinit(s_dpp_ctx.dpp_auth);
|
||||
s_dpp_ctx.dpp_auth = NULL;
|
||||
esp_dpp_deinit_auth();
|
||||
}
|
||||
s_dpp_ctx.dpp_event_cb(evt, data);
|
||||
}
|
||||
@ -88,10 +99,6 @@ static void esp_dpp_auth_conf_wait_timeout(void *eloop_ctx, void *timeout_ctx)
|
||||
|
||||
wpa_printf(MSG_DEBUG,
|
||||
"DPP: Terminate authentication exchange due to Auth Confirm timeout");
|
||||
if (s_dpp_ctx.dpp_auth) {
|
||||
dpp_auth_deinit(s_dpp_ctx.dpp_auth);
|
||||
s_dpp_ctx.dpp_auth = NULL;
|
||||
}
|
||||
esp_dpp_call_cb(ESP_SUPP_DPP_FAIL, (void *)ESP_ERR_DPP_AUTH_TIMEOUT);
|
||||
}
|
||||
|
||||
@ -438,6 +445,15 @@ static void esp_dpp_task(void *pvParameters )
|
||||
}
|
||||
break;
|
||||
|
||||
case SIG_DPP_DEINIT_AUTH: {
|
||||
if (s_dpp_ctx.dpp_auth) {
|
||||
dpp_auth_deinit(s_dpp_ctx.dpp_auth);
|
||||
s_dpp_ctx.dpp_auth = NULL;
|
||||
}
|
||||
wpa_printf(MSG_DEBUG, "DPP auth deinintialized");
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -23,6 +23,7 @@ enum SIG_DPP {
|
||||
SIG_DPP_RX_ACTION,
|
||||
SIG_DPP_LISTEN_NEXT_CHANNEL,
|
||||
SIG_DPP_DEL_TASK,
|
||||
SIG_DPP_DEINIT_AUTH,
|
||||
SIG_DPP_MAX,
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user