qcacld-3.0: Use self PMF cap only if AP support PMF

In case AP doesn't support PMF, if STA has PMF enabled bit set
in assoc req, some AP may reject the association.

Fix is to consider self PMF cap only if AP support PMF

Change-Id: I6317c653cb7c21beb852d73b8eb541d6582a3a26
CRs-Fixed: 2677988
Dieser Commit ist enthalten in:
Utkarsh Bhatnagar
2020-05-05 13:20:31 +05:30
committet von nshrivas
Ursprung 16fc83d781
Commit 3997382aba

Datei anzeigen

@@ -2812,9 +2812,22 @@ uint8_t csr_construct_rsn_ie(struct mac_context *mac, uint32_t sessionId,
uint8_t *rsn_ie_end = NULL;
uint8_t *rsn_ie = (uint8_t *)pRSNIe;
uint8_t ie_len = 0;
tDot11fBeaconIEs *local_ap_ie = ap_ie;
uint16_t rsn_cap = 0, self_rsn_cap;
struct wlan_crypto_pmksa pmksa, *pmksa_peer;
struct csr_roam_session *session = &mac->roam.roamSession[sessionId];
if (!local_ap_ie &&
(!QDF_IS_STATUS_SUCCESS(csr_get_parsed_bss_description_ies
(mac, pSirBssDesc, &local_ap_ie))))
return ie_len;
/* get AP RSN cap */
qdf_mem_copy(&rsn_cap, local_ap_ie->RSN.RSN_Cap, sizeof(rsn_cap));
if (!ap_ie && local_ap_ie)
/* locally allocated */
qdf_mem_free(local_ap_ie);
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac->psoc, sessionId,
WLAN_LEGACY_SME_ID);
if (!vdev) {
@@ -2822,6 +2835,20 @@ uint8_t csr_construct_rsn_ie(struct mac_context *mac, uint32_t sessionId,
return ie_len;
}
self_rsn_cap = (uint16_t)wlan_crypto_get_param(vdev,
WLAN_CRYPTO_PARAM_RSN_CAP);
/* If AP is capable then use self capability else set PMF as 0 */
if (rsn_cap & WLAN_CRYPTO_RSN_CAP_MFP_ENABLED &&
pProfile->MFPCapable) {
self_rsn_cap |= WLAN_CRYPTO_RSN_CAP_MFP_ENABLED;
if (pProfile->MFPRequired)
self_rsn_cap |= WLAN_CRYPTO_RSN_CAP_MFP_REQUIRED;
} else {
self_rsn_cap &= ~WLAN_CRYPTO_RSN_CAP_MFP_ENABLED;
self_rsn_cap &= ~WLAN_CRYPTO_RSN_CAP_MFP_REQUIRED;
}
wlan_crypto_set_vdev_param(vdev, WLAN_CRYPTO_PARAM_RSN_CAP,
self_rsn_cap);
qdf_mem_zero(&pmksa, sizeof(pmksa));
if (pSirBssDesc->fils_info_element.is_cache_id_present) {
pmksa.ssid_len =