mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2025-02-19 10:33:05 -05:00
DPP: Store global pointers in struct dpp_authentication
Set the global pointer and msg_ctx when allocating struct dpp_authentication instead of needing to pass these to dpp_set_configurator(). Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
parent
bc95d58330
commit
514cc49ba5
@ -543,15 +543,15 @@ int hostapd_dpp_auth_init(struct hostapd_data *hapd, const char *cmd)
|
|||||||
dpp_auth_deinit(hapd->dpp_auth);
|
dpp_auth_deinit(hapd->dpp_auth);
|
||||||
}
|
}
|
||||||
|
|
||||||
hapd->dpp_auth = dpp_auth_init(hapd->msg_ctx, peer_bi, own_bi,
|
hapd->dpp_auth = dpp_auth_init(hapd->iface->interfaces->dpp,
|
||||||
|
hapd->msg_ctx, peer_bi, own_bi,
|
||||||
allowed_roles, neg_freq,
|
allowed_roles, neg_freq,
|
||||||
hapd->iface->hw_features,
|
hapd->iface->hw_features,
|
||||||
hapd->iface->num_hw_features);
|
hapd->iface->num_hw_features);
|
||||||
if (!hapd->dpp_auth)
|
if (!hapd->dpp_auth)
|
||||||
goto fail;
|
goto fail;
|
||||||
hostapd_dpp_set_testing_options(hapd, hapd->dpp_auth);
|
hostapd_dpp_set_testing_options(hapd, hapd->dpp_auth);
|
||||||
if (dpp_set_configurator(hapd->iface->interfaces->dpp, hapd->msg_ctx,
|
if (dpp_set_configurator(hapd->dpp_auth, cmd) < 0) {
|
||||||
hapd->dpp_auth, cmd) < 0) {
|
|
||||||
dpp_auth_deinit(hapd->dpp_auth);
|
dpp_auth_deinit(hapd->dpp_auth);
|
||||||
hapd->dpp_auth = NULL;
|
hapd->dpp_auth = NULL;
|
||||||
goto fail;
|
goto fail;
|
||||||
@ -663,7 +663,8 @@ static void hostapd_dpp_rx_auth_req(struct hostapd_data *hapd, const u8 *src,
|
|||||||
}
|
}
|
||||||
|
|
||||||
hapd->dpp_auth_ok_on_ack = 0;
|
hapd->dpp_auth_ok_on_ack = 0;
|
||||||
hapd->dpp_auth = dpp_auth_req_rx(hapd->msg_ctx, hapd->dpp_allowed_roles,
|
hapd->dpp_auth = dpp_auth_req_rx(hapd->iface->interfaces->dpp,
|
||||||
|
hapd->msg_ctx, hapd->dpp_allowed_roles,
|
||||||
hapd->dpp_qr_mutual,
|
hapd->dpp_qr_mutual,
|
||||||
peer_bi, own_bi, freq, hdr, buf, len);
|
peer_bi, own_bi, freq, hdr, buf, len);
|
||||||
if (!hapd->dpp_auth) {
|
if (!hapd->dpp_auth) {
|
||||||
@ -671,8 +672,7 @@ static void hostapd_dpp_rx_auth_req(struct hostapd_data *hapd, const u8 *src,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
hostapd_dpp_set_testing_options(hapd, hapd->dpp_auth);
|
hostapd_dpp_set_testing_options(hapd, hapd->dpp_auth);
|
||||||
if (dpp_set_configurator(hapd->iface->interfaces->dpp, hapd->msg_ctx,
|
if (dpp_set_configurator(hapd->dpp_auth,
|
||||||
hapd->dpp_auth,
|
|
||||||
hapd->dpp_configurator_params) < 0) {
|
hapd->dpp_configurator_params) < 0) {
|
||||||
dpp_auth_deinit(hapd->dpp_auth);
|
dpp_auth_deinit(hapd->dpp_auth);
|
||||||
hapd->dpp_auth = NULL;
|
hapd->dpp_auth = NULL;
|
||||||
@ -1675,14 +1675,13 @@ int hostapd_dpp_configurator_sign(struct hostapd_data *hapd, const char *cmd)
|
|||||||
int ret = -1;
|
int ret = -1;
|
||||||
char *curve = NULL;
|
char *curve = NULL;
|
||||||
|
|
||||||
auth = os_zalloc(sizeof(*auth));
|
auth = dpp_alloc_auth(hapd->iface->interfaces->dpp, hapd->msg_ctx);
|
||||||
if (!auth)
|
if (!auth)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
curve = get_param(cmd, " curve=");
|
curve = get_param(cmd, " curve=");
|
||||||
hostapd_dpp_set_testing_options(hapd, auth);
|
hostapd_dpp_set_testing_options(hapd, auth);
|
||||||
if (dpp_set_configurator(hapd->iface->interfaces->dpp, hapd->msg_ctx,
|
if (dpp_set_configurator(auth, cmd) == 0 &&
|
||||||
auth, cmd) == 0 &&
|
|
||||||
dpp_configurator_own_config(auth, curve, 1) == 0) {
|
dpp_configurator_own_config(auth, curve, 1) == 0) {
|
||||||
hostapd_dpp_handle_config_obj(hapd, auth, &auth->conf_obj[0]);
|
hostapd_dpp_handle_config_obj(hapd, auth, &auth->conf_obj[0]);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
@ -2335,20 +2335,22 @@ fail:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static struct dpp_authentication * dpp_alloc_auth(void *msg_ctx)
|
struct dpp_authentication *
|
||||||
|
dpp_alloc_auth(struct dpp_global *dpp, void *msg_ctx)
|
||||||
{
|
{
|
||||||
struct dpp_authentication *auth;
|
struct dpp_authentication *auth;
|
||||||
|
|
||||||
auth = os_zalloc(sizeof(*auth));
|
auth = os_zalloc(sizeof(*auth));
|
||||||
if (!auth)
|
if (!auth)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
auth->global = dpp;
|
||||||
auth->msg_ctx = msg_ctx;
|
auth->msg_ctx = msg_ctx;
|
||||||
auth->conf_resp_status = 255;
|
auth->conf_resp_status = 255;
|
||||||
return auth;
|
return auth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
struct dpp_authentication * dpp_auth_init(void *msg_ctx,
|
struct dpp_authentication * dpp_auth_init(struct dpp_global *dpp, void *msg_ctx,
|
||||||
struct dpp_bootstrap_info *peer_bi,
|
struct dpp_bootstrap_info *peer_bi,
|
||||||
struct dpp_bootstrap_info *own_bi,
|
struct dpp_bootstrap_info *own_bi,
|
||||||
u8 dpp_allowed_roles,
|
u8 dpp_allowed_roles,
|
||||||
@ -2365,7 +2367,7 @@ struct dpp_authentication * dpp_auth_init(void *msg_ctx,
|
|||||||
u8 test_hash[SHA256_MAC_LEN];
|
u8 test_hash[SHA256_MAC_LEN];
|
||||||
#endif /* CONFIG_TESTING_OPTIONS */
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
|
||||||
auth = dpp_alloc_auth(msg_ctx);
|
auth = dpp_alloc_auth(dpp, msg_ctx);
|
||||||
if (!auth)
|
if (!auth)
|
||||||
return NULL;
|
return NULL;
|
||||||
auth->initiator = 1;
|
auth->initiator = 1;
|
||||||
@ -3259,8 +3261,8 @@ static int dpp_auth_build_resp_status(struct dpp_authentication *auth,
|
|||||||
|
|
||||||
|
|
||||||
struct dpp_authentication *
|
struct dpp_authentication *
|
||||||
dpp_auth_req_rx(void *msg_ctx, u8 dpp_allowed_roles, int qr_mutual,
|
dpp_auth_req_rx(struct dpp_global *dpp, void *msg_ctx, u8 dpp_allowed_roles,
|
||||||
struct dpp_bootstrap_info *peer_bi,
|
int qr_mutual, struct dpp_bootstrap_info *peer_bi,
|
||||||
struct dpp_bootstrap_info *own_bi,
|
struct dpp_bootstrap_info *own_bi,
|
||||||
unsigned int freq, const u8 *hdr, const u8 *attr_start,
|
unsigned int freq, const u8 *hdr, const u8 *attr_start,
|
||||||
size_t attr_len)
|
size_t attr_len)
|
||||||
@ -3301,7 +3303,7 @@ dpp_auth_req_rx(void *msg_ctx, u8 dpp_allowed_roles, int qr_mutual,
|
|||||||
wrapped_data, wrapped_data_len);
|
wrapped_data, wrapped_data_len);
|
||||||
attr_len = wrapped_data - 4 - attr_start;
|
attr_len = wrapped_data - 4 - attr_start;
|
||||||
|
|
||||||
auth = dpp_alloc_auth(msg_ctx);
|
auth = dpp_alloc_auth(dpp, msg_ctx);
|
||||||
if (!auth)
|
if (!auth)
|
||||||
goto fail;
|
goto fail;
|
||||||
auth->peer_bi = peer_bi;
|
auth->peer_bi = peer_bi;
|
||||||
@ -4675,9 +4677,7 @@ dpp_configurator_get_id(struct dpp_global *dpp, unsigned int id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int dpp_set_configurator(struct dpp_global *dpp, void *msg_ctx,
|
int dpp_set_configurator(struct dpp_authentication *auth, const char *cmd)
|
||||||
struct dpp_authentication *auth,
|
|
||||||
const char *cmd)
|
|
||||||
{
|
{
|
||||||
const char *pos;
|
const char *pos;
|
||||||
char *tmp = NULL;
|
char *tmp = NULL;
|
||||||
@ -4702,7 +4702,7 @@ int dpp_set_configurator(struct dpp_global *dpp, void *msg_ctx,
|
|||||||
pos = os_strstr(cmd, " configurator=");
|
pos = os_strstr(cmd, " configurator=");
|
||||||
if (pos) {
|
if (pos) {
|
||||||
pos += 14;
|
pos += 14;
|
||||||
auth->conf = dpp_configurator_get_id(dpp, atoi(pos));
|
auth->conf = dpp_configurator_get_id(auth->global, atoi(pos));
|
||||||
if (!auth->conf) {
|
if (!auth->conf) {
|
||||||
wpa_printf(MSG_INFO,
|
wpa_printf(MSG_INFO,
|
||||||
"DPP: Could not find the specified configurator");
|
"DPP: Could not find the specified configurator");
|
||||||
@ -4723,7 +4723,7 @@ int dpp_set_configurator(struct dpp_global *dpp, void *msg_ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (dpp_configuration_parse(auth, cmd) < 0) {
|
if (dpp_configuration_parse(auth, cmd) < 0) {
|
||||||
wpa_msg(msg_ctx, MSG_INFO,
|
wpa_msg(auth->msg_ctx, MSG_INFO,
|
||||||
"DPP: Failed to set configurator parameters");
|
"DPP: Failed to set configurator parameters");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
@ -11401,7 +11401,8 @@ static int dpp_controller_rx_auth_req(struct dpp_connection *conn,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
conn->auth = dpp_auth_req_rx(conn->ctrl->global->msg_ctx,
|
conn->auth = dpp_auth_req_rx(conn->ctrl->global,
|
||||||
|
conn->ctrl->global->msg_ctx,
|
||||||
conn->ctrl->allowed_roles,
|
conn->ctrl->allowed_roles,
|
||||||
conn->ctrl->qr_mutual,
|
conn->ctrl->qr_mutual,
|
||||||
peer_bi, own_bi, -1, hdr, buf, len);
|
peer_bi, own_bi, -1, hdr, buf, len);
|
||||||
@ -11410,8 +11411,7 @@ static int dpp_controller_rx_auth_req(struct dpp_connection *conn,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dpp_set_configurator(conn->ctrl->global, conn->ctrl->global->msg_ctx,
|
if (dpp_set_configurator(conn->auth,
|
||||||
conn->auth,
|
|
||||||
conn->ctrl->configurator_params) < 0) {
|
conn->ctrl->configurator_params) < 0) {
|
||||||
dpp_connection_remove(conn);
|
dpp_connection_remove(conn);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -199,6 +199,7 @@ struct dpp_asymmetric_key {
|
|||||||
#define DPP_MAX_CONF_OBJ 10
|
#define DPP_MAX_CONF_OBJ 10
|
||||||
|
|
||||||
struct dpp_authentication {
|
struct dpp_authentication {
|
||||||
|
struct dpp_global *global;
|
||||||
void *msg_ctx;
|
void *msg_ctx;
|
||||||
u8 peer_version;
|
u8 peer_version;
|
||||||
const struct dpp_curve_params *curve;
|
const struct dpp_curve_params *curve;
|
||||||
@ -429,8 +430,10 @@ int dpp_parse_uri_mac(struct dpp_bootstrap_info *bi, const char *mac);
|
|||||||
int dpp_parse_uri_info(struct dpp_bootstrap_info *bi, const char *info);
|
int dpp_parse_uri_info(struct dpp_bootstrap_info *bi, const char *info);
|
||||||
int dpp_nfc_update_bi(struct dpp_bootstrap_info *own_bi,
|
int dpp_nfc_update_bi(struct dpp_bootstrap_info *own_bi,
|
||||||
struct dpp_bootstrap_info *peer_bi);
|
struct dpp_bootstrap_info *peer_bi);
|
||||||
|
struct dpp_authentication *
|
||||||
|
dpp_alloc_auth(struct dpp_global *dpp, void *msg_ctx);
|
||||||
struct hostapd_hw_modes;
|
struct hostapd_hw_modes;
|
||||||
struct dpp_authentication * dpp_auth_init(void *msg_ctx,
|
struct dpp_authentication * dpp_auth_init(struct dpp_global *dpp, void *msg_ctx,
|
||||||
struct dpp_bootstrap_info *peer_bi,
|
struct dpp_bootstrap_info *peer_bi,
|
||||||
struct dpp_bootstrap_info *own_bi,
|
struct dpp_bootstrap_info *own_bi,
|
||||||
u8 dpp_allowed_roles,
|
u8 dpp_allowed_roles,
|
||||||
@ -438,8 +441,8 @@ struct dpp_authentication * dpp_auth_init(void *msg_ctx,
|
|||||||
struct hostapd_hw_modes *own_modes,
|
struct hostapd_hw_modes *own_modes,
|
||||||
u16 num_modes);
|
u16 num_modes);
|
||||||
struct dpp_authentication *
|
struct dpp_authentication *
|
||||||
dpp_auth_req_rx(void *msg_ctx, u8 dpp_allowed_roles, int qr_mutual,
|
dpp_auth_req_rx(struct dpp_global *dpp, void *msg_ctx, u8 dpp_allowed_roles,
|
||||||
struct dpp_bootstrap_info *peer_bi,
|
int qr_mutual, struct dpp_bootstrap_info *peer_bi,
|
||||||
struct dpp_bootstrap_info *own_bi,
|
struct dpp_bootstrap_info *own_bi,
|
||||||
unsigned int freq, const u8 *hdr, const u8 *attr_start,
|
unsigned int freq, const u8 *hdr, const u8 *attr_start,
|
||||||
size_t attr_len);
|
size_t attr_len);
|
||||||
@ -464,9 +467,7 @@ int dpp_akm_dpp(enum dpp_akm akm);
|
|||||||
int dpp_akm_ver2(enum dpp_akm akm);
|
int dpp_akm_ver2(enum dpp_akm akm);
|
||||||
int dpp_configuration_valid(const struct dpp_configuration *conf);
|
int dpp_configuration_valid(const struct dpp_configuration *conf);
|
||||||
void dpp_configuration_free(struct dpp_configuration *conf);
|
void dpp_configuration_free(struct dpp_configuration *conf);
|
||||||
int dpp_set_configurator(struct dpp_global *dpp, void *msg_ctx,
|
int dpp_set_configurator(struct dpp_authentication *auth, const char *cmd);
|
||||||
struct dpp_authentication *auth,
|
|
||||||
const char *cmd);
|
|
||||||
void dpp_auth_deinit(struct dpp_authentication *auth);
|
void dpp_auth_deinit(struct dpp_authentication *auth);
|
||||||
struct wpabuf *
|
struct wpabuf *
|
||||||
dpp_conf_req_rx(struct dpp_authentication *auth, const u8 *attr_start,
|
dpp_conf_req_rx(struct dpp_authentication *auth, const u8 *attr_start,
|
||||||
|
@ -769,12 +769,12 @@ int wpas_dpp_auth_init(struct wpa_supplicant *wpa_s, const char *cmd)
|
|||||||
wpa_s->dpp_auth = NULL;
|
wpa_s->dpp_auth = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
auth = dpp_auth_init(wpa_s, peer_bi, own_bi, allowed_roles, neg_freq,
|
auth = dpp_auth_init(wpa_s->dpp, wpa_s, peer_bi, own_bi, allowed_roles,
|
||||||
wpa_s->hw.modes, wpa_s->hw.num_modes);
|
neg_freq, wpa_s->hw.modes, wpa_s->hw.num_modes);
|
||||||
if (!auth)
|
if (!auth)
|
||||||
goto fail;
|
goto fail;
|
||||||
wpas_dpp_set_testing_options(wpa_s, auth);
|
wpas_dpp_set_testing_options(wpa_s, auth);
|
||||||
if (dpp_set_configurator(wpa_s->dpp, wpa_s, auth, cmd) < 0) {
|
if (dpp_set_configurator(auth, cmd) < 0) {
|
||||||
dpp_auth_deinit(auth);
|
dpp_auth_deinit(auth);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
@ -1013,7 +1013,8 @@ static void wpas_dpp_rx_auth_req(struct wpa_supplicant *wpa_s, const u8 *src,
|
|||||||
|
|
||||||
wpa_s->dpp_gas_client = 0;
|
wpa_s->dpp_gas_client = 0;
|
||||||
wpa_s->dpp_auth_ok_on_ack = 0;
|
wpa_s->dpp_auth_ok_on_ack = 0;
|
||||||
wpa_s->dpp_auth = dpp_auth_req_rx(wpa_s, wpa_s->dpp_allowed_roles,
|
wpa_s->dpp_auth = dpp_auth_req_rx(wpa_s->dpp, wpa_s,
|
||||||
|
wpa_s->dpp_allowed_roles,
|
||||||
wpa_s->dpp_qr_mutual,
|
wpa_s->dpp_qr_mutual,
|
||||||
peer_bi, own_bi, freq, hdr, buf, len);
|
peer_bi, own_bi, freq, hdr, buf, len);
|
||||||
if (!wpa_s->dpp_auth) {
|
if (!wpa_s->dpp_auth) {
|
||||||
@ -1021,7 +1022,7 @@ static void wpas_dpp_rx_auth_req(struct wpa_supplicant *wpa_s, const u8 *src,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
wpas_dpp_set_testing_options(wpa_s, wpa_s->dpp_auth);
|
wpas_dpp_set_testing_options(wpa_s, wpa_s->dpp_auth);
|
||||||
if (dpp_set_configurator(wpa_s->dpp, wpa_s, wpa_s->dpp_auth,
|
if (dpp_set_configurator(wpa_s->dpp_auth,
|
||||||
wpa_s->dpp_configurator_params) < 0) {
|
wpa_s->dpp_configurator_params) < 0) {
|
||||||
dpp_auth_deinit(wpa_s->dpp_auth);
|
dpp_auth_deinit(wpa_s->dpp_auth);
|
||||||
wpa_s->dpp_auth = NULL;
|
wpa_s->dpp_auth = NULL;
|
||||||
@ -2340,13 +2341,13 @@ int wpas_dpp_configurator_sign(struct wpa_supplicant *wpa_s, const char *cmd)
|
|||||||
int ret = -1;
|
int ret = -1;
|
||||||
char *curve = NULL;
|
char *curve = NULL;
|
||||||
|
|
||||||
auth = os_zalloc(sizeof(*auth));
|
auth = dpp_alloc_auth(wpa_s->dpp, wpa_s);
|
||||||
if (!auth)
|
if (!auth)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
curve = get_param(cmd, " curve=");
|
curve = get_param(cmd, " curve=");
|
||||||
wpas_dpp_set_testing_options(wpa_s, auth);
|
wpas_dpp_set_testing_options(wpa_s, auth);
|
||||||
if (dpp_set_configurator(wpa_s->dpp, wpa_s, auth, cmd) == 0 &&
|
if (dpp_set_configurator(auth, cmd) == 0 &&
|
||||||
dpp_configurator_own_config(auth, curve, 0) == 0)
|
dpp_configurator_own_config(auth, curve, 0) == 0)
|
||||||
ret = wpas_dpp_handle_config_obj(wpa_s, auth,
|
ret = wpas_dpp_handle_config_obj(wpa_s, auth,
|
||||||
&auth->conf_obj[0]);
|
&auth->conf_obj[0]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user