static void pmksa_cache_free_entry(struct rsn_pmksa_cache *pmksa, struct rsn_pmksa_cache_entry *entry, int replace) { pmksa->pmksa_count--; pmksa->free_cb(entry, pmksa->ctx, replace); _pmksa_cache_free_entry(entry); }
static void pmksa_cache_free_entry(struct rsn_pmksa_cache *pmksa, struct rsn_pmksa_cache_entry *entry, enum pmksa_free_reason reason) { wpa_sm_remove_pmkid(pmksa->sm, entry->aa, entry->pmkid); pmksa->pmksa_count--; pmksa->free_cb(entry, pmksa->ctx, reason); _pmksa_cache_free_entry(entry); }
/** * pmksa_cache_auth_deinit - Free all entries in PMKSA cache * @pmksa: Pointer to PMKSA cache data from pmksa_cache_auth_init() */ void pmksa_cache_auth_deinit(struct rsn_pmksa_cache *pmksa) { struct rsn_pmksa_cache_entry *entry, *prev; int i; if (pmksa == NULL) return; entry = pmksa->pmksa; while (entry) { prev = entry; entry = entry->next; _pmksa_cache_free_entry(prev); } eloop_cancel_timeout(pmksa_cache_expire, pmksa, NULL); for (i = 0; i < PMKID_HASH_SIZE; i++) pmksa->pmkid[i] = NULL; os_free(pmksa); }
void pmksa_cache_free_entry(struct rsn_pmksa_cache *pmksa, struct rsn_pmksa_cache_entry *entry) { struct rsn_pmksa_cache_entry *pos, *prev; unsigned int hash; pmksa->pmksa_count--; pmksa->free_cb(entry, pmksa->ctx); /* unlink from hash list */ hash = PMKID_HASH(entry->pmkid); pos = pmksa->pmkid[hash]; prev = NULL; while (pos) { if (pos == entry) { if (prev != NULL) prev->hnext = entry->hnext; else pmksa->pmkid[hash] = entry->hnext; break; } prev = pos; pos = pos->hnext; } /* unlink from entry list */ pos = pmksa->pmksa; prev = NULL; while (pos) { if (pos == entry) { if (prev != NULL) prev->next = entry->next; else pmksa->pmksa = entry->next; break; } prev = pos; pos = pos->next; } _pmksa_cache_free_entry(entry); }
void pmksa_cache_free_entry(struct rsn_pmksa_cache *pmksa, struct rsn_pmksa_cache_entry *entry) { struct rsn_pmksa_cache_entry *pos, *prev; pmksa->pmksa_count--; pmksa->free_cb(entry, pmksa->ctx); pos = pmksa->pmkid[PMKID_HASH(entry->pmkid)]; prev = NULL; while (pos) { if (pos == entry) { if (prev != NULL) { prev->hnext = pos->hnext; } else { pmksa->pmkid[PMKID_HASH(entry->pmkid)] = pos->hnext; } break; } prev = pos; pos = pos->hnext; } pos = pmksa->pmksa; prev = NULL; while (pos) { if (pos == entry) { if (prev != NULL) prev->next = pos->next; else pmksa->pmksa = pos->next; break; } prev = pos; pos = pos->next; } _pmksa_cache_free_entry(entry); }