mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-31 03:07:21 +02:00
fix(wpa_supplicant): Fix few dpp bugs
1) Fix crash in dpp Listen without bootstrap 2) Fix crash on receiving dpp auth_req from hostapd with dpp akm
This commit is contained in:
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2020-2023 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -379,6 +379,10 @@ static void esp_dpp_task(void *pvParameters )
|
|||||||
static int counter;
|
static int counter;
|
||||||
int channel;
|
int channel;
|
||||||
|
|
||||||
|
if (p->num_chan <= 0) {
|
||||||
|
wpa_printf(MSG_ERROR, "Listen channel not set");
|
||||||
|
break;
|
||||||
|
}
|
||||||
channel = p->chan_list[counter++ % p->num_chan];
|
channel = p->chan_list[counter++ % p->num_chan];
|
||||||
esp_wifi_remain_on_channel(WIFI_IF_STA, WIFI_ROC_REQ, channel,
|
esp_wifi_remain_on_channel(WIFI_IF_STA, WIFI_ROC_REQ, channel,
|
||||||
BOOTSTRAP_ROC_WAIT_TIME, s_action_rx_cb);
|
BOOTSTRAP_ROC_WAIT_TIME, s_action_rx_cb);
|
||||||
|
@ -43,7 +43,7 @@ struct dpp_global {
|
|||||||
static const struct dpp_curve_params dpp_curves[] = {
|
static const struct dpp_curve_params dpp_curves[] = {
|
||||||
/* The mandatory to support and the default NIST P-256 curve needs to
|
/* The mandatory to support and the default NIST P-256 curve needs to
|
||||||
* be the first entry on this list. */
|
* be the first entry on this list. */
|
||||||
{ "sec256r1", 32, 32, 16, 32, "P-256", 19, "ES256" },
|
{ "secp256r1", 32, 32, 16, 32, "P-256", 19, "ES256" },
|
||||||
{ "secp384r1", 48, 48, 24, 48, "P-384", 20, "ES384" },
|
{ "secp384r1", 48, 48, 24, 48, "P-384", 20, "ES384" },
|
||||||
{ "secp521r1", 64, 64, 32, 66, "P-521", 21, "ES512" },
|
{ "secp521r1", 64, 64, 32, 66, "P-521", 21, "ES512" },
|
||||||
{ "brainpoolP256r1", 32, 32, 16, 32, "BP-256", 28, "BS256" },
|
{ "brainpoolP256r1", 32, 32, 16, 32, "BP-256", 28, "BS256" },
|
||||||
@ -4669,7 +4669,8 @@ static struct crypto_key * dpp_parse_jwk(struct json_token *jwk,
|
|||||||
{
|
{
|
||||||
struct json_token *token;
|
struct json_token *token;
|
||||||
const struct dpp_curve_params *curve;
|
const struct dpp_curve_params *curve;
|
||||||
struct wpabuf *x = NULL, *y = NULL, *a = NULL;
|
struct wpabuf *x = NULL, *y = NULL;
|
||||||
|
unsigned char *a = NULL;
|
||||||
struct crypto_ec_group *group;
|
struct crypto_ec_group *group;
|
||||||
struct crypto_key *pkey = NULL;
|
struct crypto_key *pkey = NULL;
|
||||||
size_t len;
|
size_t len;
|
||||||
@ -4731,17 +4732,19 @@ static struct crypto_key * dpp_parse_jwk(struct json_token *jwk,
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = wpabuf_len(x);
|
len = wpabuf_len(x) + wpabuf_len(y);
|
||||||
a = wpabuf_concat(x, y);
|
a = os_zalloc(len);
|
||||||
pkey = crypto_ec_set_pubkey_point(group, wpabuf_head(a),
|
os_memcpy(a, wpabuf_head(x), wpabuf_len(x));
|
||||||
len);
|
os_memcpy(a + wpabuf_len(x), wpabuf_head(y), wpabuf_len(y));
|
||||||
|
pkey = crypto_ec_set_pubkey_point(group, a, len);
|
||||||
|
|
||||||
crypto_ec_deinit((struct crypto_ec *)group);
|
crypto_ec_deinit((struct crypto_ec *)group);
|
||||||
*key_curve = curve;
|
*key_curve = curve;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
wpabuf_free(a);
|
|
||||||
wpabuf_free(x);
|
wpabuf_free(x);
|
||||||
wpabuf_free(y);
|
wpabuf_free(y);
|
||||||
|
os_free(a);
|
||||||
|
|
||||||
return pkey;
|
return pkey;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user