Selaa lähdekoodia

qcacld-3.0: Fix FILS auth failure in connection manager

Fix FILS auth failure in connection manager.

Change-Id: I727d374a820375110723a081cd3a27828e92ba66
CRs-Fixed: 2865370
gaurank kathpalia 4 vuotta sitten
vanhempi
sitoutus
c13a047628

+ 24 - 4
components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_connect.c

@@ -70,6 +70,8 @@ void cm_update_hlp_info(struct wlan_objmgr_vdev *vdev,
 	qdf_mem_copy(mlme_priv->connect_info.hlp_ie +
 		     mlme_priv->connect_info.hlp_ie_len, gen_ie, len);
 	mlme_priv->connect_info.hlp_ie_len += len;
+	mlme_debug("hlp_ie_len %d len %d", mlme_priv->connect_info.hlp_ie_len,
+		   len);
 }
 #endif
 
@@ -842,14 +844,32 @@ QDF_STATUS wlan_cm_send_connect_rsp(struct scheduler_msg *msg)
 	return status;
 }
 
+#define FILS_HLP_OUI_TYPE "\x5"
+#define FILS_HLP_OUI_LEN 1
+
 static void
 cm_update_hlp_data_from_assoc_ie(struct wlan_objmgr_vdev *vdev,
 				 struct wlan_cm_vdev_connect_req *req)
 {
-	/*
-	 * loop through req->assoc IE and fill hld date from
-	 * DOT11F_EID_FRAGMENT_IE and SIR_FILS_HLP_EXT_EID
-	 */
+	const uint8_t *hlp_ext_ie;
+	const uint8_t *fragment_ie;
+
+	/* clear hlp IE */
+	cm_update_hlp_info(vdev, NULL, 0, true);
+
+	hlp_ext_ie = wlan_get_ext_ie_ptr_from_ext_id(FILS_HLP_OUI_TYPE,
+						     FILS_HLP_OUI_LEN,
+						     req->assoc_ie.ptr,
+						     req->assoc_ie.len);
+	if (hlp_ext_ie)
+		cm_update_hlp_info(vdev, hlp_ext_ie, hlp_ext_ie[1] + 2, false);
+
+	fragment_ie = wlan_get_ie_ptr_from_eid(DOT11F_EID_FRAGMENT_IE,
+					       req->assoc_ie.ptr,
+					       req->assoc_ie.len);
+	if (fragment_ie)
+		cm_update_hlp_info(vdev, fragment_ie,
+				   fragment_ie[1] + 2, false);
 }
 
 QDF_STATUS

+ 4 - 0
core/mac/src/pe/lim/lim_process_mlm_req_messages.c

@@ -714,6 +714,10 @@ static void lim_process_mlm_auth_req(struct mac_context *mac_ctx, uint32_t *msg)
 		 * Unexpected auth request.
 		 * Return Auth confirm with Invalid parameters code.
 		 */
+		pe_err("Auth req not expected is_privacy_enabled %d is_auth_open_system %d auth type %d",
+			mac_ctx->mlme_cfg->wep_params.is_privacy_enabled,
+			mac_ctx->mlme_cfg->wep_params.is_auth_open_system,
+			mac_ctx->lim.gpLimMlmAuthReq->authType);
 		mlm_auth_cnf.resultCode = eSIR_SME_INVALID_PARAMETERS;
 		goto end;
 	}

+ 4 - 1
core/mac/src/pe/lim/lim_process_sme_req_messages.c

@@ -3136,7 +3136,7 @@ static void lim_fill_crypto_params(struct mac_context *mac_ctx,
 		privacy = true;
 		rsn_enabled = false;
 	} else if (QDF_HAS_PARAM(ucast_cipher, WLAN_CRYPTO_CIPHER_TKIP) ||
-		   QDF_HAS_PARAM(ucast_cipher, WLAN_CRYPTO_CIPHER_AES_CMAC) ||
+		   QDF_HAS_PARAM(ucast_cipher, WLAN_CRYPTO_CIPHER_AES_CCM) ||
 		   QDF_HAS_PARAM(ucast_cipher, WLAN_CRYPTO_CIPHER_AES_OCB) ||
 		   QDF_HAS_PARAM(ucast_cipher,
 				 WLAN_CRYPTO_CIPHER_AES_CCM_256) ||
@@ -3155,6 +3155,9 @@ static void lim_fill_crypto_params(struct mac_context *mac_ctx,
 	mac_ctx->mlme_cfg->feature_flags.enable_rsn = rsn_enabled;
 	mac_ctx->mlme_cfg->wep_params.is_privacy_enabled = privacy;
 	mac_ctx->mlme_cfg->wep_params.wep_default_key_id = 0;
+	pe_debug("rsn_enabled %d privacy %d ucast_cipher %x auth_mode %x akm %x auth_type %d",
+		 rsn_enabled, privacy, ucast_cipher, auth_mode, akm,
+		 mac_ctx->mlme_cfg->wep_params.auth_type);
 	session->encryptType = lim_get_encrypt_ed_type(ucast_cipher);
 	session->connected_akm = lim_get_connected_akm(session, ucast_cipher,
 						       auth_mode, akm);