diff options
| author | Rajasekaran Kalidoss <rkalidos@codeaurora.org> | 2017-06-09 15:13:07 +0530 |
|---|---|---|
| committer | snandini <snandini@codeaurora.org> | 2017-06-21 04:20:18 -0700 |
| commit | e90594c883fa90f76d36dcd91a00b4cf1ae937c4 (patch) | |
| tree | 807884236f1bd4c6ad42500ca511bb173daf7b6c | |
| parent | 50d1da1875ed700f0423f6b60f190e6a8407b0fb (diff) | |
qcacld-2.0: Support for PMKSA caching
Add support for PMK and PMKID cache based on either bssid or
ssid + cache identifier.
CRs-Fixed: 2033938
Change-Id: Ic29b9dc3ad0c6c3d56af297494bc746d78e838d5
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 135 | ||||
| -rw-r--r-- | CORE/SME/inc/csrApi.h | 6 | ||||
| -rw-r--r-- | CORE/SME/inc/sme_Api.h | 2 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrApiRoam.c | 84 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrInsideApi.h | 2 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrUtil.c | 115 | ||||
| -rw-r--r-- | CORE/SME/src/sme_common/sme_Api.c | 4 |
7 files changed, 278 insertions, 70 deletions
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index b2fa465be3bb..6624176e7b81 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -25980,6 +25980,99 @@ static int wlan_hdd_cfg80211_add_station(struct wiphy *wiphy, return ret; } +#ifdef CFG80211_FILS_SK_OFFLOAD_SUPPORT +/* + * wlan_hdd_is_pmksa_valid: API to validate pmksa + * @pmksa: pointer to cfg80211_pmksa structure + * + * Return: True if valid else false + */ +static inline bool wlan_hdd_is_pmksa_valid(struct cfg80211_pmksa *pmksa) +{ + if (pmksa->bssid || (pmksa->ssid && pmksa->cache_id) ){ + return true; + } + else + { + hddLog(LOGE, FL(" Either of bssid (%p) ssid (%p) or cache_id (%p) are NULL"), + pmksa->bssid, pmksa->ssid, pmksa->cache_id); + return false; + } +} + +/* + * hdd_update_pmksa_info: API to update tPmkidCacheInfo from cfg80211_pmksa + * @pmk_cache: pmksa from supplicant + * @pmk_cache: pmk needs to be updated + * + * Return: None + */ +static void hdd_update_pmksa_info(tPmkidCacheInfo *pmk_cache, + struct cfg80211_pmksa *pmksa, bool is_delete) +{ + if (pmksa->bssid) { + hddLog(VOS_TRACE_LEVEL_DEBUG,"set PMKSA for " MAC_ADDRESS_STR, + MAC_ADDR_ARRAY(pmksa->bssid)); + vos_mem_copy(pmk_cache->BSSID, + pmksa->bssid, VOS_MAC_ADDR_SIZE); + } else { + vos_mem_copy(pmk_cache->ssid, pmksa->ssid, + SIR_MAC_MAX_SSID_LENGTH); + vos_mem_copy(pmk_cache->cache_id, pmksa->cache_id, CACHE_ID_LEN); + pmk_cache->ssid_len = pmksa->ssid_len; + hddLog(VOS_TRACE_LEVEL_INFO, "set PMKSA for ssid %*.*s cache_id %x %x", + pmk_cache->ssid_len, pmk_cache->ssid_len, + pmksa->ssid, pmksa->cache_id[0], pmksa->cache_id[1]); + } + + if (is_delete) + return; + + vos_mem_copy(pmk_cache->PMKID, pmksa->pmkid, CSR_RSN_PMKID_SIZE); + if (pmksa->pmk_len && (pmksa->pmk_len <= CSR_RSN_MAX_PMK_LEN)) { + vos_mem_copy(pmk_cache->pmk, pmksa->pmk, pmksa->pmk_len); + pmk_cache->pmk_len = pmksa->pmk_len; + } else + hddLog(VOS_TRACE_LEVEL_INFO, "pmk len is %zu", pmksa->pmk_len); +} +#else +/* + * wlan_hdd_is_pmksa_valid: API to validate pmksa + * @pmksa: pointer to cfg80211_pmksa structure + * + * Return: True if valid else false + */ +static inline bool wlan_hdd_is_pmksa_valid(struct cfg80211_pmksa *pmksa) +{ + if (!pmksa->bssid) { + hddLog(LOGE,FL("both bssid is NULL %p"), pmksa->bssid); + return false; + } + return true; +} + +/* + * hdd_update_pmksa_info: API to update tPmkidCacheInfo from cfg80211_pmksa + * @pmk_cache: pmksa from supplicant + * @pmk_cache: pmk needs to be updated + * + * Return: None + */ +static void hdd_update_pmksa_info(tPmkidCacheInfo *pmk_cache, + struct cfg80211_pmksa *pmksa, bool is_delete) +{ + hddLog(VOS_TRACE_LEVEL_INFO,"set PMKSA for " MAC_ADDRESS_STR, + MAC_ADDR_ARRAY(pmksa->bssid)); + vos_mem_copy(pmk_cache->BSSID, + pmksa->bssid, VOS_MAC_ADDR_SIZE); + + if (is_delete) + return; + + vos_mem_copy(pmk_cache->PMKID, pmksa->pmkid, CSR_RSN_PMKID_SIZE); +} +#endif + #ifdef FEATURE_WLAN_LFR static int __wlan_hdd_cfg80211_set_pmksa(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_pmksa *pmksa) @@ -25989,7 +26082,7 @@ static int __wlan_hdd_cfg80211_set_pmksa(struct wiphy *wiphy, struct net_device tHalHandle halHandle; eHalStatus result = eHAL_STATUS_SUCCESS; int status; - tPmkidCacheInfo pmk_id; + tPmkidCacheInfo pmk_cache; ENTER(); @@ -26003,14 +26096,14 @@ static int __wlan_hdd_cfg80211_set_pmksa(struct wiphy *wiphy, struct net_device return -EINVAL; } - if (!pmksa->bssid || !pmksa->pmkid) { - hddLog(LOGE, FL("pmksa->bssid(%p) or pmksa->pmkid(%p) is NULL"), - pmksa->bssid, pmksa->pmkid); + if (!pmksa->pmkid) { + hddLog(LOGE, FL("pmksa->pmkid(%p) is NULL"), + pmksa->pmkid); return -EINVAL; } - hddLog(VOS_TRACE_LEVEL_DEBUG, FL("set PMKSA for "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(pmksa->bssid)); + if (!wlan_hdd_is_pmksa_valid(pmksa)) + return -EINVAL; status = wlan_hdd_validate_context(pHddCtx); if (0 != status) @@ -26018,12 +26111,18 @@ static int __wlan_hdd_cfg80211_set_pmksa(struct wiphy *wiphy, struct net_device halHandle = WLAN_HDD_GET_HAL_CTX(pAdapter); - vos_mem_copy(pmk_id.BSSID, pmksa->bssid, ETHER_ADDR_LEN); - vos_mem_copy(pmk_id.PMKID, pmksa->pmkid, CSR_RSN_PMKID_SIZE); + vos_mem_zero(&pmk_cache, sizeof(pmk_cache)); + + hdd_update_pmksa_info(&pmk_cache, pmksa, false); - /* Add to the PMKSA ID Cache in CSR */ - result = sme_RoamSetPMKIDCache(halHandle,pAdapter->sessionId, - &pmk_id, 1, FALSE); + /* Add to the PMKSA ID Cache in CSR + * PMKSA cache will be having following + * 1. pmkid id + * 2. pmk 15733 + * 3. bssid or cache identifier + */ + result = sme_RoamSetPMKIDCache(halHandle,pAdapter->sessionId, + &pmk_cache, 1, FALSE); MTRACE(vos_trace(VOS_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_SET_PMKSA, @@ -26052,6 +26151,7 @@ static int __wlan_hdd_cfg80211_del_pmksa(struct wiphy *wiphy, struct net_device hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); tHalHandle halHandle; int status = 0; + tPmkidCacheInfo pmk_cache; ENTER(); @@ -26065,13 +26165,8 @@ static int __wlan_hdd_cfg80211_del_pmksa(struct wiphy *wiphy, struct net_device return -EINVAL; } - if (!pmksa->bssid) { - hddLog(LOGE, FL("pmksa->bssid is NULL")); + if (!wlan_hdd_is_pmksa_valid(pmksa)) return -EINVAL; - } - - hddLog(VOS_TRACE_LEVEL_DEBUG, FL("Deleting PMKSA for "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(pmksa->bssid)); status = wlan_hdd_validate_context(pHddCtx); if (0 != status) @@ -26082,10 +26177,14 @@ static int __wlan_hdd_cfg80211_del_pmksa(struct wiphy *wiphy, struct net_device MTRACE(vos_trace(VOS_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_DEL_PMKSA, pAdapter->sessionId, 0)); + vos_mem_zero(&pmk_cache, sizeof(pmk_cache)); + + hdd_update_pmksa_info(&pmk_cache, pmksa, true); + /* Delete the PMKID CSR cache */ if (eHAL_STATUS_SUCCESS != sme_RoamDelPMKIDfromCache(halHandle, - pAdapter->sessionId, pmksa->bssid, FALSE)) { + pAdapter->sessionId, &pmk_cache, FALSE)) { hddLog(LOGE, FL("Failed to delete PMKSA for "MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pmksa->bssid)); status = -EINVAL; diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h index 6c2a0728879a..9b46810f4fd4 100644 --- a/CORE/SME/inc/csrApi.h +++ b/CORE/SME/inc/csrApi.h @@ -230,6 +230,7 @@ typedef enum #define CSR_RSN_PMKID_SIZE 16 +#define CSR_RSN_MAX_PMK_LEN 48 #define CSR_MAX_PMKID_ALLOWED 32 #define CSR_WEP40_KEY_LEN 5 #define CSR_WEP104_KEY_LEN 13 @@ -912,6 +913,11 @@ typedef struct tagPmkidCacheInfo { tCsrBssid BSSID; tANI_U8 PMKID[CSR_RSN_PMKID_SIZE]; + uint8_t pmk[CSR_RSN_MAX_PMK_LEN]; + uint8_t pmk_len; + uint8_t ssid_len; + uint8_t ssid[SIR_MAC_MAX_SSID_LENGTH]; + uint8_t cache_id[CACHE_ID_LEN]; }tPmkidCacheInfo; #ifdef FEATURE_WLAN_WAPI diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h index 310b9b1ac6f9..a387ba67da42 100644 --- a/CORE/SME/inc/sme_Api.h +++ b/CORE/SME/inc/sme_Api.h @@ -3675,7 +3675,7 @@ eHalStatus smeIssueFastRoamNeighborAPEvent (tHalHandle hHal, eHalStatus sme_RoamDelPMKIDfromCache(tHalHandle hHal, tANI_U8 sessionId, - const tANI_U8 *pBSSId, + tPmkidCacheInfo *pmksa, tANI_BOOLEAN flush_cache); void smeGetCommandQStatus( tHalHandle hHal ); diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index f28870377e05..2b6136af3d44 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -13324,6 +13324,48 @@ eHalStatus csrRoamSetPSK_PMK(tpAniSirGlobal pMac, tANI_U32 sessionId, return eHAL_STATUS_SUCCESS; } #endif /* WLAN_FEATURE_ROAM_OFFLOAD */ + +static void csr_update_pmk_cache(tCsrRoamSession *pSession, + tPmkidCacheInfo *pmksa) +{ + uint16_t cache_idx = pSession->curr_cache_idx; + + /* Add entry to the cache */ + if (!pmksa->ssid_len) { + vos_copy_macaddr( + (v_MACADDR_t *)pSession->PmkidCacheInfo[cache_idx].BSSID, + (v_MACADDR_t *)pmksa->BSSID); + pSession->PmkidCacheInfo[cache_idx].ssid_len = 0; + } else { + vos_mem_copy(pSession->PmkidCacheInfo[cache_idx].ssid, + pmksa->ssid, pmksa->ssid_len); + pSession->PmkidCacheInfo[cache_idx].ssid_len = + pmksa->ssid_len; + vos_mem_copy(pSession->PmkidCacheInfo[cache_idx].cache_id, + pmksa->cache_id, CACHE_ID_LEN); + + } + vos_mem_copy( + pSession->PmkidCacheInfo[cache_idx].PMKID, + pmksa->PMKID, CSR_RSN_PMKID_SIZE); + + if (pmksa->pmk_len) + vos_mem_copy(pSession->PmkidCacheInfo[cache_idx].pmk, + pmksa->pmk, pmksa->pmk_len); + + pSession->PmkidCacheInfo[cache_idx].pmk_len = pmksa->pmk_len; + + /* Increment the CSR local cache index */ + if (cache_idx < (CSR_MAX_PMKID_ALLOWED - 1)) + pSession->curr_cache_idx++; + else + pSession->curr_cache_idx = 0; + + pSession->NumPmkidCache++; + if (pSession->NumPmkidCache > CSR_MAX_PMKID_ALLOWED) + pSession->NumPmkidCache = CSR_MAX_PMKID_ALLOWED; +} + eHalStatus csrRoamSetPMKIDCache( tpAniSirGlobal pMac, tANI_U32 sessionId, tPmkidCacheInfo *pPMKIDCache, tANI_U32 numItems, @@ -13376,25 +13418,9 @@ eHalStatus csrRoamSetPMKIDCache( tpAniSirGlobal pMac, tANI_U32 sessionId, pmksa = &pPMKIDCache[i]; /* Delete the entry if present */ - csrRoamDelPMKIDfromCache(pMac,sessionId,pmksa->BSSID,FALSE); - - /* Add entry to the cache */ - vos_mem_copy( - pSession->PmkidCacheInfo[pSession->curr_cache_idx].BSSID, - pmksa->BSSID, ETHER_ADDR_LEN); - vos_mem_copy( - pSession->PmkidCacheInfo[pSession->curr_cache_idx].PMKID, - pmksa->PMKID, CSR_RSN_PMKID_SIZE); - - /* Increment the CSR local cache index */ - if (pSession->curr_cache_idx < (CSR_MAX_PMKID_ALLOWED - 1)) - pSession->curr_cache_idx++; - else - pSession->curr_cache_idx = 0; + csrRoamDelPMKIDfromCache(pMac,sessionId,pmksa,FALSE); - pSession->NumPmkidCache++; - if (pSession->NumPmkidCache > CSR_MAX_PMKID_ALLOWED) - pSession->NumPmkidCache = CSR_MAX_PMKID_ALLOWED; + csr_update_pmk_cache(pSession, pmksa); } } } @@ -13402,7 +13428,7 @@ eHalStatus csrRoamSetPMKIDCache( tpAniSirGlobal pMac, tANI_U32 sessionId, } eHalStatus csrRoamDelPMKIDfromCache( tpAniSirGlobal pMac, tANI_U32 sessionId, - const tANI_U8 *pBSSId, + tPmkidCacheInfo *pmksa, tANI_BOOLEAN flush_cache ) { tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); @@ -13410,6 +13436,7 @@ eHalStatus csrRoamDelPMKIDfromCache( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 Index; uint32_t curr_idx; uint32_t i; + tPmkidCacheInfo *cached_pmksa; if(!pSession) { @@ -13425,21 +13452,28 @@ eHalStatus csrRoamDelPMKIDfromCache( tpAniSirGlobal pMac, tANI_U32 sessionId, if (!flush_cache) { for (Index = 0; Index < CSR_MAX_PMKID_ALLOWED; Index++) { - if (vos_mem_compare(pSession->PmkidCacheInfo[Index].BSSID, - pBSSId, VOS_MAC_ADDR_SIZE)) { + cached_pmksa = &pSession->PmkidCacheInfo[Index]; + if (((!cached_pmksa->ssid_len) && + vos_is_macaddr_equal((v_MACADDR_t *)cached_pmksa->BSSID, + (v_MACADDR_t *)pmksa->BSSID))) { + fMatchFound = 1; + + } else if ((!adf_os_mem_cmp(cached_pmksa->ssid, + pmksa->ssid, pmksa->ssid_len)) && + (!adf_os_mem_cmp(cached_pmksa->cache_id, + pmksa->cache_id, CACHE_ID_LEN))) fMatchFound = 1; + if(fMatchFound) { /* Clear this - the matched entry */ - vos_mem_zero(&pSession->PmkidCacheInfo[Index], + vos_mem_zero(cached_pmksa, sizeof(tPmkidCacheInfo)); - break; } } if (Index == CSR_MAX_PMKID_ALLOWED && !fMatchFound) { - smsLog(pMac, LOG1, FL("No such PMKSA entry exists "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(pBSSId)); + smsLog(pMac, LOG1, FL("No such PMKSA entry exists ")); } else { /* Match Found */ diff --git a/CORE/SME/src/csr/csrInsideApi.h b/CORE/SME/src/csr/csrInsideApi.h index 9dc7d29be927..e2c82fe3a923 100644 --- a/CORE/SME/src/csr/csrInsideApi.h +++ b/CORE/SME/src/csr/csrInsideApi.h @@ -1070,7 +1070,7 @@ eHalStatus csrScanCreateEntryInScanCache(tpAniSirGlobal pMac, tANI_U32 sessionId eHalStatus csrUpdateChannelList(tpAniSirGlobal pMac); eHalStatus csrRoamDelPMKIDfromCache(tpAniSirGlobal pMac, tANI_U32 sessionId, - const tANI_U8 *pBSSId, + tPmkidCacheInfo *pmksa, tANI_BOOLEAN flush_cache); tANI_BOOLEAN csrElectedCountryInfo(tpAniSirGlobal pMac); diff --git a/CORE/SME/src/csr/csrUtil.c b/CORE/SME/src/csr/csrUtil.c index 8c9fcc9aae00..64d1b0ede053 100644 --- a/CORE/SME/src/csr/csrUtil.c +++ b/CORE/SME/src/csr/csrUtil.c @@ -3485,8 +3485,70 @@ tANI_BOOLEAN csrIsRSNMatch( tHalHandle hHal, tCsrAuthList *pAuthType, return( fRSNMatch ); } +/** + * csr_lookup_pmkid_using_ssid() - lookup pmkid using ssid and cache_id + * @mac: pointer to mac + * @session: sme session pointer + * @pmk_cache: pointer to pmk cache + * @index: index value needs to be seached + * + * Return: true if pmkid is found else false + */ +static bool csr_lookup_pmkid_using_ssid(tpAniSirGlobal mac, + tCsrRoamSession *session, + tPmkidCacheInfo *pmk_cache, + uint32_t *index) +{ + uint32_t i; + tPmkidCacheInfo *session_pmk; + + for (i = 0; i < session->NumPmkidCache; i++) { + session_pmk = &session->PmkidCacheInfo[i]; + + if ((!adf_os_mem_cmp(pmk_cache->ssid, session_pmk->ssid, + pmk_cache->ssid_len)) && + (!adf_os_mem_cmp(session_pmk->cache_id, + pmk_cache->cache_id, CACHE_ID_LEN))) { + /* match found */ + *index = i; + return true; + } + } + + return false; +} + +/** + * csr_lookup_pmkid_using_bssid() - lookup pmkid using bssid + * @mac: pointer to mac + * @session: sme session pointer + * @pmk_cache: pointer to pmk cache + * @index: index value needs to be seached + * + * Return: true if pmkid is found else false + */ +static bool csr_lookup_pmkid_using_bssid(tpAniSirGlobal mac, + tCsrRoamSession *session, + tPmkidCacheInfo *pmk_cache, + uint32_t *index) +{ + uint32_t i; + tPmkidCacheInfo *session_pmk; + + for (i = 0; i < session->NumPmkidCache; i++) { + session_pmk = &session->PmkidCacheInfo[i]; + if (vos_is_macaddr_equal((v_MACADDR_t *)pmk_cache->BSSID, + (v_MACADDR_t *)session_pmk->BSSID)) { + /* match found */ + *index = i; + return true; + } + } + + return false; +} -tANI_BOOLEAN csrLookupPMKID( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U8 *pBSSId, tANI_U8 *pPMKId ) +tANI_BOOLEAN csrLookupPMKID( tpAniSirGlobal pMac, tANI_U32 sessionId, tPmkidCacheInfo *pmk_cache) { tANI_BOOLEAN fRC = FALSE, fMatchFound = FALSE; tANI_U32 Index; @@ -3498,27 +3560,30 @@ tANI_BOOLEAN csrLookupPMKID( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U8 *p return FALSE; } - do - { - for (Index = 0; Index < CSR_MAX_PMKID_ALLOWED; Index++) - { - smsLog(pMac, LOG2, "match PMKID "MAC_ADDRESS_STR " to ", - MAC_ADDR_ARRAY(pBSSId)); - if( vos_mem_compare(pBSSId, pSession->PmkidCacheInfo[Index].BSSID, sizeof(tCsrBssid)) ) - { - // match found - fMatchFound = TRUE; - break; - } - } - - if( !fMatchFound ) break; + if (pmk_cache->ssid_len) { + /* Try to find based on cache_id and ssid first */ + fMatchFound = csr_lookup_pmkid_using_ssid(pMac, pSession, + pmk_cache, &Index); + } - vos_mem_copy(pPMKId, pSession->PmkidCacheInfo[Index].PMKID, CSR_RSN_PMKID_SIZE); + /* If not able to find using cache id or ssid_len is not present */ + if (!fMatchFound) + fMatchFound = csr_lookup_pmkid_using_bssid(pMac, + pSession, pmk_cache, &Index); - fRC = TRUE; + if (!fMatchFound) { + smsLog(pMac, LOG2, "No PMKID Match Found"); + return false; } - while( 0 ); + + vos_mem_copy(pmk_cache->PMKID, pSession->PmkidCacheInfo[Index].PMKID, CSR_RSN_PMKID_SIZE); + vos_mem_copy(pmk_cache->pmk, + pSession->PmkidCacheInfo[Index].pmk, + pSession->PmkidCacheInfo[Index].pmk_len); + pmk_cache->pmk_len = pSession->PmkidCacheInfo[Index].pmk_len; + + fRC = TRUE; + smsLog(pMac, LOG1, "csrLookupPMKID called return match = %d pMac->roam.NumPmkidCache = %d", fRC, pSession->NumPmkidCache); @@ -3538,7 +3603,7 @@ tANI_U8 csrConstructRSNIe( tHalHandle hHal, tANI_U32 sessionId, tCsrRoamProfile tCsrRSNAuthIe *pAuthSuite; tCsrRSNCapabilities RSNCapabilities; tCsrRSNPMKIe *pPMK; - tANI_U8 PMKId[CSR_RSN_PMKID_SIZE]; + tPmkidCacheInfo pmkid_cache; #ifdef WLAN_FEATURE_11W tANI_U8 *pGroupMgmtCipherSuite; #endif @@ -3599,17 +3664,21 @@ tANI_U8 csrConstructRSNIe( tHalHandle hHal, tANI_U32 sessionId, tCsrRoamProfile *(tANI_U16 *)( &pAuthSuite->AuthOui[ 1 ] ) = *((tANI_U16 *)(&RSNCapabilities)); pPMK = (tCsrRSNPMKIe *)( ((tANI_U8 *)(&pAuthSuite->AuthOui[ 1 ])) + sizeof(tANI_U16) ); - + vos_mem_copy((v_MACADDR_t *)pmkid_cache.BSSID, + (v_MACADDR_t *)pSirBssDesc->bssId, + VOS_MAC_ADDR_SIZE); // Don't include the PMK SA IDs for CCKM associations. if ( #ifdef FEATURE_WLAN_ESE (eCSR_AUTH_TYPE_CCKM_RSN != negAuthType) && #endif - csrLookupPMKID( pMac, sessionId, pSirBssDesc->bssId, &(PMKId[0]))) + csrLookupPMKID( pMac, sessionId, &pmkid_cache)) { pPMK->cPMKIDs = 1; - vos_mem_copy(pPMK->PMKIDList[0].PMKID, PMKId, CSR_RSN_PMKID_SIZE); + vos_mem_copy(pPMK->PMKIDList[0].PMKID, + pmkid_cache.PMKID, + CSR_RSN_PMKID_SIZE); } else { diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index 0cd7fac9396f..8554086471f6 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -4833,7 +4833,7 @@ eHalStatus sme_RoamSetPMKIDCache( tHalHandle hHal, tANI_U8 sessionId, } eHalStatus sme_RoamDelPMKIDfromCache( tHalHandle hHal, tANI_U8 sessionId, - const tANI_U8 *pBSSId, + tPmkidCacheInfo *pmksa, tANI_BOOLEAN flush_cache ) { eHalStatus status = eHAL_STATUS_FAILURE; @@ -4846,7 +4846,7 @@ eHalStatus sme_RoamDelPMKIDfromCache( tHalHandle hHal, tANI_U8 sessionId, if( CSR_IS_SESSION_VALID( pMac, sessionId ) ) { status = csrRoamDelPMKIDfromCache( pMac, sessionId, - pBSSId, flush_cache ); + pmksa, flush_cache ); } else { |
