]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
PASN: Use allocated memory for RSNXE and allow its contents to be set
authorShivani Baranwal <quic_shivbara@quicinc.com>
Sun, 4 Aug 2024 21:13:59 +0000 (02:43 +0530)
committerJouni Malinen <j@w1.fi>
Thu, 5 Sep 2024 22:06:32 +0000 (01:06 +0300)
This will be needed for P2P2 cases.

Signed-off-by: Shivani Baranwal <quic_shivbara@quicinc.com>
src/pasn/pasn_common.c
src/pasn/pasn_common.h
src/pasn/pasn_initiator.c

index 331a65b7068145e13926861ea38efc5d2c70e59f..25e44a1953d4f5a5c101dd61552e86ab9a49620d 100644 (file)
@@ -28,6 +28,9 @@ struct pasn_data * pasn_data_init(void)
 
 void pasn_data_deinit(struct pasn_data *pasn)
 {
+       if (!pasn)
+               return;
+       os_free(pasn->rsnxe_ie);
        bin_clear_free(pasn, sizeof(struct pasn_data));
 }
 
@@ -157,7 +160,7 @@ void pasn_set_rsnxe_ie(struct pasn_data *pasn, const u8 *rsnxe_ie)
 {
        if (!pasn || !rsnxe_ie)
                return;
-       pasn->rsnxe_ie = rsnxe_ie;
+       pasn->rsnxe_ie = os_memdup(rsnxe_ie, 2 + rsnxe_ie[1]);
 }
 
 
index 36d129f4e2b7b0d16efcd9d8da2c4d7f069bd434..7b7c73792d8af69048acbb8413732ce7728527f0 100644 (file)
@@ -54,7 +54,7 @@ struct pasn_data {
        int wpa_key_mgmt;
        int rsn_pairwise;
        u16 rsnxe_capab;
-       const u8 *rsnxe_ie;
+       u8 *rsnxe_ie;
        bool custom_pmkid_valid;
        u8 custom_pmkid[PMKID_LEN];
 
index dbcc91a71bd43ed8f33ac178528b3ceee72f8683..ce1055b1b1630353ea2edcfd51612e0087b10e33 100644 (file)
@@ -646,7 +646,10 @@ static struct wpabuf * wpas_pasn_build_auth_1(struct pasn_data *pasn,
        if (wpa_pasn_add_wrapped_data(buf, wrapped_data_buf) < 0)
                goto fail;
 
-       wpa_pasn_add_rsnxe(buf, pasn->rsnxe_capab);
+       if (pasn->rsnxe_ie)
+               wpabuf_put_data(buf, pasn->rsnxe_ie, 2 + pasn->rsnxe_ie[1]);
+       else
+               wpa_pasn_add_rsnxe(buf, pasn->rsnxe_capab);
 
        wpa_pasn_add_extra_ies(buf, pasn->extra_ies, pasn->extra_ies_len);
 
@@ -806,6 +809,7 @@ void wpa_pasn_reset(struct pasn_data *pasn)
        pasn->derive_kdk = false;
        pasn->rsn_ie = NULL;
        pasn->rsn_ie_len = 0;
+       os_free(pasn->rsnxe_ie);
        pasn->rsnxe_ie = NULL;
        pasn->custom_pmkid_valid = false;