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:

committed by
Madan Koyyalamudi

父節點
29d20cf6b4
當前提交
c72b4146c6
@@ -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);
|
||||
|
Reference in New Issue
Block a user