qcacld-3.0: Use ML BSS peer MLD address for PMKSA operation

If PMKID present in AP expires, AP rejects the PMKID based association.
Current design is to clear the cache using BSSID/MAC address of link
in such cases to let a fresh SAE authentication to happen.
But host driver stores PMKSA with MLD address for ML BSS.
Adapt to the same and update PMKSA cache clear APIs to use
MLD address instead of link address.

Use the API which gives ML BSS peer's MLD address for
MLO VDEV or else legacy address for non MLO VDEV to remove
the correct entry in PMKSA cache based on association.

Change-Id: I4af9814e377737eef4a54fdf15db9f6bac38d954
CRs-Fixed: 3433723
This commit is contained in:
Vinod Kumar Pirla
2023-04-03 03:44:29 -07:00
committed by Madan Koyyalamudi
父節點 29d20cf6b4
當前提交 c72b4146c6
共有 4 個文件被更改,包括 34 次插入12 次删除

查看文件

@@ -437,6 +437,17 @@ cm_fill_bssid_freq_info(uint8_t vdev_id,
uint8_t i;
struct ml_setup_link_param *ml_link;
/* The @bssid field in roam synch indication will
* contain MLD address in case of roaming to ML
* candidate or else legacy MAC address for non-ML
* roaming.
*/
if (is_multi_link_roam(roam_synch_data))
qdf_copy_macaddr(&rsp->connect_rsp.mld_addr,
&roam_synch_data->bssid);
else
qdf_zero_macaddr(&rsp->connect_rsp.mld_addr);
for (i = 0; i < roam_synch_data->num_setup_links; i++) {
ml_link = &roam_synch_data->ml_link[i];
if (vdev_id == ml_link->vdev_id) {
@@ -695,7 +706,7 @@ static QDF_STATUS cm_process_roam_keys(struct wlan_objmgr_vdev *vdev,
CM_PREFIX_REF(vdev_id, cm_id));
goto end;
}
wlan_vdev_get_bss_peer_mac(vdev, &pmkid_cache->bssid);
wlan_vdev_get_bss_peer_mac_for_pmksa(vdev, &pmkid_cache->bssid);
mlme_debug(CM_PREFIX_FMT "Trying to find PMKID for "
QDF_MAC_ADDR_FMT " AKM Type:%d",
CM_PREFIX_REF(vdev_id, cm_id),
@@ -767,7 +778,8 @@ static QDF_STATUS cm_process_roam_keys(struct wlan_objmgr_vdev *vdev,
* This pmksa buffer is to update the
* crypto table
*/
wlan_vdev_get_bss_peer_mac(vdev, &pmksa->bssid);
wlan_vdev_get_bss_peer_mac_for_pmksa(vdev,
&pmksa->bssid);
qdf_mem_copy(pmksa->pmkid,
roaming_info->pmkid, PMKID_LEN);
qdf_mem_copy(pmksa->pmk, roaming_info->pmk,
@@ -830,8 +842,8 @@ static QDF_STATUS cm_process_roam_keys(struct wlan_objmgr_vdev *vdev,
wlan_cm_set_psk_pmk(pdev, vdev_id,
roaming_info->pmk,
roaming_info->pmk_len);
wlan_vdev_get_bss_peer_mac(vdev,
&pmksa->bssid);
wlan_vdev_get_bss_peer_mac_for_pmksa(vdev,
&pmksa->bssid);
qdf_mem_copy(pmksa->pmkid,
roaming_info->pmkid, PMKID_LEN);
qdf_mem_copy(pmksa->pmk,

查看文件

@@ -5137,7 +5137,7 @@ void cm_update_pmk_cache_ft(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
* the newly added entry to avoid multiple PMK cache entries for the
* same MDID.
*/
wlan_vdev_get_bss_peer_mac(vdev, &pmksa.bssid);
wlan_vdev_get_bss_peer_mac_for_pmksa(vdev, &pmksa.bssid);
wlan_vdev_mlme_get_ssid(vdev, pmksa.ssid, &pmksa.ssid_len);
wlan_cm_roam_cfg_get_value(psoc, vdev_id, MOBILITY_DOMAIN, &src_cfg);
@@ -5250,7 +5250,7 @@ cm_store_sae_single_pmk_to_global_cache(struct wlan_objmgr_psoc *psoc,
/*
* Mark the AP as single PMK capable in Crypto Table
*/
wlan_vdev_get_bss_peer_mac(vdev, &bssid);
wlan_vdev_get_bss_peer_mac_for_pmksa(vdev, &bssid);
wlan_crypto_set_sae_single_pmk_bss_cap(vdev, &bssid, true);
pmk_info = qdf_mem_malloc(sizeof(*pmk_info));
@@ -5297,7 +5297,7 @@ void cm_check_and_set_sae_single_pmk_cap(struct wlan_objmgr_psoc *psoc,
mlme_err("get vdev failed");
return;
}
status = wlan_vdev_get_bss_peer_mac(vdev, &bssid);
status = wlan_vdev_get_bss_peer_mac_for_pmksa(vdev, &bssid);
if (QDF_IS_STATUS_ERROR(status)) {
mlme_err("Failed to find connected bssid");
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);