diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index fbf5f6e2a53d..b248aaa255c7 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -16243,8 +16243,7 @@ static bool hdd_is_wpaie_present(const uint8_t *ie, uint8_t ie_len) return false; } -#ifdef CONFIG_CRYPTO_COMPONENT - +#ifdef WLAN_CONV_CRYPTO_SUPPORTED /** * hdd_populate_crypto_auth_type() - populate auth type for crypto * @vdev: pointed to vdev obmgr @@ -16258,12 +16257,19 @@ static bool hdd_is_wpaie_present(const uint8_t *ie, uint8_t ie_len) static void hdd_populate_crypto_auth_type(struct wlan_objmgr_vdev *vdev, enum nl80211_auth_type auth_type) { + QDF_STATUS status; + uint32_t set_val = 0; wlan_crypto_auth_mode crypto_auth_type = osif_nl_to_crypto_auth_type(auth_type); - wlan_crypto_set_vdev_param(vdev, - WLAN_CRYPTO_PARAM_AUTH_MODE, - crypto_auth_type); + hdd_debug("set auth type %d to crypto component", crypto_auth_type); + HDD_SET_BIT(set_val, crypto_auth_type); + status = wlan_crypto_set_vdev_param(vdev, + WLAN_CRYPTO_PARAM_AUTH_MODE, + set_val); + if (QDF_IS_STATUS_ERROR(status)) + hdd_err("Failed to set auth type %0X to crypto component", + set_val); } /** @@ -16279,12 +16285,20 @@ static void hdd_populate_crypto_auth_type(struct wlan_objmgr_vdev *vdev, static void hdd_populate_crypto_akm_type(struct wlan_objmgr_vdev *vdev, u32 key_mgmt) { + QDF_STATUS status; + uint32_t set_val = 0; wlan_crypto_key_mgmt crypto_akm_type = osif_nl_to_crypto_akm_type(key_mgmt); - wlan_crypto_set_vdev_param(vdev, - WLAN_CRYPTO_PARAM_KEY_MGMT, - crypto_akm_type); + hdd_debug("set akm type %d to crypto component", crypto_akm_type); + HDD_SET_BIT(set_val, crypto_akm_type); + + status = wlan_crypto_set_vdev_param(vdev, + WLAN_CRYPTO_PARAM_KEY_MGMT, + set_val); + if (QDF_IS_STATUS_ERROR(status)) + hdd_err("Failed to set akm type %0x to crypto component", + set_val); } /** @@ -16303,12 +16317,18 @@ static void hdd_populate_crypto_cipher_type(u32 cipher, wlan_crypto_param_type cipher_param_type) { + QDF_STATUS status; + uint32_t set_val = 0; wlan_crypto_cipher_type crypto_cipher_type = osif_nl_to_crypto_cipher_type(cipher); - wlan_crypto_set_vdev_param(vdev, - cipher_param_type, - crypto_cipher_type); + hdd_debug("set cipher params %d type %d to crypto", + cipher_param_type, crypto_cipher_type); + HDD_SET_BIT(set_val, crypto_cipher_type); + status = wlan_crypto_set_vdev_param(vdev, cipher_param_type, set_val); + if (QDF_IS_STATUS_ERROR(status)) + hdd_err("Failed to set cipher params %d type %0x to crypto", + cipher_param_type, set_val); } /** diff --git a/core/hdd/src/wlan_hdd_cfg80211.h b/core/hdd/src/wlan_hdd_cfg80211.h index 7b150507a526..c67ef6228ee7 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.h +++ b/core/hdd/src/wlan_hdd_cfg80211.h @@ -125,6 +125,8 @@ struct hdd_context; #endif +#define HDD_SET_BIT(__param, __val) ((__param) |= (1 << (__val))) + #define MAX_CHANNEL (NUM_24GHZ_CHANNELS + NUM_5GHZ_CHANNELS) #define MAX_SCAN_SSID 10 diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index fbae2cd59de4..dff8e708e860 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -84,6 +84,7 @@ #include #include "wlan_mlme_ucfg_api.h" #include "cfg_ucfg_api.h" +#include "wlan_crypto_global_api.h" #define ACS_SCAN_EXPIRY_TIMEOUT_S 4 @@ -4555,6 +4556,30 @@ static void wlan_hdd_is_dhcp_enabled(struct hdd_context *hdd_ctx, } #endif +#ifdef WLAN_CONV_CRYPTO_SUPPORTED +/** + * hdd_set_vdev_crypto_prarams_from_ie - Sets vdev crypto params from IE info + * @vdev: vdev pointer + * @ie_ptr: pointer to IE + * @ie_len: IE length + * + * Return: QDF_STATUS_SUCCESS or error code + */ +static QDF_STATUS +hdd_set_vdev_crypto_prarams_from_ie(struct wlan_objmgr_vdev *vdev, + uint8_t *ie_ptr, uint16_t ie_len) +{ + return wlan_set_vdev_crypto_prarams_from_ie(vdev, ie_ptr, ie_len); +} +#else +static QDF_STATUS +hdd_set_vdev_crypto_prarams_from_ie(struct wlan_objmgr_vdev *vdev, + uint8_t *ie_ptr, uint16_t ie_len) +{ + return QDF_STATUS_SUCCESS; +} +#endif + /** * wlan_hdd_cfg80211_start_bss() - start bss * @adapter: Pointer to hostapd adapter @@ -4987,6 +5012,12 @@ int wlan_hdd_cfg80211_start_bss(struct hdd_adapter *adapter, ret = -EINVAL; goto error; } + status = hdd_set_vdev_crypto_prarams_from_ie(adapter->vdev, + pConfig->RSNWPAReqIE, + pConfig->RSNWPAReqIELength + ); + if (QDF_IS_STATUS_ERROR(status)) + hdd_err("Failed to set crypto params from IE"); pConfig->SSIDinfo.ssidHidden = false; diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index bff275ff36b9..d10a2df3642e 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -317,6 +317,7 @@ static const struct category_info cinfo[MAX_SUPPORTED_CATEGORY] = { [QDF_MODULE_ID_CONFIG] = {QDF_TRACE_LEVEL_ALL}, [QDF_MODULE_ID_MLME] = {QDF_TRACE_LEVEL_ALL}, [QDF_MODULE_ID_TARGET] = {QDF_TRACE_LEVEL_ALL}, + [QDF_MODULE_ID_CRYPTO] = {QDF_TRACE_LEVEL_ALL}, [QDF_MODULE_ID_FWOL] = {QDF_TRACE_LEVEL_ALL}, [QDF_MODULE_ID_SM_ENGINE] = {QDF_TRACE_LEVEL_ALL}, [QDF_MODULE_ID_CMN_MLME] = {QDF_TRACE_LEVEL_ALL}, @@ -9050,6 +9051,7 @@ static void hdd_set_trace_level_for_each(struct hdd_context *hdd_ctx) hdd_ctx->config->qdf_trace_enable_cp_stats); hdd_qdf_trace_enable(QDF_MODULE_ID_MLME, 0xffff); hdd_qdf_trace_enable(QDF_MODULE_ID_FWOL, 0xffff); + hdd_qdf_trace_enable(QDF_MODULE_ID_CRYPTO, 0xffff); hdd_set_mtrace_for_each(hdd_ctx); diff --git a/core/mac/src/pe/lim/lim_assoc_utils.c b/core/mac/src/pe/lim/lim_assoc_utils.c index f8d79fa70dd1..b57f54f773e5 100644 --- a/core/mac/src/pe/lim/lim_assoc_utils.c +++ b/core/mac/src/pe/lim/lim_assoc_utils.c @@ -301,6 +301,7 @@ uint8_t lim_check_mcs_set(tpAniSirGlobal pMac, uint8_t *supportedMCSSet) #define SECURITY_SUITE_TYPE_GCMP 0x8 #define SECURITY_SUITE_TYPE_GCMP_256 0x9 +#ifndef WLAN_CONV_CRYPTO_IE_SUPPORT /** * is_non_rsn_cipher()- API to check whether cipher suit is rsn or not * @cipher_suite: cipher suit @@ -356,7 +357,7 @@ uint8_t lim_check_rx_rsn_ie_match(tpAniSirGlobal mac_ctx, if (!rx_rsn_ie) { pe_debug("Rx RSN IE is NULL"); - return QDF_STATUS_E_FAILURE; + return eSIR_MAC_UNSPEC_FAILURE_STATUS; } /* Check groupwise cipher suite */ @@ -435,7 +436,7 @@ uint8_t lim_check_rx_rsn_ie_match(tpAniSirGlobal mac_ctx, they_require_pmf, *pmf_connection); #endif - return QDF_STATUS_SUCCESS; + return eSIR_MAC_SUCCESS_STATUS; } /** @@ -455,7 +456,7 @@ uint8_t lim_check_rx_rsn_ie_match(tpAniSirGlobal mac_ctx, */ uint8_t -lim_check_rx_wpa_ie_match(tpAniSirGlobal mac, tDot11fIEWPA rx_wpaie, +lim_check_rx_wpa_ie_match(tpAniSirGlobal mac, tDot11fIEWPA *rx_wpaie, tpPESession session_entry, uint8_t sta_is_ht) { tDot11fIEWPA *wpa_ie; @@ -466,7 +467,8 @@ lim_check_rx_wpa_ie_match(tpAniSirGlobal mac, tDot11fIEWPA rx_wpaie, /* Check groupwise cipher suite */ for (i = 0; i < 4; i++) { - if (wpa_ie->multicast_cipher[i] != rx_wpaie.multicast_cipher[i]) { + if (wpa_ie->multicast_cipher[i] != + rx_wpaie->multicast_cipher[i]) { pe_debug("Invalid groupwise cipher suite"); return eSIR_MAC_INVALID_GROUP_CIPHER_STATUS; } @@ -477,9 +479,9 @@ lim_check_rx_wpa_ie_match(tpAniSirGlobal mac, tDot11fIEWPA rx_wpaie, * received pairwise */ match = 0; - for (i = 0; i < rx_wpaie.unicast_cipher_count; i++) { + for (i = 0; i < rx_wpaie->unicast_cipher_count; i++) { for (j = 0; j < wpa_ie->unicast_cipher_count; j++) { - if (!qdf_mem_cmp(rx_wpaie.unicast_ciphers[i], + if (!qdf_mem_cmp(rx_wpaie->unicast_ciphers[i], wpa_ie->unicast_ciphers[j], 4)) { match = 1; break; @@ -489,12 +491,12 @@ lim_check_rx_wpa_ie_match(tpAniSirGlobal mac, tDot11fIEWPA rx_wpaie, if ((sta_is_ht) #ifdef ANI_LITTLE_BYTE_ENDIAN && - ((rx_wpaie. + ((rx_wpaie-> unicast_ciphers[i][3] & SECURITY_SUITE_TYPE_MASK) == SECURITY_SUITE_TYPE_CCMP)) #else && - ((rx_wpaie. + ((rx_wpaie-> unicast_ciphers[i][0] & SECURITY_SUITE_TYPE_MASK) == SECURITY_SUITE_TYPE_CCMP)) #endif @@ -509,8 +511,9 @@ lim_check_rx_wpa_ie_match(tpAniSirGlobal mac, tDot11fIEWPA rx_wpaie, return eSIR_MAC_CIPHER_SUITE_REJECTED_STATUS; } - return QDF_STATUS_SUCCESS; + return eSIR_MAC_SUCCESS_STATUS; } +#endif /** * lim_cleanup_rx_path() diff --git a/core/mac/src/pe/lim/lim_assoc_utils.h b/core/mac/src/pe/lim/lim_assoc_utils.h index 6b11583668dc..92b28e6c8d9e 100644 --- a/core/mac/src/pe/lim/lim_assoc_utils.h +++ b/core/mac/src/pe/lim/lim_assoc_utils.h @@ -48,7 +48,7 @@ uint8_t lim_check_rx_rsn_ie_match(tpAniSirGlobal mac_ctx, tDot11fIERSN * const rx_rsn_ie, tpPESession session_entry, uint8_t sta_is_ht, bool *pmf_connection); -uint8_t lim_check_rx_wpa_ie_match(tpAniSirGlobal, tDot11fIEWPA, tpPESession, +uint8_t lim_check_rx_wpa_ie_match(tpAniSirGlobal, tDot11fIEWPA *, tpPESession, uint8_t); uint8_t lim_check_mcs_set(tpAniSirGlobal pMac, uint8_t *supportedMCSSet); void limPostDummyToTmRing(tpAniSirGlobal, tpDphHashNode); diff --git a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c index 73f623e4cefd..52dc2f0e17aa 100644 --- a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c +++ b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c @@ -38,10 +38,12 @@ #include "lim_admit_control.h" #include "cds_packet.h" #include "lim_session_utils.h" +#include "utils_parser.h" #include "qdf_types.h" #include "cds_utils.h" #include "wlan_utility.h" +#include "wlan_crypto_global_api.h" /** * lim_convert_supported_channels - Parses channel support IE @@ -800,6 +802,92 @@ static void lim_print_ht_cap(tpAniSirGlobal mac_ctx, tpPESession session, } } +#ifdef WLAN_CONV_CRYPTO_IE_SUPPORT +static tSirMacStatusCodes lim_check_rsn_ie(tpPESession session, + struct mac_context *mac_ctx, + tpSirAssocReq assoc_req, + tDot11fIERSN *rsn, + bool *pmf_connection) +{ + struct wlan_objmgr_vdev *vdev; + + uint8_t buffer[SIR_MAC_MAX_IE_LENGTH]; + uint32_t dot11f_status, written = 0, nbuffer = SIR_MAC_MAX_IE_LENGTH; + tSirMacRsnInfo rsn_ie; + + dot11f_status = dot11f_pack_ie_rsn(mac_ctx, rsn, buffer, + nbuffer, &written); + if (DOT11F_FAILED(dot11f_status)) { + pe_err("Failed to re-pack the RSN IE (0x%0x8)", dot11f_status); + return eSIR_MAC_INVALID_IE_STATUS; + } + + rsn_ie.length = (uint8_t) written; + qdf_mem_copy(&rsn_ie.info[0], buffer, rsn_ie.length); + if (wlan_crypto_check_rsn_match(mac_ctx->psoc, session->smeSessionId, + &rsn_ie.info[0], rsn_ie.length)) { + vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac_ctx->psoc, + session->smeSessionId, + WLAN_LEGACY_MAC_ID); + if (!vdev) { + pe_err("vdev is NULL"); + return eSIR_MAC_UNSPEC_FAILURE_STATUS; + } + + *pmf_connection = wlan_crypto_vdev_is_pmf_enabled(vdev); + wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID); + } else { + return eSIR_MAC_INVALID_IE_STATUS; + } + + return eSIR_MAC_SUCCESS_STATUS; +} + +static tSirMacStatusCodes lim_check_wpa_ie(tpPESession session, + struct mac_context *mac_ctx, + tpSirAssocReq assoc_req, + tDot11fIEWPA *wpa) +{ + uint8_t buffer[SIR_MAC_MAX_IE_LENGTH]; + uint32_t dot11f_status, written = 0, nbuffer = SIR_MAC_MAX_IE_LENGTH; + tSirMacRsnInfo wpa_ie = {0}; + + dot11f_status = dot11f_pack_ie_wpa(mac_ctx, wpa, buffer, + nbuffer, &written); + if (DOT11F_FAILED(dot11f_status)) { + pe_err("Failed to re-pack the RSN IE (0x%0x8)", dot11f_status); + return eSIR_MAC_INVALID_IE_STATUS; + } + + wpa_ie.length = (uint8_t) written; + qdf_mem_copy(&wpa_ie.info[0], buffer, wpa_ie.length); + if (wlan_crypto_check_wpa_match(mac_ctx->psoc, session->smeSessionId, + &wpa_ie.info[0], wpa_ie.length)) + return eSIR_MAC_SUCCESS_STATUS; + + return eSIR_MAC_INVALID_IE_STATUS; +} +#else +static tSirMacStatusCodes lim_check_rsn_ie(tpPESession session, + struct mac_context *mac_ctx, + tpSirAssocReq assoc_req, + tDot11fIERSN *rsn, + bool *pmf_connection) +{ + return lim_check_rx_rsn_ie_match(mac_ctx, rsn, session, + assoc_req->HTCaps.present, + pmf_connection); +} + +static tSirMacStatusCodes lim_check_wpa_ie(tpPESession session, + struct mac_context *mac_ctx, + tpSirAssocReq assoc_req, + tDot11fIEWPA *wpa) +{ + return lim_check_rx_wpa_ie_match(mac_ctx, wpa, session, + assoc_req->HTCaps.present); +} +#endif /** * lim_check_wpa_rsn_ie() - wpa and rsn ie related checks * @session: pointer to pe session entry @@ -821,7 +909,7 @@ static bool lim_check_wpa_rsn_ie(tpPESession session, tpAniSirGlobal mac_ctx, uint32_t ret; tDot11fIEWPA dot11f_ie_wpa = {0}; tDot11fIERSN dot11f_ie_rsn = {0}; - QDF_STATUS status = QDF_STATUS_SUCCESS; + tSirMacStatusCodes status = eSIR_MAC_SUCCESS_STATUS; /* * Clear the buffers so that frame parser knows that there isn't a @@ -863,11 +951,10 @@ static bool lim_check_wpa_rsn_ie(tpPESession session, tpAniSirGlobal mac_ctx, /* Check if the RSN version is supported */ if (SIR_MAC_OUI_VERSION_1 == dot11f_ie_rsn.version) { /* check the groupwise and pairwise cipher suites */ - status = lim_check_rx_rsn_ie_match(mac_ctx, - &dot11f_ie_rsn, session, - assoc_req->HTCaps.present, - pmf_connection); - if (QDF_STATUS_SUCCESS != status) { + status = lim_check_rsn_ie(session, mac_ctx, assoc_req, + &dot11f_ie_rsn, + pmf_connection); + if (eSIR_MAC_SUCCESS_STATUS != status) { pe_warn("Re/Assoc rejected from: " MAC_ADDRESS_STR, MAC_ADDR_ARRAY(hdr->sa)); @@ -880,7 +967,6 @@ static bool lim_check_wpa_rsn_ie(tpPESession session, tpAniSirGlobal mac_ctx, } else { pe_warn("Re/Assoc rejected from: " MAC_ADDRESS_STR, MAC_ADDR_ARRAY(hdr->sa)); - /* * rcvd Assoc req frame with RSN IE but * IE version is wrong @@ -916,13 +1002,12 @@ static bool lim_check_wpa_rsn_ie(tpPESession session, tpAniSirGlobal mac_ctx, } /* check the groupwise and pairwise cipher suites*/ - status = lim_check_rx_wpa_ie_match(mac_ctx, dot11f_ie_wpa, - session, assoc_req->HTCaps.present); - if (QDF_STATUS_SUCCESS != status) { + status = lim_check_wpa_ie(session, mac_ctx, assoc_req, + &dot11f_ie_wpa); + if (eSIR_MAC_SUCCESS_STATUS != status) { pe_warn("Re/Assoc rejected from: " MAC_ADDRESS_STR, MAC_ADDR_ARRAY(hdr->sa)); - /* * rcvd Assoc req frame with WPA IE * but there is mismatch @@ -933,8 +1018,8 @@ static bool lim_check_wpa_rsn_ie(tpPESession session, tpAniSirGlobal mac_ctx, } } - return true; + return true; } /** diff --git a/core/sme/inc/csr_support.h b/core/sme/inc/csr_support.h index a076aa192502..040b7cde96fa 100644 --- a/core/sme/inc/csr_support.h +++ b/core/sme/inc/csr_support.h @@ -236,7 +236,7 @@ uint8_t csr_construct_rsn_ie(tpAniSirGlobal pMac, uint32_t sessionId, tSirBssDescription *pSirBssDesc, tDot11fBeaconIEs *pIes, tCsrRSNIe *pRSNIe); -uint8_t csr_construct_wpa_ie(tpAniSirGlobal pMac, +uint8_t csr_construct_wpa_ie(tpAniSirGlobal pMac, uint8_t session_id, struct csr_roam_profile *pProfile, tSirBssDescription *pSirBssDesc, tDot11fBeaconIEs *pIes, tCsrWpaIe *pWpaIe); @@ -249,7 +249,7 @@ bool csr_is_profile_wapi(struct csr_roam_profile *pProfile); * Or else construct one from the BSS Caller allocated memory for pWpaIe and * guarrantee it can contain a max length WPA IE */ -uint8_t csr_retrieve_wpa_ie(tpAniSirGlobal pMac, +uint8_t csr_retrieve_wpa_ie(tpAniSirGlobal pMac, uint8_t session_id, struct csr_roam_profile *pProfile, tSirBssDescription *pSirBssDesc, tDot11fBeaconIEs *pIes, tCsrWpaIe *pWpaIe); @@ -291,14 +291,12 @@ tAniEdType csr_translate_encrypt_type_to_ed_type( * pIes shall contain IEs from pSirBssDesc. * It shall be returned from function csr_get_parsed_bss_description_ies */ -bool csr_is_security_match(tpAniSirGlobal mac_ctx, tCsrAuthList *authType, - tCsrEncryptionList *pUCEncryptionType, - tCsrEncryptionList *pMCEncryptionType, bool *pMFPEnabled, - uint8_t *pMFPRequired, uint8_t *pMFPCapable, - tSirBssDescription *pSirBssDesc, tDot11fBeaconIEs *pIes, - eCsrAuthType *negotiatedAuthtype, - eCsrEncryptionType *negotiatedUCCipher, - eCsrEncryptionType *negotiatedMCCipher); +bool csr_is_security_match(tpAniSirGlobal mac_ctx, tCsrAuthList *auth_type, + tCsrEncryptionList *uc_enc_type, + tCsrEncryptionList *mc_enc_type, bool *mfp_enabled, + uint8_t *mfp_required, uint8_t *mfp_capable, + tSirBssDescription *bss_desc, + tDot11fBeaconIEs *ies_ptr, uint8_t session_id); bool csr_is_bss_type_match(eCsrRoamBssType bssType1, eCsrRoamBssType bssType2); bool csr_is_bss_type_ibss(eCsrRoamBssType bssType); bool csr_is_bssid_match(struct qdf_mac_addr *pProfBssid, diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h index 915923316478..f0abb0b65a8c 100644 --- a/core/sme/inc/sme_api.h +++ b/core/sme/inc/sme_api.h @@ -99,6 +99,8 @@ #define NUM_OF_BANDS 2 +#define SUPPORTED_CRYPTO_CAPS 0x1FFFF + #define SME_ACTIVE_LIST_CMD_TIMEOUT_VALUE (30*1000) #define SME_CMD_TIMEOUT_VALUE (SME_ACTIVE_LIST_CMD_TIMEOUT_VALUE + 1000) diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 6acd1abc7c6a..b8505f376eab 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -15972,6 +15972,7 @@ void sme_store_pdev(mac_handle_t mac_handle, struct wlan_objmgr_pdev *pdev) return; } wma_store_pdev(wma_handle, pdev); + pdev->pdev_nif.pdev_fw_caps |= SUPPORTED_CRYPTO_CAPS; } QDF_STATUS sme_congestion_register_callback(mac_handle_t mac_handle, diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 912d170a72a7..0c1257a76b06 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -15235,10 +15235,9 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId, /* rsnIE */ if (csr_is_profile_wpa(pProfile)) { /* Insert the Wpa IE into the join request */ - ieLen = - csr_retrieve_wpa_ie(pMac, pProfile, - pBssDescription, pIes, - (tCsrWpaIe *) (wpaRsnIE)); + ieLen = csr_retrieve_wpa_ie(pMac, sessionId, pProfile, + pBssDescription, pIes, + (tCsrWpaIe *) (wpaRsnIE)); } else if (csr_is_profile_rsn(pProfile)) { /* Insert the RSN IE into the join request */ ieLen = diff --git a/core/sme/src/csr/csr_neighbor_roam.c b/core/sme/src/csr/csr_neighbor_roam.c index 5d021a3e61a0..652b99ec955b 100644 --- a/core/sme/src/csr/csr_neighbor_roam.c +++ b/core/sme/src/csr/csr_neighbor_roam.c @@ -643,6 +643,7 @@ QDF_STATUS csr_neighbor_roam_merge_channel_lists(tpAniSirGlobal pMac, * @pCurProfile: pointer to current roam profile * @pBssDesc: pointer to bss description * @pIes: pointer to local ies + * @session_id: Session ID * * This routine will be called to see if SSID and security parameters * are matching. @@ -651,7 +652,8 @@ QDF_STATUS csr_neighbor_roam_merge_channel_lists(tpAniSirGlobal pMac, */ static bool csr_neighbor_roam_is_ssid_and_security_match(tpAniSirGlobal pMac, tCsrRoamConnectedProfile *pCurProfile, - tSirBssDescription *pBssDesc, tDot11fBeaconIEs *pIes) + tSirBssDescription *pBssDesc, tDot11fBeaconIEs *pIes, + uint8_t session_id) { tCsrAuthList authType; tCsrEncryptionList uCEncryptionType; @@ -693,13 +695,13 @@ static bool csr_neighbor_roam_is_ssid_and_security_match(tpAniSirGlobal pMac, &pCurProfile->MFPEnabled, &pCurProfile->MFPRequired, &pCurProfile->MFPCapable, - pBssDesc, pIes, NULL, NULL, NULL); + pBssDesc, pIes, session_id); #else fMatch = csr_is_security_match(pMac, &authType, &uCEncryptionType, &mCEncryptionType, NULL, NULL, NULL, pBssDesc, - pIes, NULL, NULL, NULL); + pIes, session_id); #endif return fMatch; } else { @@ -735,7 +737,7 @@ bool csr_neighbor_roam_is_new_connected_profile(tpAniSirGlobal pMac, if (QDF_IS_STATUS_SUCCESS( csr_get_parsed_bss_description_ies(pMac, pBssDesc, &pIes)) && csr_neighbor_roam_is_ssid_and_security_match(pMac, - pCurrProfile, pBssDesc, pIes)) { + pCurrProfile, pBssDesc, pIes, sessionId)) { fNew = false; } if (pIes) @@ -765,7 +767,8 @@ bool csr_neighbor_roam_connected_profile_match(tpAniSirGlobal pMac, return false; return csr_neighbor_roam_is_ssid_and_security_match(pMac, pCurProfile, - pBssDesc, pIes); + pBssDesc, pIes, + sessionId); } /** diff --git a/core/sme/src/csr/csr_util.c b/core/sme/src/csr/csr_util.c index e40b9ec84a7c..8e27f10a2d2e 100644 --- a/core/sme/src/csr/csr_util.c +++ b/core/sme/src/csr/csr_util.c @@ -32,6 +32,7 @@ #include "wlan_policy_mgr_api.h" #include "wlan_serialization_legacy_api.h" #include "wlan_reg_services_api.h" +#include "wlan_crypto_global_api.h" uint8_t csr_wpa_oui[][CSR_WPA_OUI_SIZE] = { @@ -2885,6 +2886,7 @@ static bool csr_match_wapi_oui_index(tpAniSirGlobal pMac, } #endif /* FEATURE_WLAN_WAPI */ +#ifndef WLAN_CONV_CRYPTO_IE_SUPPORT static bool csr_match_wpaoui_index(tpAniSirGlobal pMac, uint8_t AllCyphers[][CSR_RSN_OUI_SIZE], uint8_t cAllCyphers, uint8_t ouiIndex, @@ -2897,6 +2899,7 @@ static bool csr_match_wpaoui_index(tpAniSirGlobal pMac, else return false; } +#endif #ifdef FEATURE_WLAN_WAPI static bool csr_is_auth_wapi_cert(tpAniSirGlobal pMac, @@ -2957,6 +2960,7 @@ static bool csr_is_ese_cckm_auth_rsn(tpAniSirGlobal pMac, (pMac, AllSuites, cAllSuites, csr_rsn_oui[06], Oui); } +#ifndef WLAN_CONV_CRYPTO_IE_SUPPORT static bool csr_is_ese_cckm_auth_wpa(tpAniSirGlobal pMac, uint8_t AllSuites[][CSR_WPA_OUI_SIZE], uint8_t cAllSuites, uint8_t Oui[]) @@ -2964,6 +2968,7 @@ static bool csr_is_ese_cckm_auth_wpa(tpAniSirGlobal pMac, return csr_is_oui_match (pMac, AllSuites, cAllSuites, csr_wpa_oui[06], Oui); } +#endif #endif @@ -3157,6 +3162,7 @@ static bool csr_is_auth_wpa_sae(tpAniSirGlobal mac, } #endif +#ifndef WLAN_CONV_CRYPTO_IE_SUPPORT static bool csr_is_auth_wpa(tpAniSirGlobal pMac, uint8_t AllSuites[][CSR_WPA_OUI_SIZE], uint8_t cAllSuites, uint8_t Oui[]) @@ -3172,6 +3178,7 @@ static bool csr_is_auth_wpa_psk(tpAniSirGlobal pMac, return csr_is_oui_match (pMac, AllSuites, cAllSuites, csr_wpa_oui[02], Oui); } +#endif /* * csr_is_group_mgmt_gmac_128() - check whether oui is GMAC_128 @@ -3707,6 +3714,7 @@ static bool csr_is_rsn_match(tpAniSirGlobal mac_ctx, tCsrAuthList *pAuthType, return fRSNMatch; } +#ifndef WLAN_CONV_CRYPTO_IE_SUPPORT /** * csr_lookup_pmkid_using_ssid() - lookup pmkid using ssid and cache_id * @mac: pointer to mac @@ -3746,6 +3754,7 @@ static bool csr_lookup_pmkid_using_ssid(tpAniSirGlobal mac, return false; } +#endif bool csr_lookup_pmkid_using_bssid(tpAniSirGlobal mac, struct csr_roam_session *session, @@ -3772,6 +3781,7 @@ bool csr_lookup_pmkid_using_bssid(tpAniSirGlobal mac, return false; } +#ifndef WLAN_CONV_CRYPTO_IE_SUPPORT /** * csr_lookup_pmkid() - lookup pmkid using bssid or ssid + cache_id * @mac: pointer to mac @@ -3825,8 +3835,10 @@ static bool csr_lookup_pmkid(tpAniSirGlobal pMac, uint32_t sessionId, return fRC; } +#endif #ifdef WLAN_FEATURE_FILS_SK +#ifndef WLAN_CONV_CRYPTO_IE_SUPPORT /* * csr_update_pmksa_for_cache_id: update tPmkidCacheInfo to lookup using * ssid and cache id @@ -3857,7 +3869,7 @@ static bool csr_update_pmksa_for_cache_id(tSirBssDescription *bss_desc, return true; } - +#endif /* * csr_update_pmksa_to_profile: update pmk and pmkid to profile which will be * used in case of fils session @@ -3893,6 +3905,32 @@ static inline void csr_update_pmksa_to_profile(struct csr_roam_profile *profile, } #endif +#ifdef WLAN_CONV_CRYPTO_IE_SUPPORT +uint8_t csr_construct_rsn_ie(tpAniSirGlobal pMac, uint32_t sessionId, + struct csr_roam_profile *pProfile, + tSirBssDescription *pSirBssDesc, + tDot11fBeaconIEs *pIes, tCsrRSNIe *pRSNIe) +{ + struct wlan_objmgr_vdev *vdev; + uint8_t *rsn_ie_end = NULL; + uint8_t *rsn_ie = (uint8_t *)pRSNIe; + uint8_t ie_len = 0; + + vdev = wlan_objmgr_get_vdev_by_id_from_psoc(pMac->psoc, sessionId, + WLAN_LEGACY_SME_ID); + if (!vdev) { + sme_err("Invalid vdev"); + return ie_len; + } + rsn_ie_end = wlan_crypto_build_rsnie(vdev, rsn_ie); + if (rsn_ie_end) + ie_len = rsn_ie_end - rsn_ie; + + wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID); + + return ie_len; +} +#else /** * csr_update_session_pmk() - Update the pmk len and pmk in the roam session * @session: pointer to the CSR Roam session @@ -4110,6 +4148,7 @@ uint8_t csr_construct_rsn_ie(tpAniSirGlobal pMac, uint32_t sessionId, return cbRSNIe; } +#endif #ifdef FEATURE_WLAN_WAPI /** @@ -4265,6 +4304,7 @@ static bool csr_is_wapi_match(tpAniSirGlobal mac_ctx, tCsrAuthList *pAuthType, return fWapiMatch; } +#ifndef WLAN_CONV_CRYPTO_IE_SUPPORT static bool csr_lookup_bkid(tpAniSirGlobal pMac, uint32_t sessionId, uint8_t *pBSSId, uint8_t *pBKId) { @@ -4304,7 +4344,34 @@ static bool csr_lookup_bkid(tpAniSirGlobal pMac, uint32_t sessionId, return fRC; } +#endif +#ifdef WLAN_CONV_CRYPTO_IE_SUPPORT +uint8_t csr_construct_wapi_ie(tpAniSirGlobal pMac, uint32_t sessionId, + struct csr_roam_profile *pProfile, + tSirBssDescription *pSirBssDesc, + tDot11fBeaconIEs *pIes, tCsrWapiIe *pWapiIe) +{ + struct wlan_objmgr_vdev *vdev; + uint8_t *wapi_ie_end = NULL; + uint8_t *wapi_ie = (uint8_t *)pWapiIe; + uint8_t ie_len = 0; + + vdev = wlan_objmgr_get_vdev_by_id_from_psoc(pMac->psoc, sessionId, + WLAN_LEGACY_SME_ID); + if (!vdev) { + sme_err("Invalid vdev"); + return ie_len; + } + wapi_ie_end = wlan_crypto_build_wapiie(vdev, wapi_ie); + if (wapi_ie_end) + ie_len = wapi_ie_end - wapi_ie; + + wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID); + + return ie_len; +} +#else uint8_t csr_construct_wapi_ie(tpAniSirGlobal pMac, uint32_t sessionId, struct csr_roam_profile *pProfile, tSirBssDescription *pSirBssDesc, @@ -4410,8 +4477,10 @@ uint8_t csr_construct_wapi_ie(tpAniSirGlobal pMac, uint32_t sessionId, return cbWapiIe; } +#endif #endif /* FEATURE_WLAN_WAPI */ +#ifndef WLAN_CONV_CRYPTO_IE_SUPPORT /** * csr_get_wpa_cyphers() - to get WPA cipher info * @mac_ctx: pointer to mac context @@ -4580,8 +4649,35 @@ static bool csr_is_wpa_encryption_match(tpAniSirGlobal pMac, return fWpaMatch; } +#endif -uint8_t csr_construct_wpa_ie(tpAniSirGlobal pMac, +#ifdef WLAN_CONV_CRYPTO_IE_SUPPORT +uint8_t csr_construct_wpa_ie(tpAniSirGlobal pMac, uint8_t session_id, + struct csr_roam_profile *pProfile, + tSirBssDescription *pSirBssDesc, + tDot11fBeaconIEs *pIes, tCsrWpaIe *pWpaIe) +{ + struct wlan_objmgr_vdev *vdev; + uint8_t *wpa_ie_end = NULL; + uint8_t *wpa_ie = (uint8_t *)pWpaIe; + uint8_t ie_len = 0; + + vdev = wlan_objmgr_get_vdev_by_id_from_psoc(pMac->psoc, session_id, + WLAN_LEGACY_SME_ID); + if (!vdev) { + sme_err("Invalid vdev"); + return ie_len; + } + wpa_ie_end = wlan_crypto_build_wpaie(vdev, wpa_ie); + if (wpa_ie_end) + ie_len = wpa_ie_end - wpa_ie; + + wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID); + + return ie_len; +} +#else +uint8_t csr_construct_wpa_ie(tpAniSirGlobal pMac, uint8_t session_id, struct csr_roam_profile *pProfile, tSirBssDescription *pSirBssDesc, tDot11fBeaconIEs *pIes, tCsrWpaIe *pWpaIe) @@ -4662,12 +4758,13 @@ uint8_t csr_construct_wpa_ie(tpAniSirGlobal pMac, return cbWpaIe; } +#endif /* If a WPAIE exists in the profile, just use it. Or else construct * one from the BSS Caller allocated memory for pWpaIe and guarrantee * it can contain a max length WPA IE */ -uint8_t csr_retrieve_wpa_ie(tpAniSirGlobal pMac, +uint8_t csr_retrieve_wpa_ie(tpAniSirGlobal pMac, uint8_t session_id, struct csr_roam_profile *pProfile, tSirBssDescription *pSirBssDesc, tDot11fBeaconIEs *pIes, tCsrWpaIe *pWpaIe) @@ -4683,12 +4780,14 @@ uint8_t csr_retrieve_wpa_ie(tpAniSirGlobal pMac, cbWpaIe = (uint8_t) pProfile->nWPAReqIELength; qdf_mem_copy(pWpaIe, pProfile->pWPAReqIE, cbWpaIe); - } else - sme_warn("Invalid WPA IE length: %d", - pProfile->nWPAReqIELength); - } else - cbWpaIe = csr_construct_wpa_ie(pMac, pProfile, - pSirBssDesc, pIes, pWpaIe); + } else { + sme_warn("Invalid WPA IE length %d", + pProfile->nWPAReqIELength); + } + break; + } + cbWpaIe = csr_construct_wpa_ie(pMac, session_id, pProfile, + pSirBssDesc, pIes, pWpaIe); } while (0); return cbWpaIe; @@ -4719,11 +4818,10 @@ uint8_t csr_retrieve_rsn_ie(tpAniSirGlobal pMac, uint32_t sessionId, cbRsnIe); } else { sme_warn("Invalid RSN IE length: %d", - pProfile->nRSNReqIELength); + pProfile->nRSNReqIELength); } break; } - cbRsnIe = csr_construct_rsn_ie(pMac, sessionId, pProfile, pSirBssDesc, pIes, pRsnIe); } while (0); @@ -4752,13 +4850,15 @@ uint8_t csr_retrieve_wapi_ie(tpAniSirGlobal pMac, uint32_t sessionId, cbWapiIe = (uint8_t) pProfile->nWAPIReqIELength; qdf_mem_copy(pWapiIe, pProfile->pWAPIReqIE, cbWapiIe); - } else - sme_warn("Invalid WAPI IE length: %d", - pProfile->nWAPIReqIELength); - } else - cbWapiIe = - csr_construct_wapi_ie(pMac, sessionId, pProfile, - pSirBssDesc, pIes, pWapiIe); + } else { + sme_warn("Invalid WAPI IE length %d", + pProfile->nWAPIReqIELength); + } + break; + } + cbWapiIe = csr_construct_wapi_ie(pMac, sessionId, + pProfile, pSirBssDesc, + pIes, pWapiIe); } while (0); return cbWapiIe; @@ -4885,20 +4985,16 @@ static bool csr_validate_wep(tpAniSirGlobal mac_ctx, eCsrEncryptionType uc_encry_type, tCsrAuthList *auth_list, tCsrEncryptionList *mc_encryption_list, - eCsrAuthType *negotiated_authtype, - eCsrEncryptionType *negotiated_mc_encry, tSirBssDescription *bss_descr, tDot11fBeaconIEs *ie_ptr) { uint32_t idx; bool match = false; - eCsrAuthType negotiated_auth = eCSR_AUTH_TYPE_OPEN_SYSTEM; - eCsrEncryptionType negotiated_mccipher = eCSR_ENCRYPT_TYPE_UNKNOWN; uint8_t oui_index; /* If privacy bit is not set, consider no match */ if (!csr_is_privacy(bss_descr)) - goto end; + return match; for (idx = 0; idx < mc_encryption_list->numEntries; idx++) { switch (mc_encryption_list->encryptionType[idx]) { @@ -4913,8 +5009,6 @@ static bool csr_validate_wep(tpAniSirGlobal mac_ctx, if (uc_encry_type == mc_encryption_list->encryptionType[idx]) { match = true; - negotiated_mccipher = - mc_encryption_list->encryptionType[idx]; } break; default: @@ -4926,7 +5020,7 @@ static bool csr_validate_wep(tpAniSirGlobal mac_ctx, } if (!match) - goto end; + return match; for (idx = 0; idx < auth_list->numEntries; idx++) { switch (auth_list->authType[idx]) { @@ -4934,7 +5028,6 @@ static bool csr_validate_wep(tpAniSirGlobal mac_ctx, case eCSR_AUTH_TYPE_SHARED_KEY: case eCSR_AUTH_TYPE_AUTOSWITCH: match = true; - negotiated_auth = auth_list->authType[idx]; break; default: match = false; @@ -4944,10 +5037,10 @@ static bool csr_validate_wep(tpAniSirGlobal mac_ctx, } if (!match) - goto end; + return match; if (!ie_ptr) - goto end; + return match; /* * In case of WPA / WPA2, check whether it supports WEP as well. @@ -4966,7 +5059,7 @@ static bool csr_validate_wep(tpAniSirGlobal mac_ctx, csr_wpa_oui[oui_index], CSR_WPA_OUI_SIZE)); if (match) - goto end; + return match; } if (ie_ptr->RSN.present) { match = (!qdf_mem_cmp(ie_ptr->RSN.gp_cipher_suite, @@ -4975,17 +5068,10 @@ static bool csr_validate_wep(tpAniSirGlobal mac_ctx, CSR_RSN_OUI_SIZE)); } - -end: - if (match) { - if (negotiated_authtype) - *negotiated_authtype = negotiated_auth; - if (negotiated_mc_encry) - *negotiated_mc_encry = negotiated_mccipher; - } return match; } +#ifndef WLAN_CONV_CRYPTO_IE_SUPPORT /** * csr_validate_open_none() - Check if the security is matching * @bss_desc: BSS Descriptor on which the check is done @@ -4997,8 +5083,8 @@ end: * Return: Boolean value to tell if matched or not. */ static bool csr_validate_open_none(tSirBssDescription *bss_desc, - tCsrEncryptionList *mc_enc_type, eCsrEncryptionType *mc_cipher, - tCsrAuthList *auth_type, eCsrAuthType *neg_auth_type) + tCsrEncryptionList *mc_enc_type, + tCsrAuthList *auth_type) { bool match; uint8_t idx; @@ -5019,7 +5105,6 @@ static bool csr_validate_open_none(tSirBssDescription *bss_desc, if (eCSR_ENCRYPT_TYPE_NONE == mc_enc_type->encryptionType[idx]) { match = true; - *mc_cipher = mc_enc_type->encryptionType[idx]; break; } } @@ -5034,8 +5119,6 @@ static bool csr_validate_open_none(tSirBssDescription *bss_desc, (eCSR_AUTH_TYPE_AUTOSWITCH == auth_type->authType[idx])) { match = true; - *neg_auth_type = - eCSR_AUTH_TYPE_OPEN_SYSTEM; break; } } @@ -5045,7 +5128,7 @@ static bool csr_validate_open_none(tSirBssDescription *bss_desc, } return match; } - +#endif /** * csr_validate_any_default() - Check if the security is matching * @mac_ctx: Global MAC context @@ -5119,19 +5202,19 @@ static bool csr_validate_any_default(tpAniSirGlobal mac_ctx, return match; *uc_cipher = eCSR_ENCRYPT_TYPE_WEP104; if (csr_validate_wep(mac_ctx, *uc_cipher, auth_type, mc_enc_type, - neg_auth_type, mc_cipher, bss_desc, ies_ptr)) + bss_desc, ies_ptr)) return match; *uc_cipher = eCSR_ENCRYPT_TYPE_WEP40; if (csr_validate_wep(mac_ctx, *uc_cipher, auth_type, mc_enc_type, - neg_auth_type, mc_cipher, bss_desc, ies_ptr)) + bss_desc, ies_ptr)) return match; *uc_cipher = eCSR_ENCRYPT_TYPE_WEP104_STATICKEY; if (csr_validate_wep(mac_ctx, *uc_cipher, auth_type, mc_enc_type, - neg_auth_type, mc_cipher, bss_desc, ies_ptr)) + bss_desc, ies_ptr)) return match; *uc_cipher = eCSR_ENCRYPT_TYPE_WEP40_STATICKEY; if (csr_validate_wep(mac_ctx, *uc_cipher, auth_type, mc_enc_type, - neg_auth_type, mc_cipher, bss_desc, ies_ptr)) + bss_desc, ies_ptr)) return match; /* It must be open and no enc */ if (csr_is_privacy(bss_desc)) { @@ -5157,26 +5240,24 @@ static bool csr_validate_any_default(tpAniSirGlobal mac_ctx, * @mfp_capable: Device capable of MFP * @bss_desc: BSS Descriptor * @ies_ptr: Pointer to the IE fields - * @neg_auth_type: Negotiated Auth type with the AP - * @neg_uc_cipher: Negotiated unicast cipher suite - * @neg_mc_cipher: Negotiated multicast cipher + * @session_id: Session Id * * Return: Boolean value to tell if matched or not. */ bool csr_is_security_match(tpAniSirGlobal mac_ctx, tCsrAuthList *auth_type, - tCsrEncryptionList *uc_enc_type, - tCsrEncryptionList *mc_enc_type, bool *mfp_enabled, - uint8_t *mfp_required, uint8_t *mfp_capable, - tSirBssDescription *bss_desc, tDot11fBeaconIEs *ies_ptr, - eCsrAuthType *neg_auth_type, - eCsrEncryptionType *neg_uc_cipher, - eCsrEncryptionType *neg_mc_cipher) + tCsrEncryptionList *uc_enc_type, + tCsrEncryptionList *mc_enc_type, bool *mfp_enabled, + uint8_t *mfp_required, uint8_t *mfp_capable, + tSirBssDescription *bss_desc, + tDot11fBeaconIEs *ies_ptr, uint8_t session_id) { bool match = false; uint8_t i; - eCsrEncryptionType mc_cipher = eCSR_ENCRYPT_TYPE_UNKNOWN; eCsrEncryptionType uc_cipher = eCSR_ENCRYPT_TYPE_UNKNOWN; - eCsrAuthType local_neg_auth_type = eCSR_AUTH_TYPE_UNKNOWN; + uint16_t ie_len; + + ie_len = (bss_desc->length + sizeof(bss_desc->length) - + GET_FIELD_OFFSET(tSirBssDescription, ieFields)); for (i = 0; ((i < uc_enc_type->numEntries) && (!match)); i++) { uc_cipher = uc_enc_type->encryptionType[i]; @@ -5188,13 +5269,22 @@ bool csr_is_security_match(tpAniSirGlobal mac_ctx, tCsrAuthList *auth_type, */ switch (uc_cipher) { case eCSR_ENCRYPT_TYPE_NONE: +#ifdef WLAN_CONV_CRYPTO_IE_SUPPORT + if (csr_is_privacy(bss_desc)) + return false; + + match = wlan_crypto_check_open_none(mac_ctx->psoc, + session_id); +#else match = csr_validate_open_none(bss_desc, mc_enc_type, - &mc_cipher, auth_type, - &local_neg_auth_type); + auth_type); +#endif break; case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY: case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY: + case eCSR_ENCRYPT_TYPE_WEP40: + case eCSR_ENCRYPT_TYPE_WEP104: /* * !! might want to check for WEP keys set in the * Profile.... ? !! don't need to have the privacy bit @@ -5204,19 +5294,19 @@ bool csr_is_security_match(tpAniSirGlobal mac_ctx, tCsrAuthList *auth_type, * encryption is not allowed without the Privacy bit * turned on. */ +#ifdef WLAN_CONV_CRYPTO_IE_SUPPORT + if (!csr_is_privacy(bss_desc)) + return false; + + match = wlan_crypto_check_wep(mac_ctx->psoc, + session_id); +#else match = csr_validate_wep(mac_ctx, uc_cipher, auth_type, - mc_enc_type, &local_neg_auth_type, - &mc_cipher, bss_desc, ies_ptr); + mc_enc_type, bss_desc, + ies_ptr); +#endif break; - /* these are all of the WPA encryption types... */ - case eCSR_ENCRYPT_TYPE_WEP40: - case eCSR_ENCRYPT_TYPE_WEP104: - match = csr_validate_wep(mac_ctx, uc_cipher, auth_type, - mc_enc_type, &local_neg_auth_type, - &mc_cipher, bss_desc, ies_ptr); - break; - case eCSR_ENCRYPT_TYPE_TKIP: case eCSR_ENCRYPT_TYPE_AES: case eCSR_ENCRYPT_TYPE_AES_GCMP: @@ -5225,29 +5315,41 @@ bool csr_is_security_match(tpAniSirGlobal mac_ctx, tCsrAuthList *auth_type, match = false; break; } +#ifdef WLAN_CONV_CRYPTO_IE_SUPPORT + match = wlan_crypto_check_rsn_match(mac_ctx->psoc, + session_id, + (uint8_t *) + &bss_desc->ieFields, + ie_len); + if (match) + break; + match = wlan_crypto_check_wpa_match(mac_ctx->psoc, + session_id, + (uint8_t *) + &bss_desc->ieFields, + ie_len); +#else /* First check if there is a RSN match */ match = csr_is_rsn_match(mac_ctx, auth_type, uc_cipher, mc_enc_type, mfp_enabled, mfp_required, mfp_capable, ies_ptr, - &local_neg_auth_type, - &mc_cipher); + NULL, NULL); /* If not RSN, then check WPA match */ if (!match) match = csr_is_wpa_encryption_match( mac_ctx, auth_type, uc_cipher, mc_enc_type, ies_ptr, - &local_neg_auth_type, - &mc_cipher); + NULL, NULL); +#endif break; #ifdef FEATURE_WLAN_WAPI case eCSR_ENCRYPT_TYPE_WPI: /* WAPI */ if (ies_ptr) match = csr_is_wapi_match(mac_ctx, auth_type, uc_cipher, mc_enc_type, ies_ptr, - &local_neg_auth_type, - &mc_cipher); + NULL, NULL); else match = false; break; @@ -5257,21 +5359,13 @@ bool csr_is_security_match(tpAniSirGlobal mac_ctx, tCsrAuthList *auth_type, match = csr_validate_any_default(mac_ctx, auth_type, mc_enc_type, mfp_enabled, mfp_required, mfp_capable, ies_ptr, - &local_neg_auth_type, bss_desc, - &uc_cipher, &mc_cipher); + NULL, bss_desc, + &uc_cipher, NULL); break; } } - if (match) { - if (neg_uc_cipher) - *neg_uc_cipher = uc_cipher; - if (neg_mc_cipher) - *neg_mc_cipher = mc_cipher; - if (neg_auth_type) - *neg_auth_type = local_neg_auth_type; - } return match; }