diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 7a12c66dced2..45b2b495ba20 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -974,6 +974,11 @@ CDF_STATUS csr_roam_copy_connect_profile(tpAniSirGlobal pMac, pProfile->eseCckmInfo.krk_plumbed = connected_prof->eseCckmInfo.krk_plumbed; } +#endif +#ifdef WLAN_FEATURE_11W + pProfile->MFPEnabled = connected_prof->MFPEnabled; + pProfile->MFPRequired = connected_prof->MFPRequired; + pProfile->MFPCapable = connected_prof->MFPCapable; #endif } return status; @@ -6932,6 +6937,11 @@ CDF_STATUS csr_roam_copy_connected_profile(tpAniSirGlobal pMac, pSrcProfile->MDID.mobilityDomain; } #endif +#ifdef WLAN_FEATURE_11W + pDstProfile->MFPEnabled = pSrcProfile->MFPEnabled; + pDstProfile->MFPRequired = pSrcProfile->MFPRequired; + pDstProfile->MFPCapable = pSrcProfile->MFPCapable; +#endif end: if (!CDF_IS_STATUS_SUCCESS(status)) { @@ -13261,6 +13271,11 @@ csr_roam_remove_connected_bss_from_scan_cache(tpAniSirGlobal pMac, pScanFilter->bOSENAssociation = false; pScanFilter->countryCode[0] = 0; pScanFilter->phyMode = eCSR_DOT11_MODE_AUTO; +#ifdef WLAN_FEATURE_11W + pScanFilter->MFPEnabled = pConnProfile->MFPEnabled; + pScanFilter->MFPRequired = pConnProfile->MFPRequired; + pScanFilter->MFPCapable = pConnProfile->MFPCapable; +#endif csr_ll_lock(&pMac->scan.scanResultList); pEntry = csr_ll_peek_head(&pMac->scan.scanResultList, LL_ACCESS_NOLOCK); while (pEntry) { diff --git a/core/sme/src/csr/csr_neighbor_roam.c b/core/sme/src/csr/csr_neighbor_roam.c index 7e36d27a1ae8..13a9bc8b89e1 100644 --- a/core/sme/src/csr/csr_neighbor_roam.c +++ b/core/sme/src/csr/csr_neighbor_roam.c @@ -2056,20 +2056,28 @@ bool csr_neighbor_roam_is_ssid_and_security_match(tpAniSirGlobal pMac, pIes->SSID.ssid, pIes->SSID.num_ssid, true); if (true == fMatch) { +#ifdef WLAN_FEATURE_11W /* - * for now we are sending NULL for all PMF related filter - * parameters during roam to the neighbor AP because - * so far 80211W spec doesn't specify anything about - * roaming scenario. + * We are sending current connected APs profile setting + * if other AP doesn't have the same PMF setting as currently + * connected AP then we will have some issues in roaming. * - * Once roaming scenario is defined, we should re-visit - * this section and remove this comment. + * Make sure all the APs have same PMF settings to avoid + * any corner cases. */ + fMatch = csr_is_security_match(pMac, &authType, + &uCEncryptionType, &mCEncryptionType, + &pCurProfile->MFPEnabled, + &pCurProfile->MFPRequired, + &pCurProfile->MFPCapable, + pBssDesc, pIes, NULL, NULL, NULL); +#else fMatch = csr_is_security_match(pMac, &authType, &uCEncryptionType, &mCEncryptionType, NULL, NULL, NULL, pBssDesc, pIes, NULL, NULL, NULL); +#endif return fMatch; } else { return fMatch; diff --git a/core/sme/src/csr/csr_util.c b/core/sme/src/csr/csr_util.c index 59d7662ef06a..5c0670414a10 100644 --- a/core/sme/src/csr/csr_util.c +++ b/core/sme/src/csr/csr_util.c @@ -4867,9 +4867,18 @@ bool csr_match_connected_bss_security(tpAniSirGlobal pMac, authList.numEntries = 1; authList.authType[0] = pProfile->AuthType; +#ifdef WLAN_FEATURE_11W + return csr_is_security_match(pMac, &authList, &ucEncryptionList, + &mcEncryptionList, + &pProfile->MFPEnabled, + &pProfile->MFPRequired, + &pProfile->MFPCapable, + pBssDesc, pIes, NULL, NULL, NULL); +#else return csr_is_security_match(pMac, &authList, &ucEncryptionList, &mcEncryptionList, NULL, NULL, NULL, pBssDesc, pIes, NULL, NULL, NULL); +#endif }