Эх сурвалжийг харах

qcacld-3.0: Reduce stack frame size in lim_check_rsn_ie

Reduce stack frame size of lim_check_rsn_ie()
by allocating dynamic memory to tSirMacRsnInfo.

Change-Id: I4e65282a765854085cef9ac887716c440a699d84
CRs-Fixed: 2850232
Dundi Raviteja 4 жил өмнө
parent
commit
1c569db101

+ 16 - 6
core/mac/src/pe/lim/lim_process_assoc_req_frame.c

@@ -826,23 +826,30 @@ enum wlan_status_code lim_check_rsn_ie(struct pe_session *session,
 				      bool *pmf_connection)
 				      bool *pmf_connection)
 {
 {
 	struct wlan_objmgr_vdev *vdev;
 	struct wlan_objmgr_vdev *vdev;
-	tSirMacRsnInfo rsn_ie;
+	tSirMacRsnInfo *rsn_ie;
 	struct wlan_crypto_params peer_crypto_params;
 	struct wlan_crypto_params peer_crypto_params;
 
 
-	rsn_ie.info[0] = WLAN_ELEMID_RSN;
-	rsn_ie.info[1] = assoc_req->rsn.length;
+	rsn_ie = qdf_mem_malloc(sizeof(*rsn_ie));
+	if (!rsn_ie) {
+		pe_err("malloc failed for rsn_ie");
+		return STATUS_UNSPECIFIED_FAILURE;
+	}
+
+	rsn_ie->info[0] = WLAN_ELEMID_RSN;
+	rsn_ie->info[1] = assoc_req->rsn.length;
 
 
-	rsn_ie.length = assoc_req->rsn.length + 2;
-	qdf_mem_copy(&rsn_ie.info[2], assoc_req->rsn.info,
+	rsn_ie->length = assoc_req->rsn.length + 2;
+	qdf_mem_copy(&rsn_ie->info[2], assoc_req->rsn.info,
 		     assoc_req->rsn.length);
 		     assoc_req->rsn.length);
 	if (wlan_crypto_check_rsn_match(mac_ctx->psoc, session->smeSessionId,
 	if (wlan_crypto_check_rsn_match(mac_ctx->psoc, session->smeSessionId,
-					&rsn_ie.info[0], rsn_ie.length,
+					&rsn_ie->info[0], rsn_ie->length,
 					&peer_crypto_params)) {
 					&peer_crypto_params)) {
 		vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac_ctx->psoc,
 		vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac_ctx->psoc,
 							session->smeSessionId,
 							session->smeSessionId,
 							WLAN_LEGACY_MAC_ID);
 							WLAN_LEGACY_MAC_ID);
 		if (!vdev) {
 		if (!vdev) {
 			pe_err("vdev is NULL");
 			pe_err("vdev is NULL");
+			qdf_mem_free(rsn_ie);
 			return STATUS_UNSPECIFIED_FAILURE;
 			return STATUS_UNSPECIFIED_FAILURE;
 		}
 		}
 		if ((peer_crypto_params.rsn_caps &
 		if ((peer_crypto_params.rsn_caps &
@@ -851,12 +858,15 @@ enum wlan_status_code lim_check_rsn_ie(struct pe_session *session,
 			*pmf_connection = true;
 			*pmf_connection = true;
 
 
 		wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
 		wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
+		qdf_mem_free(rsn_ie);
 		return lim_check_crypto_param(assoc_req, &peer_crypto_params);
 		return lim_check_crypto_param(assoc_req, &peer_crypto_params);
 
 
 	} else {
 	} else {
+		qdf_mem_free(rsn_ie);
 		return STATUS_INVALID_IE;
 		return STATUS_INVALID_IE;
 	}
 	}
 
 
+	qdf_mem_free(rsn_ie);
 	return STATUS_SUCCESS;
 	return STATUS_SUCCESS;
 }
 }