فهرست منبع

qcacld-3.0: Fix compilation issue for 32 bit builds

In function csr_roam_chk_lnk_disassoc_ind frame size
exceeds 1024 bytes. Because of this compilation fails
on 32 bit systems as there is stack check flag on
32-bit compilation.

Fix is to convert stack allocations to dynamic memory
allocation.

Change-Id: I7c91bc0ed91796ba4dac9c85ea4b1b6f2d8a6ee5
CRs-Fixed: 1055344
Aggarwal Nishank 8 سال پیش
والد
کامیت
51dece43e2
1فایلهای تغییر یافته به همراه17 افزوده شده و 6 حذف شده
  1. 17 6
      core/sme/src/csr/csr_api_roam.c

+ 17 - 6
core/sme/src/csr/csr_api_roam.c

@@ -10287,9 +10287,17 @@ csr_roam_chk_lnk_disassoc_ind(tpAniSirGlobal mac_ctx, tSirSmeRsp *msg_ptr)
 	QDF_STATUS status;
 	tCsrRoamInfo *roam_info_ptr = NULL;
 	tSirSmeDisassocInd *pDisassocInd;
-	tSmeCmd cmd;
+	tSmeCmd *cmd;
 	tCsrRoamInfo roam_info;
 
+	cmd = qdf_mem_malloc(sizeof(*cmd));
+	if (NULL == cmd) {
+		sms_log(mac_ctx, LOGE,
+			FL("memory allocation failed for size = %ld"),
+			sizeof(*cmd));
+		return;
+	}
+
 	/*
 	 * Check if AP dis-associated us because of MIC failure. If so,
 	 * then we need to take action immediately and not wait till the
@@ -10303,6 +10311,7 @@ csr_roam_chk_lnk_disassoc_ind(tpAniSirGlobal mac_ctx, tSirSmeRsp *msg_ptr)
 		sms_log(mac_ctx, LOGE, FL("Session Id not found for BSSID "
 			MAC_ADDRESS_STR),
 			MAC_ADDR_ARRAY(pDisassocInd->bssid.bytes));
+		qdf_mem_free(cmd);
 		return;
 	}
 
@@ -10338,6 +10347,7 @@ csr_roam_chk_lnk_disassoc_ind(tpAniSirGlobal mac_ctx, tSirSmeRsp *msg_ptr)
 	session = CSR_GET_SESSION(mac_ctx, sessionId);
 	if (!session) {
 		sms_log(mac_ctx, LOGE, FL("session %d not found"), sessionId);
+		qdf_mem_free(cmd);
 		return;
 	}
 	if (csr_is_conn_state_infra(mac_ctx, sessionId))
@@ -10367,15 +10377,16 @@ csr_roam_chk_lnk_disassoc_ind(tpAniSirGlobal mac_ctx, tSirSmeRsp *msg_ptr)
 		 * STA/P2P client got  disassociated so remove any pending
 		 * deauth commands in sme pending list
 		 */
-		cmd.command = eSmeCommandRoam;
-		cmd.sessionId = (uint8_t) sessionId;
-		cmd.u.roamCmd.roamReason = eCsrForcedDeauthSta;
-		qdf_mem_copy(cmd.u.roamCmd.peerMac,
+		cmd->command = eSmeCommandRoam;
+		cmd->sessionId = (uint8_t) sessionId;
+		cmd->u.roamCmd.roamReason = eCsrForcedDeauthSta;
+		qdf_mem_copy(cmd->u.roamCmd.peerMac,
 			     pDisassocInd->peer_macaddr.bytes,
 			     QDF_MAC_ADDR_SIZE);
-		csr_roam_remove_duplicate_command(mac_ctx, sessionId, &cmd,
+		csr_roam_remove_duplicate_command(mac_ctx, sessionId, cmd,
 						  eCsrForcedDeauthSta);
 	}
+	qdf_mem_free(cmd);
 }
 
 static void