Skip to content

Commit 7f18afe

Browse files
author
Juha Heiskanen
committed
PAE controller and NVM update
PAE controller allocate buffer for NVM write opration which is allocated with pae controller init. Change-Id: I1e76284cb07c7bf2f2239bd4ea2d0ea449fbfed2
1 parent f692eb8 commit 7f18afe

File tree

6 files changed

+79
-62
lines changed

6 files changed

+79
-62
lines changed

source/6LoWPAN/ws/ws_pae_controller.c

Lines changed: 43 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ typedef struct {
9191
ws_pae_gtks_updated *pae_gtks_updated; /**< PAE GTKs updated */
9292
ws_pae_gtk_hash_update *pae_gtk_hash_update; /**< PAE GTK HASH update */
9393
ws_pae_nw_key_index_update *pae_nw_key_index_update; /**< PAE NW key index update */
94+
nvm_tlv_entry_t *pae_nvm_buffer; /**< Buffer For PAE NVM write operation*/
9495
bool gtks_set : 1; /**< GTKs are set */
9596
bool gtkhash_set : 1; /**< GTK hashes are set */
9697
bool key_index_set : 1; /**< NW key index is set */
@@ -99,7 +100,7 @@ typedef struct {
99100
static pae_controller_t *ws_pae_controller_get(protocol_interface_info_entry_t *interface_ptr);
100101
static void ws_pae_controller_frame_counter_timer(uint16_t seconds, pae_controller_t *entry);
101102
static void ws_pae_controller_frame_counter_store(pae_controller_t *entry);
102-
static int8_t ws_pae_controller_nvm_frame_counter_write(uint8_t index, uint8_t *hash, uint32_t frame_counter);
103+
static void ws_pae_controller_nvm_frame_counter_write(nvm_tlv_entry_t *tlv_entry);
103104
static int8_t ws_pae_controller_nvm_frame_counter_read(uint8_t *index, uint8_t *hash, uint32_t *frame_counter);
104105
static pae_controller_t *ws_pae_controller_get_or_create(int8_t interface_id);
105106
static void ws_pae_controller_gtk_hash_set(protocol_interface_info_entry_t *interface_ptr, uint8_t *gtkhash);
@@ -109,10 +110,10 @@ static void ws_pae_controller_active_nw_key_set(protocol_interface_info_entry_t
109110
static int8_t ws_pae_controller_gak_from_gtk(uint8_t *gak, uint8_t *gtk, char *network_name);
110111
static void ws_pae_controller_nw_key_index_check_and_set(protocol_interface_info_entry_t *interface_ptr, uint8_t index);
111112
static void ws_pae_controller_data_init(pae_controller_t *controller);
112-
static void ws_pae_controller_frame_counter_read(stored_frame_counter_t *counter);
113+
static void ws_pae_controller_frame_counter_read(pae_controller_t *controller);
113114
static void ws_pae_controller_frame_counter_reset(stored_frame_counter_t *counter);
114115
static uint32_t ws_pae_controller_frame_counter_get(stored_frame_counter_t *counter, uint8_t index, uint8_t *key_hash);
115-
static void ws_pae_controller_frame_counter_write(stored_frame_counter_t *counter, uint8_t index, uint8_t *key_hash, uint32_t curr_counter);
116+
static void ws_pae_controller_frame_counter_write(pae_controller_t *controller, uint8_t index, uint8_t *key_hash, uint32_t curr_counter);
116117

117118
static const char *FRAME_COUNTER_FILE = FRAME_COUNTER_FILE_NAME;
118119

@@ -450,7 +451,7 @@ static void ws_pae_controller_nw_key_index_check_and_set(protocol_interface_info
450451
uint32_t frame_counter = ws_pae_controller_frame_counter_get(&controller->stored_frame_counter, index, controller->nw_key[index].hash);
451452
controller->nw_frame_counter_set(interface_ptr, frame_counter);
452453
tr_info("NW frame counter set: %i", frame_counter);
453-
ws_pae_controller_frame_counter_write(&controller->stored_frame_counter, index, controller->nw_key[index].hash, frame_counter);
454+
ws_pae_controller_frame_counter_write(controller, index, controller->nw_key[index].hash, frame_counter);
454455
}
455456

456457
// Do not update PAN version for initial key index set
@@ -479,7 +480,7 @@ static void ws_pae_controller_active_nw_key_set(protocol_interface_info_entry_t
479480
uint32_t frame_counter = ws_pae_controller_frame_counter_get(&controller->stored_frame_counter, index, controller->nw_key[index].hash);
480481
controller->nw_frame_counter_set(cur, frame_counter);
481482
tr_info("NW frame counter set: %i", frame_counter);
482-
ws_pae_controller_frame_counter_write(&controller->stored_frame_counter, index, controller->nw_key[index].hash, frame_counter);
483+
ws_pae_controller_frame_counter_write(controller, index, controller->nw_key[index].hash, frame_counter);
483484
}
484485

485486
controller->gtk_index = index;
@@ -498,7 +499,11 @@ int8_t ws_pae_controller_init(protocol_interface_info_entry_t *interface_ptr)
498499
}
499500

500501
pae_controller_t *controller = ns_dyn_mem_alloc(sizeof(pae_controller_t));
501-
if (!controller) {
502+
void *pae_nvm_buffer = ws_pae_buffer_allocate();
503+
504+
if (!controller || !pae_nvm_buffer) {
505+
ns_dyn_mem_free(controller);
506+
ns_dyn_mem_free(pae_nvm_buffer);
502507
return -1;
503508
}
504509

@@ -509,6 +514,7 @@ int8_t ws_pae_controller_init(protocol_interface_info_entry_t *interface_ptr)
509514
controller->nw_send_key_index_set = NULL;
510515
controller->nw_frame_counter_set = NULL;
511516
controller->pan_ver_increment = NULL;
517+
controller->pae_nvm_buffer = pae_nvm_buffer;
512518

513519
ws_pae_controller_data_init(controller);
514520

@@ -550,15 +556,17 @@ static void ws_pae_controller_data_init(pae_controller_t *controller)
550556
ws_pae_timers_settings_init(&controller->timer_settings);
551557
}
552558

553-
static void ws_pae_controller_frame_counter_read(stored_frame_counter_t *counter)
559+
static void ws_pae_controller_frame_counter_read(pae_controller_t *controller)
554560
{
561+
stored_frame_counter_t *counter = &controller->stored_frame_counter;
555562
// If not already, read frame counter and check if index and hash matches
556563
if (!counter->set && ws_pae_controller_nvm_frame_counter_read(&counter->index, counter->hash, &counter->frame_counter) >= 0) {
557564
counter->frame_counter += FRAME_COUNTER_INCREMENT;
558565
counter->set = true;
559566
tr_debug("Read frame counter: %"PRIu32", index %i, hash %s, system time: %"PRIu32"", counter->frame_counter, counter->index, trace_array(counter->hash, 8), protocol_core_monotonic_time / 10);
560567
// Write incremented frame counter
561-
ws_pae_controller_nvm_frame_counter_write(counter->index, counter->hash, counter->frame_counter);
568+
ws_pae_nvm_store_frame_counter_tlv_create(controller->pae_nvm_buffer, counter->index, counter->hash, counter->frame_counter);
569+
ws_pae_controller_nvm_frame_counter_write(controller->pae_nvm_buffer);
562570
}
563571
}
564572

@@ -581,11 +589,13 @@ static uint32_t ws_pae_controller_frame_counter_get(stored_frame_counter_t *coun
581589
return frame_counter;
582590
}
583591

584-
static void ws_pae_controller_frame_counter_write(stored_frame_counter_t *counter, uint8_t index, uint8_t *key_hash, uint32_t curr_frame_counter)
592+
static void ws_pae_controller_frame_counter_write(pae_controller_t *controller, uint8_t index, uint8_t *key_hash, uint32_t curr_frame_counter)
585593
{
594+
stored_frame_counter_t *counter = &controller->stored_frame_counter;
586595
// If index or hash changes, or frame counter has been incremented by the threshold updates frame counter
587596
if (!counter->set || counter->index != index || memcmp(key_hash, counter->hash, 8) != 0 || curr_frame_counter > counter->frame_counter + FRAME_COUNTER_STORE_THRESHOLD) {
588-
ws_pae_controller_nvm_frame_counter_write(index, key_hash, curr_frame_counter);
597+
ws_pae_nvm_store_frame_counter_tlv_create(controller->pae_nvm_buffer, index, key_hash, curr_frame_counter);
598+
ws_pae_controller_nvm_frame_counter_write(controller->pae_nvm_buffer);
589599
counter->index = index;
590600
counter->frame_counter = curr_frame_counter;
591601
memcpy(counter->hash, key_hash, GTK_HASH_LEN);
@@ -615,7 +625,7 @@ int8_t ws_pae_controller_supp_init(protocol_interface_info_entry_t *interface_pt
615625

616626
ws_pae_supp_cb_register(controller->interface_ptr, controller->auth_completed, ws_pae_controller_nw_key_check_and_insert, ws_pae_controller_active_nw_key_set);
617627

618-
ws_pae_controller_frame_counter_read(&controller->stored_frame_counter);
628+
ws_pae_controller_frame_counter_read(controller);
619629

620630
return 0;
621631
}
@@ -637,7 +647,7 @@ int8_t ws_pae_controller_auth_init(protocol_interface_info_entry_t *interface_pt
637647
controller->pae_gtks_updated = ws_pae_auth_gtks_updated;
638648
controller->pae_nw_key_index_update = ws_pae_auth_nw_key_index_update;
639649

640-
ws_pae_controller_frame_counter_read(&controller->stored_frame_counter);
650+
ws_pae_controller_frame_counter_read(controller);
641651

642652
return 0;
643653
}
@@ -680,6 +690,7 @@ int8_t ws_pae_controller_delete(protocol_interface_info_entry_t *interface_ptr)
680690
}
681691

682692
ns_list_remove(&pae_controller_list, controller);
693+
ns_dyn_mem_free(controller->pae_nvm_buffer);
683694
ns_dyn_mem_free(controller);
684695

685696
return 0;
@@ -1071,24 +1082,10 @@ static void ws_pae_controller_frame_counter_store(pae_controller_t *entry)
10711082

10721083
uint32_t curr_frame_counter;
10731084
entry->nw_frame_counter_read(entry->interface_ptr, &curr_frame_counter);
1074-
ws_pae_controller_frame_counter_write(&entry->stored_frame_counter, active_index, hash, curr_frame_counter);
1085+
ws_pae_controller_frame_counter_write(entry, active_index, hash, curr_frame_counter);
10751086
}
10761087
}
10771088

1078-
static int8_t ws_pae_controller_nvm_frame_counter_write(uint8_t index, uint8_t *hash, uint32_t frame_counter)
1079-
{
1080-
nvm_tlv_list_t tlv_list;
1081-
ns_list_init(&tlv_list);
1082-
1083-
nvm_tlv_entry_t *tlv_entry = ws_pae_nvm_store_frame_counter_tlv_create(index, hash, frame_counter);
1084-
ns_list_add_to_end(&tlv_list, tlv_entry);
1085-
1086-
ws_pae_nvm_store_tlv_file_write(FRAME_COUNTER_FILE, &tlv_list);
1087-
ns_list_remove(&tlv_list, tlv_entry);
1088-
ns_dyn_mem_free(tlv_entry);
1089-
1090-
return 0;
1091-
}
10921089

10931090
static int8_t ws_pae_controller_nvm_frame_counter_read(uint8_t *index, uint8_t *hash, uint32_t *frame_counter)
10941091
{
@@ -1141,5 +1138,24 @@ static pae_controller_t *ws_pae_controller_get_or_create(int8_t interface_id)
11411138
return controller;
11421139
}
11431140

1141+
nvm_tlv_entry_t *ws_pae_controller_nvm_tlv_get(protocol_interface_info_entry_t *interface_ptr)
1142+
{
1143+
pae_controller_t *controller = ws_pae_controller_get(interface_ptr);
1144+
if (!controller) {
1145+
return NULL;
1146+
}
1147+
1148+
return controller->pae_nvm_buffer;
1149+
}
1150+
1151+
static void ws_pae_controller_nvm_frame_counter_write(nvm_tlv_entry_t *tlv_entry)
1152+
{
1153+
nvm_tlv_list_t tlv_list;
1154+
ns_list_init(&tlv_list);
1155+
ns_list_add_to_end(&tlv_list, tlv_entry);
1156+
ws_pae_nvm_store_tlv_file_write(FRAME_COUNTER_FILE, &tlv_list);
1157+
1158+
}
1159+
11441160
#endif /* HAVE_WS */
11451161

source/6LoWPAN/ws/ws_pae_controller.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
#ifdef HAVE_WS
2222

23+
struct nvm_tlv_entry;
2324
/**
2425
* ws_pae_controller_set_target sets EAPOL target for PAE supplicant
2526
*
@@ -445,6 +446,8 @@ void ws_pae_controller_fast_timer(uint16_t ticks);
445446
*/
446447
void ws_pae_controller_slow_timer(uint16_t seconds);
447448

449+
struct nvm_tlv_entry *ws_pae_controller_nvm_tlv_get(protocol_interface_info_entry_t *interface_ptr);
450+
448451
#else
449452

450453
#define ws_pae_controller_set_target(interface_ptr, target_pan_id, target_dest_eui_64)
@@ -465,6 +468,7 @@ void ws_pae_controller_slow_timer(uint16_t seconds);
465468
#define ws_pae_controller_stop(interface_ptr)
466469
#define ws_pae_controller_delete(interface_ptr)
467470
#define ws_pae_controller_cb_register(interface_ptr, completed, nw_key_set, nw_key_clear, nw_send_key_index_set, pan_ver_increment) 1
471+
#define ws_pae_controller_nvm_tlv_get(interface_ptr) NULL
468472

469473
#endif
470474

source/6LoWPAN/ws/ws_pae_nvm_data.c

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,14 @@
4646
// GTK hash (8), frame counter (4), index (1)
4747
#define PAE_NVM_FRAME_COUNTER_LEN 8 + 4 + 1
4848

49-
nvm_tlv_entry_t *ws_pae_nvm_store_nw_info_tlv_create(uint16_t pan_id, char *nw_name, sec_prot_gtk_keys_t *gtks)
49+
nvm_tlv_entry_t *ws_pae_buffer_allocate(void)
50+
{
51+
//Allocate worts case buffer
52+
return ns_dyn_mem_temporary_alloc(sizeof(nvm_tlv_entry_t) + PAE_NVM_NW_INFO_LEN);
53+
}
54+
55+
void ws_pae_nvm_store_nw_info_tlv_create(nvm_tlv_entry_t *tlv_entry, uint16_t pan_id, char *nw_name, sec_prot_gtk_keys_t *gtks)
5056
{
51-
nvm_tlv_entry_t *tlv_entry = ns_dyn_mem_temporary_alloc(sizeof(nvm_tlv_entry_t) + PAE_NVM_NW_INFO_LEN);
52-
if (!tlv_entry) {
53-
return NULL;
54-
}
5557

5658
tlv_entry->tag = PAE_NVM_NW_INFO_TAG;
5759
tlv_entry->len = PAE_NVM_NW_INFO_LEN;
@@ -82,7 +84,6 @@ nvm_tlv_entry_t *ws_pae_nvm_store_nw_info_tlv_create(uint16_t pan_id, char *nw_n
8284

8385
tr_debug("NVM NW_INFO write PAN ID %i name: %s", pan_id, nw_name);
8486

85-
return tlv_entry;
8687
}
8788

8889
int8_t ws_pae_nvm_store_nw_info_tlv_read(nvm_tlv_entry_t *tlv_entry, uint16_t *pan_id, char *nw_name, sec_prot_gtk_keys_t *gtks)
@@ -121,13 +122,8 @@ int8_t ws_pae_nvm_store_nw_info_tlv_read(nvm_tlv_entry_t *tlv_entry, uint16_t *p
121122
return 0;
122123
}
123124

124-
nvm_tlv_entry_t *ws_pae_nvm_store_keys_tlv_create(sec_prot_keys_t *sec_keys)
125+
void ws_pae_nvm_store_keys_tlv_create(nvm_tlv_entry_t *tlv_entry, sec_prot_keys_t *sec_keys)
125126
{
126-
nvm_tlv_entry_t *tlv_entry = ns_dyn_mem_temporary_alloc(sizeof(nvm_tlv_entry_t) + PAE_NVM_KEYS_LEN);
127-
if (!tlv_entry) {
128-
return NULL;
129-
}
130-
131127
tlv_entry->tag = PAE_NVM_KEYS_TAG;
132128
tlv_entry->len = PAE_NVM_KEYS_LEN;
133129

@@ -168,7 +164,6 @@ nvm_tlv_entry_t *ws_pae_nvm_store_keys_tlv_create(sec_prot_keys_t *sec_keys)
168164

169165
tr_debug("NVM KEYS write");
170166

171-
return tlv_entry;
172167
}
173168

174169
int8_t ws_pae_nvm_store_keys_tlv_read(nvm_tlv_entry_t *tlv_entry, sec_prot_keys_t *sec_keys)
@@ -213,12 +208,8 @@ int8_t ws_pae_nvm_store_keys_tlv_read(nvm_tlv_entry_t *tlv_entry, sec_prot_keys_
213208
return 0;
214209
}
215210

216-
nvm_tlv_entry_t *ws_pae_nvm_store_frame_counter_tlv_create(uint8_t index, uint8_t *hash, uint32_t frame_counter)
211+
void ws_pae_nvm_store_frame_counter_tlv_create(nvm_tlv_entry_t *tlv_entry, uint8_t index, uint8_t *hash, uint32_t frame_counter)
217212
{
218-
nvm_tlv_entry_t *tlv_entry = ns_dyn_mem_temporary_alloc(sizeof(nvm_tlv_entry_t) + PAE_NVM_FRAME_COUNTER_LEN);
219-
if (!tlv_entry) {
220-
return NULL;
221-
}
222213

223214
tlv_entry->tag = PAE_NVM_FRAME_COUNTER_TAG;
224215
tlv_entry->len = PAE_NVM_FRAME_COUNTER_LEN;
@@ -231,8 +222,6 @@ nvm_tlv_entry_t *ws_pae_nvm_store_frame_counter_tlv_create(uint8_t index, uint8_
231222
*tlv = index;
232223

233224
tr_debug("NVM FRAME COUNTER write");
234-
235-
return tlv_entry;
236225
}
237226

238227
int8_t ws_pae_nvm_store_frame_counter_tlv_read(nvm_tlv_entry_t *tlv_entry, uint8_t *index, uint8_t *hash, uint32_t *frame_counter)

source/6LoWPAN/ws/ws_pae_nvm_data.h

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,15 @@
2727
/**
2828
* ws_pae_nvm_store_nw_info_tlv_create create NVM network info TLV
2929
*
30+
* \param tlv_entry TLV entry pointer
3031
* \param pan_id PAN ID
3132
* \param nw_name network name
3233
* \param gtks GTK keys
3334
*
3435
* \return TLV entry or NULL
3536
*
3637
*/
37-
nvm_tlv_entry_t *ws_pae_nvm_store_nw_info_tlv_create(uint16_t pan_id, char *nw_name, sec_prot_gtk_keys_t *gtks);
38+
void ws_pae_nvm_store_nw_info_tlv_create(nvm_tlv_entry_t *tlv_entry, uint16_t pan_id, char *nw_name, sec_prot_gtk_keys_t *gtks);
3839

3940
/**
4041
* ws_pae_nvm_store_nw_info_tlv_read read from NVM network info TLV
@@ -53,12 +54,11 @@ int8_t ws_pae_nvm_store_nw_info_tlv_read(nvm_tlv_entry_t *tlv_entry, uint16_t *p
5354
/**
5455
* ws_pae_nvm_store_keys_tlv_create create NVM keys TLV
5556
*
57+
* \param tlv_entry TLV entry buffer pointer
5658
* \param sec_keys security keys
5759
*
58-
* \return TLV entry or NULL
59-
*
6060
*/
61-
nvm_tlv_entry_t *ws_pae_nvm_store_keys_tlv_create(sec_prot_keys_t *sec_keys);
61+
void ws_pae_nvm_store_keys_tlv_create(nvm_tlv_entry_t *tlv_entry, sec_prot_keys_t *sec_keys);
6262

6363
/**
6464
* ws_pae_nvm_store_nw_info_tlv_read read from NVM keys TLV
@@ -75,14 +75,14 @@ int8_t ws_pae_nvm_store_keys_tlv_read(nvm_tlv_entry_t *tlv_entry, sec_prot_keys_
7575
/**
7676
* ws_pae_nvm_store_frame_counter_tlv_create create NVM frame counter TLV
7777
*
78+
* \param tlv_entry TLV entry buffer pointer
7879
* \param index index
7980
* \param hash hash
8081
* \param frame_counter frame counter
8182
*
82-
* \return TLV entry or NULL
8383
*
8484
*/
85-
nvm_tlv_entry_t *ws_pae_nvm_store_frame_counter_tlv_create(uint8_t index, uint8_t *hash, uint32_t frame_counter);
85+
void ws_pae_nvm_store_frame_counter_tlv_create(nvm_tlv_entry_t *tlv_entry, uint8_t index, uint8_t *hash, uint32_t frame_counter);
8686

8787
/**
8888
* ws_pae_nvm_store_frame_counter_tlv_read read from NVM frame counter TLV
@@ -98,4 +98,6 @@ nvm_tlv_entry_t *ws_pae_nvm_store_frame_counter_tlv_create(uint8_t index, uint8_
9898
*/
9999
int8_t ws_pae_nvm_store_frame_counter_tlv_read(nvm_tlv_entry_t *tlv_entry, uint8_t *index, uint8_t *hash, uint32_t *frame_counter);
100100

101+
nvm_tlv_entry_t *ws_pae_buffer_allocate(void);
102+
101103
#endif /* WS_PAE_NVM_DATA_H_ */

source/6LoWPAN/ws/ws_pae_nvm_store.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
#define KEYS_FILE_NAME "pae_keys"
3333
#define FRAME_COUNTER_FILE_NAME "pae_frame_counter"
3434

35-
typedef struct {
35+
typedef struct nvm_tlv_entry {
3636
ns_list_link_t link; /**< Link */
3737
uint16_t tag; /**< Unique tag */
3838
uint16_t len; /**< Number of the bytes after the length field */

source/6LoWPAN/ws/ws_pae_supp.c

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -354,17 +354,20 @@ static void ws_pae_supp_nvm_update(pae_supp_t *pae_supp)
354354

355355
static int8_t ws_pae_supp_nvm_nw_info_write(pae_supp_t *pae_supp)
356356
{
357+
nvm_tlv_entry_t *tlv_entry = ws_pae_controller_nvm_tlv_get(pae_supp->interface_ptr);
358+
if (!tlv_entry) {
359+
return -1;
360+
}
361+
357362
nvm_tlv_list_t tlv_list;
358363
ns_list_init(&tlv_list);
359364

360-
nvm_tlv_entry_t *tlv_entry = ws_pae_nvm_store_nw_info_tlv_create(pae_supp->sec_keys_nw_info.key_pan_id,
361-
pae_supp->sec_keys_nw_info.network_name,
362-
&pae_supp->gtks);
365+
ws_pae_nvm_store_nw_info_tlv_create(tlv_entry,pae_supp->sec_keys_nw_info.key_pan_id,
366+
pae_supp->sec_keys_nw_info.network_name,
367+
&pae_supp->gtks);
363368
ns_list_add_to_end(&tlv_list, tlv_entry);
364369

365370
ws_pae_nvm_store_tlv_file_write(NW_INFO_FILE, &tlv_list);
366-
ns_list_remove(&tlv_list, tlv_entry);
367-
ns_dyn_mem_free(tlv_entry);
368371

369372
return 0;
370373
}
@@ -389,15 +392,18 @@ static int8_t ws_pae_supp_nvm_nw_info_read(pae_supp_t *pae_supp)
389392

390393
static int8_t ws_pae_supp_nvm_keys_write(pae_supp_t *pae_supp)
391394
{
395+
nvm_tlv_entry_t *tlv_entry = ws_pae_controller_nvm_tlv_get(pae_supp->interface_ptr);
396+
if (!tlv_entry) {
397+
return -1;
398+
}
399+
392400
nvm_tlv_list_t tlv_list;
393401
ns_list_init(&tlv_list);
394402

395-
nvm_tlv_entry_t *tlv_entry = ws_pae_nvm_store_keys_tlv_create(&pae_supp->entry.sec_keys);
403+
ws_pae_nvm_store_keys_tlv_create(tlv_entry, &pae_supp->entry.sec_keys);
396404
ns_list_add_to_end(&tlv_list, tlv_entry);
397405

398406
ws_pae_nvm_store_tlv_file_write(KEYS_FILE, &tlv_list);
399-
ns_list_remove(&tlv_list, tlv_entry);
400-
ns_dyn_mem_free(tlv_entry);
401407

402408
return 0;
403409
}

0 commit comments

Comments
 (0)