diff --git a/umac/cmn_services/crypto/inc/wlan_crypto_global_api.h b/umac/cmn_services/crypto/inc/wlan_crypto_global_api.h index 49251a52c4b2..4f1eaf957603 100644 --- a/umac/cmn_services/crypto/inc/wlan_crypto_global_api.h +++ b/umac/cmn_services/crypto/inc/wlan_crypto_global_api.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved. + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -1068,7 +1069,7 @@ wlan_crypto_selective_clear_sae_single_pmk_entries( struct wlan_objmgr_vdev *vdev, struct qdf_mac_addr *conn_bssid); /** - * wlan_crypto_set_sae_single_pmk_bss_cap - Set the peer SAE sinlge pmk + * wlan_crypto_set_sae_single_pmk_bss_cap - Set the peer SAE single pmk * feature supported status * @vdev: Vdev * @bssid: BSSID for which the flag is to be set @@ -1078,6 +1079,16 @@ wlan_crypto_selective_clear_sae_single_pmk_entries( void wlan_crypto_set_sae_single_pmk_bss_cap(struct wlan_objmgr_vdev *vdev, struct qdf_mac_addr *bssid, bool single_pmk_capable_bss); + +/** + * wlan_crypto_set_sae_single_pmk_info - Set the peer SAE single pmk info + * @vdev: Vdev + * @roam_sync_pmksa: pmk info for roamed AP + */ +void +wlan_crypto_set_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev, + struct wlan_crypto_pmksa *roam_sync_pmksa); + #else static inline void wlan_crypto_selective_clear_sae_single_pmk_entries( @@ -1091,6 +1102,12 @@ void wlan_crypto_set_sae_single_pmk_bss_cap(struct wlan_objmgr_vdev *vdev, bool single_pmk_capable_bss) { } + +static inline void +wlan_crypto_set_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev, + struct wlan_crypto_pmksa *roam_sync_pmksa) +{ +} #endif #ifdef WLAN_FEATURE_FILS_SK diff --git a/umac/cmn_services/crypto/src/wlan_crypto_global_api.c b/umac/cmn_services/crypto/src/wlan_crypto_global_api.c index 72649ff046a2..6b496baa3dbf 100644 --- a/umac/cmn_services/crypto/src/wlan_crypto_global_api.c +++ b/umac/cmn_services/crypto/src/wlan_crypto_global_api.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved. + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -4675,6 +4676,42 @@ void wlan_crypto_set_sae_single_pmk_bss_cap(struct wlan_objmgr_vdev *vdev, single_pmk_capable_bss; } } + +void +wlan_crypto_set_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev, + struct wlan_crypto_pmksa *roam_sync_pmksa) +{ + struct wlan_crypto_params *crypto_params; + struct wlan_crypto_comp_priv *crypto_priv; + int i; + + crypto_priv = (struct wlan_crypto_comp_priv *) + wlan_get_vdev_crypto_obj(vdev); + + if (!crypto_priv) { + crypto_err("crypto_priv NULL"); + return; + } + + crypto_params = &crypto_priv->crypto_params; + + for (i = 0; i < WLAN_CRYPTO_MAX_PMKID; i++) { + if (!crypto_params->pmksa[i]) + continue; + if (qdf_is_macaddr_equal(&roam_sync_pmksa->bssid, + &crypto_params->pmksa[i]->bssid) && + roam_sync_pmksa->single_pmk_supported && + roam_sync_pmksa->pmk_len) { + crypto_params->pmksa[i]->single_pmk_supported = + roam_sync_pmksa->single_pmk_supported; + crypto_params->pmksa[i]->pmk_len = + roam_sync_pmksa->pmk_len; + qdf_mem_copy(crypto_params->pmksa[i]->pmk, + roam_sync_pmksa->pmk, + roam_sync_pmksa->pmk_len); + } + } +} #endif void wlan_crypto_reset_vdev_params(struct wlan_objmgr_vdev *vdev)