WPA: Add PTKSA cache to wpa_supplicant for PASN
PASN requires to store the PTK derived during PASN authentication so it can later be used for secure LTF etc. This is also true for a PTK derived during regular connection. Add an instance of a PTKSA cache for each wpa_supplicant interface when PASN is enabled in build configuration. Signed-off-by: Ilan Peer <ilan.peer@intel.com>
This commit is contained in:
parent
a4e3691616
commit
d70060f966
11 changed files with 59 additions and 2 deletions
|
@ -949,6 +949,9 @@ static int wpa_supplicant_install_ptk(struct wpa_sm *sm,
|
|||
return -1;
|
||||
}
|
||||
|
||||
wpa_sm_store_ptk(sm, sm->bssid, sm->pairwise_cipher,
|
||||
sm->dot11RSNAConfigPMKLifetime, &sm->ptk);
|
||||
|
||||
/* TK is not needed anymore in supplicant */
|
||||
os_memset(sm->ptk.tk, 0, WPA_TK_MAX_LEN);
|
||||
sm->ptk.tk_len = 0;
|
||||
|
@ -4916,6 +4919,9 @@ int fils_process_assoc_resp(struct wpa_sm *sm, const u8 *resp, size_t len)
|
|||
goto fail;
|
||||
}
|
||||
|
||||
wpa_sm_store_ptk(sm, sm->bssid, sm->pairwise_cipher,
|
||||
sm->dot11RSNAConfigPMKLifetime, &sm->ptk);
|
||||
|
||||
/* TODO: TK could be cleared after auth frame exchange now that driver
|
||||
* takes care of association frame encryption/decryption. */
|
||||
/* TK is not needed anymore in supplicant */
|
||||
|
|
|
@ -87,6 +87,8 @@ struct wpa_sm_ctx {
|
|||
const u8 *pkt, size_t pkt_len);
|
||||
int (*channel_info)(void *ctx, struct wpa_channel_info *ci);
|
||||
void (*transition_disable)(void *ctx, u8 bitmap);
|
||||
void (*store_ptk)(void *ctx, u8 *addr, int cipher,
|
||||
u32 life_time, const struct wpa_ptk *ptk);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -449,6 +449,8 @@ static int wpa_ft_install_ptk(struct wpa_sm *sm, const u8 *bssid)
|
|||
return -1;
|
||||
}
|
||||
|
||||
wpa_sm_store_ptk(sm, sm->bssid, sm->pairwise_cipher,
|
||||
sm->dot11RSNAConfigPMKLifetime, &sm->ptk);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -447,6 +447,14 @@ static inline void wpa_sm_transition_disable(struct wpa_sm *sm, u8 bitmap)
|
|||
sm->ctx->transition_disable(sm->ctx->ctx, bitmap);
|
||||
}
|
||||
|
||||
static inline void wpa_sm_store_ptk(struct wpa_sm *sm,
|
||||
u8 *addr, int cipher,
|
||||
u32 life_time, struct wpa_ptk *ptk)
|
||||
{
|
||||
if (sm->ctx->store_ptk)
|
||||
sm->ctx->store_ptk(sm->ctx->ctx, addr, cipher, life_time,
|
||||
ptk);
|
||||
}
|
||||
|
||||
int wpa_eapol_key_send(struct wpa_sm *sm, struct wpa_ptk *ptk,
|
||||
int ver, const u8 *dest, u16 proto,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue