qcacld-3.0: Changes to support PMK caching for SAE
Add changes to support PMK caching for SAE authentication Change-Id: Id8f48a184fe40d1327b65235156d3798cfda585f CRs-Fixed: 2029357
This commit is contained in:

committed by
snandini

parent
dd3f48598d
commit
b8f65d96b6
@@ -1258,6 +1258,7 @@ typedef struct sSirSmeJoinReq {
|
||||
#ifdef WLAN_FEATURE_FILS_SK
|
||||
struct cds_fils_connection_info fils_con_info;
|
||||
#endif
|
||||
bool sae_pmk_cached;
|
||||
/* Pls make this as last variable in struct */
|
||||
bool force_24ghz_in_ht20;
|
||||
bool force_rsne_override;
|
||||
|
@@ -551,6 +551,7 @@ typedef struct sPESession /* Added to Support BT-AMP */
|
||||
struct obss_detection_cfg obss_offload_cfg;
|
||||
bool is_session_obss_offload_enabled;
|
||||
bool is_obss_reset_timer_initialized;
|
||||
bool sae_pmk_cached;
|
||||
} tPESession, *tpPESession;
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
|
@@ -634,16 +634,27 @@ static void lim_process_auth_frame_type2(tpAniSirGlobal mac_ctx,
|
||||
if (rx_auth_frm_body->authAlgoNumber !=
|
||||
mac_ctx->lim.gpLimMlmAuthReq->authType) {
|
||||
/*
|
||||
* Received Authentication frame with an auth
|
||||
* algorithm other than one requested.
|
||||
* Wait until Authentication Failure Timeout.
|
||||
* Auth algo is open in rx auth frame when auth type is SAE and
|
||||
* PMK is cached as driver sent auth algo as open in tx frame
|
||||
* as well.
|
||||
*/
|
||||
if ((mac_ctx->lim.gpLimMlmAuthReq->authType ==
|
||||
eSIR_AUTH_TYPE_SAE) && pe_session->sae_pmk_cached) {
|
||||
pe_debug("rx Auth frame2 auth algo %d in SAE PMK case",
|
||||
rx_auth_frm_body->authAlgoNumber);
|
||||
} else {
|
||||
/*
|
||||
* Received Authentication frame with an auth
|
||||
* algorithm other than one requested.
|
||||
* Wait until Authentication Failure Timeout.
|
||||
*/
|
||||
|
||||
pe_warn("rx Auth frame2 for unexpected auth algo number %d "
|
||||
MAC_ADDRESS_STR,
|
||||
rx_auth_frm_body->authAlgoNumber,
|
||||
MAC_ADDR_ARRAY(mac_hdr->sa));
|
||||
return;
|
||||
pe_warn("rx Auth frame2 for unexpected auth algo %d"
|
||||
MAC_ADDRESS_STR,
|
||||
rx_auth_frm_body->authAlgoNumber,
|
||||
MAC_ADDR_ARRAY(mac_hdr->sa));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (rx_auth_frm_body->authStatusCode != eSIR_MAC_SUCCESS_STATUS) {
|
||||
|
@@ -1228,7 +1228,8 @@ static void lim_process_mlm_auth_req(tpAniSirGlobal mac_ctx, uint32_t *msg)
|
||||
|
||||
session->limPrevMlmState = session->limMlmState;
|
||||
|
||||
if (mac_ctx->lim.gpLimMlmAuthReq->authType == eSIR_AUTH_TYPE_SAE) {
|
||||
if ((mac_ctx->lim.gpLimMlmAuthReq->authType == eSIR_AUTH_TYPE_SAE) &&
|
||||
!session->sae_pmk_cached) {
|
||||
if (lim_process_mlm_auth_req_sae(mac_ctx, session) !=
|
||||
QDF_STATUS_SUCCESS) {
|
||||
mlm_auth_cnf.resultCode = eSIR_SME_INVALID_PARAMETERS;
|
||||
@@ -1243,9 +1244,16 @@ static void lim_process_mlm_auth_req(tpAniSirGlobal mac_ctx, uint32_t *msg)
|
||||
MTRACE(mac_trace(mac_ctx, TRACE_CODE_MLM_STATE, session->peSessionId,
|
||||
session->limMlmState));
|
||||
|
||||
/* Prepare & send Authentication frame */
|
||||
auth_frame_body.authAlgoNumber =
|
||||
/* Mark auth algo as open when auth type is SAE and PMK is cached */
|
||||
if ((mac_ctx->lim.gpLimMlmAuthReq->authType == eSIR_AUTH_TYPE_SAE) &&
|
||||
session->sae_pmk_cached) {
|
||||
auth_frame_body.authAlgoNumber = eSIR_OPEN_SYSTEM;
|
||||
} else {
|
||||
auth_frame_body.authAlgoNumber =
|
||||
(uint8_t) mac_ctx->lim.gpLimMlmAuthReq->authType;
|
||||
}
|
||||
|
||||
/* Prepare & send Authentication frame */
|
||||
auth_frame_body.authTransactionSeqNumber = SIR_MAC_AUTH_FRAME_1;
|
||||
auth_frame_body.authStatusCode = 0;
|
||||
#ifdef FEATURE_WLAN_DIAG_SUPPORT
|
||||
|
@@ -1479,6 +1479,32 @@ static void __lim_process_clear_dfs_channel_list(tpAniSirGlobal pMac,
|
||||
qdf_mem_set(&pMac->lim.dfschannelList, sizeof(tSirDFSChannelList), 0);
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_SAE
|
||||
|
||||
/**
|
||||
* lim_update_sae_config()- This API update SAE session info to csr config
|
||||
* from join request.
|
||||
* @session: PE session
|
||||
* @sme_join_req: pointer to join request
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void lim_update_sae_config(tpPESession session,
|
||||
tpSirSmeJoinReq sme_join_req)
|
||||
{
|
||||
session->sae_pmk_cached = sme_join_req->sae_pmk_cached;
|
||||
|
||||
pe_debug("pmk_cached %d for BSSID=" MAC_ADDRESS_STR,
|
||||
session->sae_pmk_cached,
|
||||
MAC_ADDR_ARRAY(sme_join_req->bssDescription.bssId));
|
||||
}
|
||||
#else
|
||||
static inline void lim_update_sae_config(tpPESession session,
|
||||
tpSirSmeJoinReq sme_join_req)
|
||||
{}
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* __lim_process_sme_join_req() - process SME_JOIN_REQ message
|
||||
* @mac_ctx: Pointer to Global MAC structure
|
||||
@@ -1802,6 +1828,7 @@ __lim_process_sme_join_req(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
|
||||
sme_join_req->txLdpcIniFeatureEnabled;
|
||||
|
||||
lim_update_fils_config(session, sme_join_req);
|
||||
lim_update_sae_config(session, sme_join_req);
|
||||
if (session->bssType == eSIR_INFRASTRUCTURE_MODE) {
|
||||
session->limSystemRole = eLIM_STA_ROLE;
|
||||
} else {
|
||||
|
@@ -14886,6 +14886,36 @@ static void csr_update_fils_connection_info(tCsrRoamProfile *profile,
|
||||
{ }
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_FEATURE_SAE
|
||||
/*
|
||||
* csr_update_sae_config: Copy SAE info to join request
|
||||
* @profile: pointer to profile
|
||||
* @csr_join_req: csr join request
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void csr_update_sae_config(tSirSmeJoinReq *csr_join_req,
|
||||
tpAniSirGlobal mac, struct csr_roam_session *session)
|
||||
{
|
||||
tPmkidCacheInfo pmkid_cache;
|
||||
uint32_t index;
|
||||
|
||||
qdf_mem_copy(pmkid_cache.BSSID.bytes,
|
||||
csr_join_req->bssDescription.bssId, QDF_MAC_ADDR_SIZE);
|
||||
|
||||
csr_join_req->sae_pmk_cached =
|
||||
csr_lookup_pmkid_using_bssid(mac, session, &pmkid_cache, &index);
|
||||
|
||||
sme_debug("pmk_cached %d for BSSID=" MAC_ADDRESS_STR,
|
||||
csr_join_req->sae_pmk_cached,
|
||||
MAC_ADDR_ARRAY(csr_join_req->bssDescription.bssId));
|
||||
}
|
||||
#else
|
||||
static void csr_update_sae_config(tSirSmeJoinReq *csr_join_req,
|
||||
tpAniSirGlobal mac, struct csr_roam_session *session)
|
||||
{ }
|
||||
#endif
|
||||
|
||||
/**
|
||||
* The communication between HDD and LIM is thru mailbox (MB).
|
||||
* Both sides will access the data structure "tSirSmeJoinReq".
|
||||
@@ -15571,6 +15601,7 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
|
||||
pBssDescription->length +
|
||||
sizeof(pBssDescription->length));
|
||||
csr_update_fils_connection_info(pProfile, csr_join_req);
|
||||
csr_update_sae_config(csr_join_req, pMac, pSession);
|
||||
/*
|
||||
* conc_custom_rule1:
|
||||
* If SAP comes up first and STA comes up later then SAP
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011-2017 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2011-2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
||||
*
|
||||
@@ -1164,4 +1164,18 @@ static inline bool csr_is_mfpc_capable(struct sDot11fIERSN *rsn)
|
||||
*/
|
||||
enum band_info csr_get_rf_band(uint8_t channel);
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
bool csr_lookup_pmkid_using_bssid(tpAniSirGlobal mac,
|
||||
struct csr_roam_session *session,
|
||||
tPmkidCacheInfo *pmk_cache,
|
||||
uint32_t *index);
|
||||
|
||||
#endif /* CSR_INSIDE_API_H__ */
|
||||
|
@@ -3919,16 +3919,7 @@ static bool csr_lookup_pmkid_using_ssid(tpAniSirGlobal mac,
|
||||
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,
|
||||
bool csr_lookup_pmkid_using_bssid(tpAniSirGlobal mac,
|
||||
struct csr_roam_session *session,
|
||||
tPmkidCacheInfo *pmk_cache,
|
||||
uint32_t *index)
|
||||
|
Reference in New Issue
Block a user