|
@@ -21600,6 +21600,7 @@ static QDF_STATUS csr_process_roam_sync_callback(struct mac_context *mac_ctx,
|
|
|
struct mlme_roam_after_data_stall *vdev_roam_params;
|
|
|
bool abort_host_scan_cap = false;
|
|
|
wlan_scan_id scan_id;
|
|
|
+ struct wlan_crypto_pmksa *pmksa;
|
|
|
|
|
|
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac_ctx->psoc, session_id,
|
|
|
WLAN_LEGACY_SME_ID);
|
|
@@ -21882,6 +21883,35 @@ static QDF_STATUS csr_process_roam_sync_callback(struct mac_context *mac_ctx,
|
|
|
} else {
|
|
|
sme_debug("PMKID Not found in cache for " QDF_MAC_ADDR_STR,
|
|
|
QDF_MAC_ADDR_ARRAY(pmkid_cache->BSSID.bytes));
|
|
|
+ if (roam_synch_data->pmk_len) {
|
|
|
+ pmksa = qdf_mem_malloc(sizeof(*pmksa));
|
|
|
+ if (!pmksa) {
|
|
|
+ status = QDF_STATUS_E_NOMEM;
|
|
|
+ goto end;
|
|
|
+ }
|
|
|
+
|
|
|
+ session->pmk_len = roam_synch_data->pmk_len;
|
|
|
+ qdf_mem_zero(session->psk_pmk,
|
|
|
+ sizeof(session->psk_pmk));
|
|
|
+ qdf_mem_copy(session->psk_pmk,
|
|
|
+ roam_synch_data->pmk,
|
|
|
+ session->pmk_len);
|
|
|
+
|
|
|
+ qdf_copy_macaddr(&pmksa->bssid,
|
|
|
+ &session->
|
|
|
+ connectedProfile.bssid);
|
|
|
+ qdf_mem_copy(pmksa->pmkid,
|
|
|
+ roam_synch_data->pmkid, PMKID_LEN);
|
|
|
+ qdf_mem_copy(pmksa->pmk, roam_synch_data->pmk,
|
|
|
+ roam_synch_data->pmk_len);
|
|
|
+ pmksa->pmk_len = roam_synch_data->pmk_len;
|
|
|
+
|
|
|
+ if (wlan_crypto_set_del_pmksa(vdev, pmksa, true)
|
|
|
+ != QDF_STATUS_SUCCESS) {
|
|
|
+ qdf_mem_zero(pmksa, sizeof(*pmksa));
|
|
|
+ qdf_mem_free(pmksa);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
qdf_mem_zero(pmkid_cache, sizeof(pmkid_cache));
|
|
|
qdf_mem_free(pmkid_cache);
|