FILS: Extend wpa_auth_pmksa_get() to support PMKID matching

This is needed for FILS processing to enable PMKSA caching.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
Jouni Malinen 2015-09-05 00:04:21 +03:00 committed by Jouni Malinen
parent c30bd28b14
commit c1bd4bac5f
4 changed files with 8 additions and 6 deletions

View file

@ -3518,11 +3518,12 @@ void wpa_auth_pmksa_flush(struct wpa_authenticator *wpa_auth)
struct rsn_pmksa_cache_entry * struct rsn_pmksa_cache_entry *
wpa_auth_pmksa_get(struct wpa_authenticator *wpa_auth, const u8 *sta_addr) wpa_auth_pmksa_get(struct wpa_authenticator *wpa_auth, const u8 *sta_addr,
const u8 *pmkid)
{ {
if (!wpa_auth || !wpa_auth->pmksa) if (!wpa_auth || !wpa_auth->pmksa)
return NULL; return NULL;
return pmksa_cache_auth_get(wpa_auth->pmksa, sta_addr, NULL); return pmksa_cache_auth_get(wpa_auth->pmksa, sta_addr, pmkid);
} }

View file

@ -303,7 +303,8 @@ int wpa_auth_pmksa_list(struct wpa_authenticator *wpa_auth, char *buf,
size_t len); size_t len);
void wpa_auth_pmksa_flush(struct wpa_authenticator *wpa_auth); void wpa_auth_pmksa_flush(struct wpa_authenticator *wpa_auth);
struct rsn_pmksa_cache_entry * struct rsn_pmksa_cache_entry *
wpa_auth_pmksa_get(struct wpa_authenticator *wpa_auth, const u8 *sta_addr); wpa_auth_pmksa_get(struct wpa_authenticator *wpa_auth, const u8 *sta_addr,
const u8 *pmkid);
void wpa_auth_pmksa_set_to_sm(struct rsn_pmksa_cache_entry *pmksa, void wpa_auth_pmksa_set_to_sm(struct rsn_pmksa_cache_entry *pmksa,
struct wpa_state_machine *sm, struct wpa_state_machine *sm,
struct wpa_authenticator *wpa_auth, struct wpa_authenticator *wpa_auth,

View file

@ -1135,7 +1135,7 @@ void mesh_mpm_action_rx(struct wpa_supplicant *wpa_s,
*/ */
if (!sta && action_field == PLINK_OPEN && if (!sta && action_field == PLINK_OPEN &&
(!(mconf->security & MESH_CONF_SEC_AMPE) || (!(mconf->security & MESH_CONF_SEC_AMPE) ||
wpa_auth_pmksa_get(hapd->wpa_auth, mgmt->sa))) wpa_auth_pmksa_get(hapd->wpa_auth, mgmt->sa, NULL)))
sta = mesh_mpm_add_peer(wpa_s, mgmt->sa, &elems); sta = mesh_mpm_add_peer(wpa_s, mgmt->sa, &elems);
if (!sta) { if (!sta) {

View file

@ -333,7 +333,7 @@ int mesh_rsn_auth_sae_sta(struct wpa_supplicant *wpa_s,
return -1; return -1;
} }
pmksa = wpa_auth_pmksa_get(hapd->wpa_auth, sta->addr); pmksa = wpa_auth_pmksa_get(hapd->wpa_auth, sta->addr, NULL);
if (pmksa) { if (pmksa) {
if (!sta->wpa_sm) if (!sta->wpa_sm)
sta->wpa_sm = wpa_auth_sta_init(hapd->wpa_auth, sta->wpa_sm = wpa_auth_sta_init(hapd->wpa_auth,
@ -611,7 +611,7 @@ int mesh_rsn_process_ampe(struct wpa_supplicant *wpa_s, struct sta_info *sta,
if (!sta->sae) { if (!sta->sae) {
struct hostapd_data *hapd = wpa_s->ifmsh->bss[0]; struct hostapd_data *hapd = wpa_s->ifmsh->bss[0];
if (!wpa_auth_pmksa_get(hapd->wpa_auth, sta->addr)) { if (!wpa_auth_pmksa_get(hapd->wpa_auth, sta->addr, NULL)) {
wpa_printf(MSG_INFO, wpa_printf(MSG_INFO,
"Mesh RSN: SAE is not prepared yet"); "Mesh RSN: SAE is not prepared yet");
return -1; return -1;