ft: netdev: store FT-over-DS target RSNE/WPA

Keep track of the target BSS's authenticator IE for verification.
It should not be assumed that the target BSS and original RSNE/WPA
IE matches.
This commit is contained in:
James Prestwood 2021-09-28 14:27:39 -07:00 committed by Denis Kenzior
parent d0b0004c8c
commit ae358bd524
3 changed files with 9 additions and 1 deletions

View File

@ -616,6 +616,9 @@ void ft_ds_info_free(struct ft_ds_info *info)
if (info->fte)
l_free(info->fte);
if (info->authenticator_ie)
l_free(info->authenticator_ie);
if (destroy)
destroy(info);
}

View File

@ -36,6 +36,7 @@ struct ft_ds_info {
uint8_t snonce[32];
uint8_t mde[3];
uint8_t *fte;
uint8_t *authenticator_ie;
struct ie_ft_info ft_info;

View File

@ -4392,6 +4392,11 @@ int netdev_fast_transition_over_ds_action(struct netdev *netdev,
memcpy(info->super.spa, hs->spa, ETH_ALEN);
memcpy(info->super.aa, target_bss->addr, ETH_ALEN);
memcpy(info->super.mde, target_bss->mde, sizeof(info->super.mde));
if (target_bss->rsne)
info->super.authenticator_ie = l_memdup(target_bss->rsne,
target_bss->rsne[1] + 2);
l_getrandom(info->super.snonce, 32);
info->super.free = netdev_ft_ds_info_free;
@ -4403,7 +4408,6 @@ int netdev_fast_transition_over_ds_action(struct netdev *netdev,
iovs[0].iov_base = ft_req;
iovs[0].iov_len = sizeof(ft_req);
if (!ft_build_authenticate_ies(hs, false, info->super.snonce,
buf, &len))
goto failed;