@ -2278,9 +2278,17 @@ static int wpa_derive_ptk(struct wpa_state_machine *sm, const u8 *snonce,
struct wpa_ptk * ptk , int force_sha256 )
{
const u8 * z = NULL ;
size_t z_len = 0 ;
size_t z_len = 0 , kdk_len ;
int akmp ;
if ( sm - > wpa_auth - > conf . force_kdk_derivation | |
( sm - > wpa_auth - > conf . secure_ltf & &
sm - > rsnxe & & sm - > rsnxe_len > = 4 & &
sm - > rsnxe [ 3 ] & BIT ( WLAN_RSNX_CAPAB_SECURE_LTF - 8 ) ) )
kdk_len = WPA_KDK_MAX_LEN ;
else
kdk_len = 0 ;
# ifdef CONFIG_IEEE80211R_AP
if ( wpa_key_mgmt_ft ( sm - > wpa_key_mgmt ) ) {
if ( sm - > ft_completed ) {
@ -2293,8 +2301,7 @@ static int wpa_derive_ptk(struct wpa_state_machine *sm, const u8 *snonce,
ptk , ptk_name ,
sm - > wpa_key_mgmt ,
sm - > pairwise ,
sm - > wpa_auth - > conf . kdk ?
WPA_KDK_MAX_LEN : 0 ) ;
kdk_len ) ;
}
return wpa_auth_derive_ptk_ft ( sm , ptk ) ;
}
@ -2312,8 +2319,7 @@ static int wpa_derive_ptk(struct wpa_state_machine *sm, const u8 *snonce,
akmp | = WPA_KEY_MGMT_PSK_SHA256 ;
return wpa_pmk_to_ptk ( pmk , pmk_len , " Pairwise key expansion " ,
sm - > wpa_auth - > addr , sm - > addr , sm - > ANonce , snonce ,
ptk , akmp , sm - > pairwise , z , z_len ,
sm - > wpa_auth - > conf . kdk ? WPA_KDK_MAX_LEN : 0 ) ;
ptk , akmp , sm - > pairwise , z , z_len , kdk_len ) ;
}
@ -2328,14 +2334,21 @@ int fils_auth_pmk_to_ptk(struct wpa_state_machine *sm, const u8 *pmk,
size_t ick_len ;
int res ;
u8 fils_ft [ FILS_FT_MAX_LEN ] ;
size_t fils_ft_len = 0 ;
size_t fils_ft_len = 0 , kdk_len ;
if ( sm - > wpa_auth - > conf . force_kdk_derivation | |
( sm - > wpa_auth - > conf . secure_ltf & &
sm - > rsnxe & & sm - > rsnxe_len > = 4 & &
sm - > rsnxe [ 3 ] & BIT ( WLAN_RSNX_CAPAB_SECURE_LTF - 8 ) ) )
kdk_len = WPA_KDK_MAX_LEN ;
else
kdk_len = 0 ;
res = fils_pmk_to_ptk ( pmk , pmk_len , sm - > addr , sm - > wpa_auth - > addr ,
snonce , anonce , dhss , dhss_len ,
& sm - > PTK , ick , & ick_len ,
sm - > wpa_key_mgmt , sm - > pairwise ,
fils_ft , & fils_ft_len ,
sm - > wpa_auth - > conf . kdk ? WPA_KDK_MAX_LEN : 0 ) ;
fils_ft , & fils_ft_len , kdk_len ) ;
if ( res < 0 )
return res ;
sm - > PTK_valid = true ;