]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
DPP: Store global pointers in struct dpp_authentication
authorJouni Malinen <jouni@codeaurora.org>
Fri, 27 Mar 2020 15:08:38 +0000 (17:08 +0200)
committerJouni Malinen <j@w1.fi>
Fri, 27 Mar 2020 15:44:06 +0000 (17:44 +0200)
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>
src/ap/dpp_hostapd.c
src/common/dpp.c
src/common/dpp.h
wpa_supplicant/dpp_supplicant.c

index 8e22c8ba60c323d3ded303e8c1ba799425c4d64a..d2d081f1b9ad6d016774a6cd9c2ce243a0c848b7 100644 (file)
@@ -543,15 +543,15 @@ int hostapd_dpp_auth_init(struct hostapd_data *hapd, const char *cmd)
                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,
                                       hapd->iface->hw_features,
                                       hapd->iface->num_hw_features);
        if (!hapd->dpp_auth)
                goto fail;
        hostapd_dpp_set_testing_options(hapd, hapd->dpp_auth);
-       if (dpp_set_configurator(hapd->iface->interfaces->dpp, hapd->msg_ctx,
-                                hapd->dpp_auth, cmd) < 0) {
+       if (dpp_set_configurator(hapd->dpp_auth, cmd) < 0) {
                dpp_auth_deinit(hapd->dpp_auth);
                hapd->dpp_auth = NULL;
                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 = 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,
                                         peer_bi, own_bi, freq, hdr, buf, len);
        if (!hapd->dpp_auth) {
@@ -671,8 +672,7 @@ static void hostapd_dpp_rx_auth_req(struct hostapd_data *hapd, const u8 *src,
                return;
        }
        hostapd_dpp_set_testing_options(hapd, hapd->dpp_auth);
-       if (dpp_set_configurator(hapd->iface->interfaces->dpp, hapd->msg_ctx,
-                                hapd->dpp_auth,
+       if (dpp_set_configurator(hapd->dpp_auth,
                                 hapd->dpp_configurator_params) < 0) {
                dpp_auth_deinit(hapd->dpp_auth);
                hapd->dpp_auth = NULL;
@@ -1675,14 +1675,13 @@ int hostapd_dpp_configurator_sign(struct hostapd_data *hapd, const char *cmd)
        int ret = -1;
        char *curve = NULL;
 
-       auth = os_zalloc(sizeof(*auth));
+       auth = dpp_alloc_auth(hapd->iface->interfaces->dpp, hapd->msg_ctx);
        if (!auth)
                return -1;
 
        curve = get_param(cmd, " curve=");
        hostapd_dpp_set_testing_options(hapd, auth);
-       if (dpp_set_configurator(hapd->iface->interfaces->dpp, hapd->msg_ctx,
-                                auth, cmd) == 0 &&
+       if (dpp_set_configurator(auth, cmd) == 0 &&
            dpp_configurator_own_config(auth, curve, 1) == 0) {
                hostapd_dpp_handle_config_obj(hapd, auth, &auth->conf_obj[0]);
                ret = 0;
index 012956b3e0a5b21e2cea0bb1aed84249d8151bd6..57afbd5785f63086168cc00a2e79bfc61e97bb33 100644 (file)
@@ -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;
 
        auth = os_zalloc(sizeof(*auth));
        if (!auth)
                return NULL;
+       auth->global = dpp;
        auth->msg_ctx = msg_ctx;
        auth->conf_resp_status = 255;
        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 *own_bi,
                                          u8 dpp_allowed_roles,
@@ -2365,7 +2367,7 @@ struct dpp_authentication * dpp_auth_init(void *msg_ctx,
        u8 test_hash[SHA256_MAC_LEN];
 #endif /* CONFIG_TESTING_OPTIONS */
 
-       auth = dpp_alloc_auth(msg_ctx);
+       auth = dpp_alloc_auth(dpp, msg_ctx);
        if (!auth)
                return NULL;
        auth->initiator = 1;
@@ -3259,8 +3261,8 @@ static int dpp_auth_build_resp_status(struct dpp_authentication *auth,
 
 
 struct dpp_authentication *
-dpp_auth_req_rx(void *msg_ctx, u8 dpp_allowed_roles, int qr_mutual,
-               struct dpp_bootstrap_info *peer_bi,
+dpp_auth_req_rx(struct dpp_global *dpp, void *msg_ctx, u8 dpp_allowed_roles,
+               int qr_mutual, struct dpp_bootstrap_info *peer_bi,
                struct dpp_bootstrap_info *own_bi,
                unsigned int freq, const u8 *hdr, const u8 *attr_start,
                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);
        attr_len = wrapped_data - 4 - attr_start;
 
-       auth = dpp_alloc_auth(msg_ctx);
+       auth = dpp_alloc_auth(dpp, msg_ctx);
        if (!auth)
                goto fail;
        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,
-                        struct dpp_authentication *auth,
-                        const char *cmd)
+int dpp_set_configurator(struct dpp_authentication *auth, const char *cmd)
 {
        const char *pos;
        char *tmp = NULL;
@@ -4702,7 +4702,7 @@ int dpp_set_configurator(struct dpp_global *dpp, void *msg_ctx,
        pos = os_strstr(cmd, " configurator=");
        if (pos) {
                pos += 14;
-               auth->conf = dpp_configurator_get_id(dpp, atoi(pos));
+               auth->conf = dpp_configurator_get_id(auth->global, atoi(pos));
                if (!auth->conf) {
                        wpa_printf(MSG_INFO,
                                   "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) {
-               wpa_msg(msg_ctx, MSG_INFO,
+               wpa_msg(auth->msg_ctx, MSG_INFO,
                        "DPP: Failed to set configurator parameters");
                goto fail;
        }
@@ -11401,7 +11401,8 @@ static int dpp_controller_rx_auth_req(struct dpp_connection *conn,
                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->qr_mutual,
                                     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;
        }
 
-       if (dpp_set_configurator(conn->ctrl->global, conn->ctrl->global->msg_ctx,
-                                conn->auth,
+       if (dpp_set_configurator(conn->auth,
                                 conn->ctrl->configurator_params) < 0) {
                dpp_connection_remove(conn);
                return -1;
index ad1bcb0fa4c71a1566b11c7b3ca69dd702d6ec82..d6da0460bd0938ae0b6bb7f02b1bb36439639a6f 100644 (file)
@@ -199,6 +199,7 @@ struct dpp_asymmetric_key {
 #define DPP_MAX_CONF_OBJ 10
 
 struct dpp_authentication {
+       struct dpp_global *global;
        void *msg_ctx;
        u8 peer_version;
        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_nfc_update_bi(struct dpp_bootstrap_info *own_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 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 *own_bi,
                                          u8 dpp_allowed_roles,
@@ -438,8 +441,8 @@ struct dpp_authentication * dpp_auth_init(void *msg_ctx,
                                          struct hostapd_hw_modes *own_modes,
                                          u16 num_modes);
 struct dpp_authentication *
-dpp_auth_req_rx(void *msg_ctx, u8 dpp_allowed_roles, int qr_mutual,
-               struct dpp_bootstrap_info *peer_bi,
+dpp_auth_req_rx(struct dpp_global *dpp, void *msg_ctx, u8 dpp_allowed_roles,
+                       int qr_mutual, struct dpp_bootstrap_info *peer_bi,
                struct dpp_bootstrap_info *own_bi,
                unsigned int freq, const u8 *hdr, const u8 *attr_start,
                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_configuration_valid(const struct dpp_configuration *conf);
 void dpp_configuration_free(struct dpp_configuration *conf);
-int dpp_set_configurator(struct dpp_global *dpp, void *msg_ctx,
-                        struct dpp_authentication *auth,
-                        const char *cmd);
+int dpp_set_configurator(struct dpp_authentication *auth, const char *cmd);
 void dpp_auth_deinit(struct dpp_authentication *auth);
 struct wpabuf *
 dpp_conf_req_rx(struct dpp_authentication *auth, const u8 *attr_start,
index 6d9427bb39b1c3213788b93c30b59a5fdff01252..89d86ca02599d481396a3dea0d7f6397cb7cc8f9 100644 (file)
@@ -769,12 +769,12 @@ int wpas_dpp_auth_init(struct wpa_supplicant *wpa_s, const char *cmd)
                wpa_s->dpp_auth = NULL;
        }
 
-       auth = dpp_auth_init(wpa_s, peer_bi, own_bi, allowed_roles, neg_freq,
-                            wpa_s->hw.modes, wpa_s->hw.num_modes);
+       auth = dpp_auth_init(wpa_s->dpp, wpa_s, peer_bi, own_bi, allowed_roles,
+                            neg_freq, wpa_s->hw.modes, wpa_s->hw.num_modes);
        if (!auth)
                goto fail;
        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);
                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_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,
                                          peer_bi, own_bi, freq, hdr, buf, len);
        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;
        }
        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) {
                dpp_auth_deinit(wpa_s->dpp_auth);
                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;
        char *curve = NULL;
 
-       auth = os_zalloc(sizeof(*auth));
+       auth = dpp_alloc_auth(wpa_s->dpp, wpa_s);
        if (!auth)
                return -1;
 
        curve = get_param(cmd, " curve=");
        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)
                ret = wpas_dpp_handle_config_obj(wpa_s, auth,
                                                 &auth->conf_obj[0]);