Lines Matching full:entry

27 	void (*free_cb)(struct rsn_pmksa_cache_entry *entry, void *ctx,
29 bool (*is_current_cb)(struct rsn_pmksa_cache_entry *entry,
31 void (*notify_cb)(struct rsn_pmksa_cache_entry *entry, void *ctx);
39 static void _pmksa_cache_free_entry(struct rsn_pmksa_cache_entry *entry) in _pmksa_cache_free_entry() argument
41 bin_clear_free(entry, sizeof(*entry)); in _pmksa_cache_free_entry()
46 struct rsn_pmksa_cache_entry *entry, in pmksa_cache_free_entry() argument
50 wpa_sm_remove_pmkid(pmksa->sm, entry->network_ctx, entry->aa, in pmksa_cache_free_entry()
51 entry->pmkid, in pmksa_cache_free_entry()
52 entry->fils_cache_id_set ? in pmksa_cache_free_entry()
53 entry->fils_cache_id : NULL); in pmksa_cache_free_entry()
56 pmksa->free_cb(entry, pmksa->ctx, reason); in pmksa_cache_free_entry()
57 _pmksa_cache_free_entry(entry); in pmksa_cache_free_entry()
62 struct rsn_pmksa_cache_entry *entry) in pmksa_cache_remove() argument
68 if (e == entry) { in pmksa_cache_remove()
69 pmksa->pmksa = entry->next; in pmksa_cache_remove()
72 if (e->next == entry) { in pmksa_cache_remove()
73 e->next = entry->next; in pmksa_cache_remove()
80 "RSN: Could not remove PMKSA cache entry %p since it is not in the list", in pmksa_cache_remove()
81 entry); in pmksa_cache_remove()
85 pmksa_cache_free_entry(pmksa, entry, PMKSA_FREE); in pmksa_cache_remove()
94 struct rsn_pmksa_cache_entry *entry = pmksa->pmksa; in pmksa_cache_expire() local
97 while (entry && entry->expiration <= now.sec) { in pmksa_cache_expire()
98 if (wpa_key_mgmt_sae(entry->akmp) && pmksa->is_current_cb && in pmksa_cache_expire()
99 pmksa->is_current_cb(entry, pmksa->ctx)) { in pmksa_cache_expire()
100 /* Do not expire the currently used PMKSA entry for SAE in pmksa_cache_expire()
103 * expired entry will be removed after this association in pmksa_cache_expire()
106 "RSN: postpone PMKSA cache entry expiration for SAE with " in pmksa_cache_expire()
107 MACSTR, MAC2STR(entry->aa)); in pmksa_cache_expire()
108 prev = entry; in pmksa_cache_expire()
109 entry = entry->next; in pmksa_cache_expire()
113 wpa_printf(MSG_DEBUG, "RSN: expired PMKSA cache entry for " in pmksa_cache_expire()
114 MACSTR, MAC2STR(entry->aa)); in pmksa_cache_expire()
116 prev->next = entry->next; in pmksa_cache_expire()
118 pmksa->pmksa = entry->next; in pmksa_cache_expire()
119 tmp = entry; in pmksa_cache_expire()
120 entry = entry->next; in pmksa_cache_expire()
136 struct rsn_pmksa_cache_entry *entry; in pmksa_cache_reauth() local
138 entry = pmksa->sm->cur_pmksa ? in pmksa_cache_reauth()
142 if (entry && wpa_key_mgmt_sae(entry->akmp)) { in pmksa_cache_reauth()
145 entry->sae_reauth_scheduled = true; in pmksa_cache_reauth()
146 wpa_sm_remove_pmkid(pmksa->sm, entry->network_ctx, in pmksa_cache_reauth()
147 entry->aa, entry->pmkid, NULL); in pmksa_cache_reauth()
160 struct rsn_pmksa_cache_entry *entry; in pmksa_cache_set_expiration() local
174 /* Do not continue polling for the current PMKSA entry in pmksa_cache_set_expiration()
176 * time to the following entry, if any, and wait at in pmksa_cache_set_expiration()
179 entry = pmksa->pmksa->next; in pmksa_cache_set_expiration()
180 if (entry) { in pmksa_cache_set_expiration()
181 sec = entry->expiration - now.sec; in pmksa_cache_set_expiration()
196 entry = pmksa->sm->cur_pmksa ? pmksa->sm->cur_pmksa : in pmksa_cache_set_expiration()
198 if (entry && in pmksa_cache_set_expiration()
199 (!wpa_key_mgmt_sae(entry->akmp) || in pmksa_cache_set_expiration()
201 !entry->sae_reauth_scheduled))) { in pmksa_cache_set_expiration()
212 * pmksa_cache_add - Add a PMKSA cache entry
224 * Returns: Pointer to the added PMKSA cache entry or %NULL on error
226 * This function create a PMKSA entry for a new PMK and adds it to the PMKSA
227 * cache. If an old entry is already in the cache for the same Authenticator,
228 * this entry will be replaced with the new entry. PMKID will be calculated
237 struct rsn_pmksa_cache_entry *entry; in pmksa_cache_add() local
251 entry = os_zalloc(sizeof(*entry)); in pmksa_cache_add()
252 if (entry == NULL) in pmksa_cache_add()
254 os_memcpy(entry->pmk, pmk, pmk_len); in pmksa_cache_add()
255 entry->pmk_len = pmk_len; in pmksa_cache_add()
257 os_memcpy(entry->kck, kck, kck_len); in pmksa_cache_add()
258 entry->kck_len = kck_len; in pmksa_cache_add()
260 os_memcpy(entry->pmkid, pmkid, PMKID_LEN); in pmksa_cache_add()
262 rsn_pmkid_suite_b_192(kck, kck_len, aa, spa, entry->pmkid); in pmksa_cache_add()
264 rsn_pmkid_suite_b(kck, kck_len, aa, spa, entry->pmkid); in pmksa_cache_add()
266 rsn_pmkid(pmk, pmk_len, aa, spa, entry->pmkid, akmp); in pmksa_cache_add()
273 entry->expiration = now.sec + pmk_lifetime; in pmksa_cache_add()
274 entry->reauth_time = now.sec + in pmksa_cache_add()
276 entry->akmp = akmp; in pmksa_cache_add()
278 entry->fils_cache_id_set = 1; in pmksa_cache_add()
279 os_memcpy(entry->fils_cache_id, cache_id, FILS_CACHE_ID_LEN); in pmksa_cache_add()
281 os_memcpy(entry->aa, aa, ETH_ALEN); in pmksa_cache_add()
282 os_memcpy(entry->spa, spa, ETH_ALEN); in pmksa_cache_add()
283 entry->network_ctx = network_ctx; in pmksa_cache_add()
285 return pmksa_cache_add_entry(pmksa, entry); in pmksa_cache_add()
291 struct rsn_pmksa_cache_entry *entry) in pmksa_cache_add_entry() argument
295 /* Replace an old entry for the same Authenticator (if found) with the in pmksa_cache_add_entry()
296 * new entry */ in pmksa_cache_add_entry()
300 if (ether_addr_equal(entry->aa, pos->aa) && in pmksa_cache_add_entry()
301 ether_addr_equal(entry->spa, pos->spa)) { in pmksa_cache_add_entry()
302 if (pos->pmk_len == entry->pmk_len && in pmksa_cache_add_entry()
303 os_memcmp_const(pos->pmk, entry->pmk, in pmksa_cache_add_entry()
304 entry->pmk_len) == 0 && in pmksa_cache_add_entry()
305 os_memcmp_const(pos->pmkid, entry->pmkid, in pmksa_cache_add_entry()
308 "PMKSA entry"); in pmksa_cache_add_entry()
309 os_free(entry); in pmksa_cache_add_entry()
320 * flushed so that a new entry can be created based on in pmksa_cache_add_entry()
326 wpa_printf(MSG_DEBUG, "RSN: Replace PMKSA entry for " in pmksa_cache_add_entry()
327 "the current AP and any PMKSA cache entry " in pmksa_cache_add_entry()
330 pmksa_cache_flush(pmksa, entry->network_ctx, in pmksa_cache_add_entry()
341 /* Remove the oldest entry to make room for the new entry */ in pmksa_cache_add_entry()
346 * Never remove the current PMKSA cache entry, since in pmksa_cache_add_entry()
357 "PMKSA cache entry (for " MACSTR ") to " in pmksa_cache_add_entry()
364 /* Add the new entry; order by expiration time */ in pmksa_cache_add_entry()
368 if (pos->expiration > entry->expiration) in pmksa_cache_add_entry()
374 entry->next = pmksa->pmksa; in pmksa_cache_add_entry()
375 pmksa->pmksa = entry; in pmksa_cache_add_entry()
378 entry->next = prev->next; in pmksa_cache_add_entry()
379 prev->next = entry; in pmksa_cache_add_entry()
382 wpa_printf(MSG_DEBUG, "RSN: Added PMKSA cache entry for " MACSTR in pmksa_cache_add_entry()
384 MAC2STR(entry->aa), MAC2STR(entry->spa), in pmksa_cache_add_entry()
385 entry->network_ctx, entry->akmp); in pmksa_cache_add_entry()
388 return entry; in pmksa_cache_add_entry()
391 pmksa->notify_cb(entry, pmksa->ctx); in pmksa_cache_add_entry()
393 wpa_sm_add_pmkid(pmksa->sm, entry->network_ctx, entry->aa, entry->pmkid, in pmksa_cache_add_entry()
394 entry->fils_cache_id_set ? entry->fils_cache_id : NULL, in pmksa_cache_add_entry()
395 entry->pmk, entry->pmk_len, in pmksa_cache_add_entry()
398 entry->akmp); in pmksa_cache_add_entry()
400 return entry; in pmksa_cache_add_entry()
416 struct rsn_pmksa_cache_entry *entry, *prev = NULL, *tmp; in pmksa_cache_flush() local
419 entry = pmksa->pmksa; in pmksa_cache_flush()
420 while (entry) { in pmksa_cache_flush()
421 if ((entry->network_ctx == network_ctx || in pmksa_cache_flush()
424 (pmk_len == entry->pmk_len && in pmksa_cache_flush()
425 os_memcmp(pmk, entry->pmk, pmk_len) == 0)) && in pmksa_cache_flush()
426 (!external_only || entry->external)) { in pmksa_cache_flush()
427 wpa_printf(MSG_DEBUG, "RSN: Flush PMKSA cache entry " in pmksa_cache_flush()
428 "for " MACSTR, MAC2STR(entry->aa)); in pmksa_cache_flush()
430 prev->next = entry->next; in pmksa_cache_flush()
432 pmksa->pmksa = entry->next; in pmksa_cache_flush()
433 tmp = entry; in pmksa_cache_flush()
434 entry = entry->next; in pmksa_cache_flush()
438 prev = entry; in pmksa_cache_flush()
439 entry = entry->next; in pmksa_cache_flush()
453 struct rsn_pmksa_cache_entry *entry, *prev; in pmksa_cache_deinit() local
458 entry = pmksa->pmksa; in pmksa_cache_deinit()
460 while (entry) { in pmksa_cache_deinit()
461 prev = entry; in pmksa_cache_deinit()
462 entry = entry->next; in pmksa_cache_deinit()
471 * pmksa_cache_get - Fetch a PMKSA cache entry
477 * Returns: Pointer to PMKSA cache entry or %NULL if no match was found
485 struct rsn_pmksa_cache_entry *entry = pmksa->pmksa; in pmksa_cache_get() local
486 while (entry) { in pmksa_cache_get()
487 if ((aa == NULL || ether_addr_equal(entry->aa, aa)) && in pmksa_cache_get()
488 (!spa || ether_addr_equal(entry->spa, spa)) && in pmksa_cache_get()
490 os_memcmp(entry->pmkid, pmkid, PMKID_LEN) == 0) && in pmksa_cache_get()
491 (!akmp || akmp == entry->akmp) && in pmksa_cache_get()
492 (network_ctx == NULL || network_ctx == entry->network_ctx)) in pmksa_cache_get()
493 return entry; in pmksa_cache_get()
494 entry = entry->next; in pmksa_cache_get()
535 * pmksa_cache_get_opportunistic - Try to get an opportunistic PMKSA entry
540 * Returns: Pointer to a new PMKSA cache entry or %NULL if not available
542 * Try to create a new PMKSA cache entry opportunistically by guessing that the
544 * already an entry in PMKSA cache.
550 struct rsn_pmksa_cache_entry *entry = pmksa->pmksa; in pmksa_cache_get_opportunistic() local
555 while (entry) { in pmksa_cache_get_opportunistic()
556 if (entry->network_ctx == network_ctx && in pmksa_cache_get_opportunistic()
557 (!akmp || entry->akmp == akmp)) { in pmksa_cache_get_opportunistic()
560 if (wpa_key_mgmt_sae(entry->akmp) && in pmksa_cache_get_opportunistic()
562 entry->reauth_time < now.sec) { in pmksa_cache_get_opportunistic()
564 "RSN: Do not clone PMKSA cache entry for " in pmksa_cache_get_opportunistic()
567 MAC2STR(entry->aa)); in pmksa_cache_get_opportunistic()
568 entry = entry->next; in pmksa_cache_get_opportunistic()
572 entry = pmksa_cache_clone_entry(pmksa, entry, aa); in pmksa_cache_get_opportunistic()
573 if (entry) { in pmksa_cache_get_opportunistic()
575 "opportunistic PMKSA cache entry " in pmksa_cache_get_opportunistic()
578 return entry; in pmksa_cache_get_opportunistic()
580 entry = entry->next; in pmksa_cache_get_opportunistic()
590 struct rsn_pmksa_cache_entry *entry; in pmksa_cache_get_fils_cache_id() local
592 for (entry = pmksa->pmksa; entry; entry = entry->next) { in pmksa_cache_get_fils_cache_id()
593 if (network_ctx == entry->network_ctx && in pmksa_cache_get_fils_cache_id()
594 entry->fils_cache_id_set && in pmksa_cache_get_fils_cache_id()
595 os_memcmp(cache_id, entry->fils_cache_id, in pmksa_cache_get_fils_cache_id()
597 return entry; in pmksa_cache_get_fils_cache_id()
605 * pmksa_cache_get_current - Get the current used PMKSA entry
607 * Returns: Pointer to the current PMKSA cache entry or %NULL if not available
618 * pmksa_cache_clear_current - Clear the current PMKSA entry selection
627 "RSN: Clear current PMKSA entry selection"); in pmksa_cache_clear_current()
633 * pmksa_cache_set_current - Set the current PMKSA entry selection
641 * Returns: 0 if PMKSA was found or -1 if no matching entry was found
684 /* Driver-based roaming might have used a PMKSA entry in pmksa_cache_set_current()
696 " using reauth threshold passed PMKSA cache entry", in pmksa_cache_set_current()
700 "RSN: Do not allow PMKSA cache entry for " in pmksa_cache_set_current()
709 wpa_hexdump(MSG_DEBUG, "RSN: PMKSA cache entry found - PMKID", in pmksa_cache_set_current()
713 wpa_printf(MSG_DEBUG, "RSN: No PMKSA cache entry found"); in pmksa_cache_set_current()
732 struct rsn_pmksa_cache_entry *entry; in pmksa_cache_list() local
736 for (entry = pmksa->pmksa; entry; entry = entry->next) { in pmksa_cache_list()
737 if (entry->fils_cache_id_set) { in pmksa_cache_list()
752 entry = pmksa->pmksa; in pmksa_cache_list()
753 while (entry) { in pmksa_cache_list()
756 i, MAC2STR(entry->aa)); in pmksa_cache_list()
760 pos += wpa_snprintf_hex(pos, buf + len - pos, entry->pmkid, in pmksa_cache_list()
763 (int) (entry->expiration - now.sec), in pmksa_cache_list()
764 entry->opportunistic); in pmksa_cache_list()
768 if (entry->fils_cache_id_set) { in pmksa_cache_list()
770 entry->fils_cache_id[0], in pmksa_cache_list()
771 entry->fils_cache_id[1]); in pmksa_cache_list()
780 entry = entry->next; in pmksa_cache_list()
794 * @free_cb: Callback function to be called when a PMKSA cache entry is freed
800 pmksa_cache_init(void (*free_cb)(struct rsn_pmksa_cache_entry *entry, in pmksa_cache_init() argument
802 bool (*is_current_cb)(struct rsn_pmksa_cache_entry *entry, in pmksa_cache_init() argument
804 void (*notify_cb)(struct rsn_pmksa_cache_entry *entry, in pmksa_cache_init() argument
825 struct rsn_pmksa_cache_entry *entry; in pmksa_cache_reconfig() local
832 for (entry = pmksa->pmksa; entry; entry = entry->next) { in pmksa_cache_reconfig()
836 if (entry->expiration - now.sec < 1 || in pmksa_cache_reconfig()
837 entry->reauth_time - now.sec < 1) in pmksa_cache_reconfig()
840 life_time = entry->expiration - now.sec; in pmksa_cache_reconfig()
841 reauth_threshold = (entry->reauth_time - now.sec) * 100 / in pmksa_cache_reconfig()
846 wpa_sm_add_pmkid(pmksa->sm, entry->network_ctx, entry->aa, in pmksa_cache_reconfig()
847 entry->pmkid, in pmksa_cache_reconfig()
848 entry->fils_cache_id_set ? in pmksa_cache_reconfig()
849 entry->fils_cache_id : NULL, in pmksa_cache_reconfig()
850 entry->pmk, entry->pmk_len, life_time, in pmksa_cache_reconfig()
851 reauth_threshold, entry->akmp); in pmksa_cache_reconfig()
858 pmksa_cache_init(void (*free_cb)(struct rsn_pmksa_cache_entry *entry, in pmksa_cache_init() argument
860 bool (*is_current_cb)(struct rsn_pmksa_cache_entry *entry, in pmksa_cache_init() argument
862 void (*notify_cb)(struct rsn_pmksa_cache_entry *entry, in pmksa_cache_init() argument
905 struct rsn_pmksa_cache_entry *entry) in pmksa_cache_add_entry() argument
941 struct rsn_pmksa_cache_entry *entry) in pmksa_cache_remove() argument