summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajasekaran Kalidoss <rkalidos@codeaurora.org>2017-06-09 15:13:07 +0530
committersnandini <snandini@codeaurora.org>2017-06-21 04:20:18 -0700
commite90594c883fa90f76d36dcd91a00b4cf1ae937c4 (patch)
tree807884236f1bd4c6ad42500ca511bb173daf7b6c
parent50d1da1875ed700f0423f6b60f190e6a8407b0fb (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.c135
-rw-r--r--CORE/SME/inc/csrApi.h6
-rw-r--r--CORE/SME/inc/sme_Api.h2
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c84
-rw-r--r--CORE/SME/src/csr/csrInsideApi.h2
-rw-r--r--CORE/SME/src/csr/csrUtil.c115
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c4
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
{