Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 12d5b3ff authored by Srinivas Dasari's avatar Srinivas Dasari Committed by derfelot
Browse files

qcacld-3.0: Send assoc reject upon failing to post ASSOC_IND



Currently, lim silently drops the association if it fails to
post ASSOC_IND due to some reason(e.g. invalid contents of
assoc request) and the MLM state is stuck in
eLIM_MLM_WT_ASSOC_CNF_STATE. Station context is not cleaned up
till the next association. Gracefully cleanup the association
in such failure cases.

Change-Id: Iede43a1ddc4ac6ef300af02776b153b58dd70c2c
CRs-Fixed: 2810235
Signed-off-by: default avatarderfelot <derfelot.git@gmail.com>
parent dfa214a7
Loading
Loading
Loading
Loading
+9 −19
Original line number Diff line number Diff line
/*
 * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
 * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
 *
 * Permission to use, copy, modify, and/or distribute this software for
 * any purpose with or without fee is hereby granted, provided that the
@@ -2250,19 +2250,9 @@ static void fill_mlm_assoc_ind_vht(tpSirAssocReq assocreq,
	}
}

/**
 * lim_send_mlm_assoc_ind() - Sends assoc indication to SME
 * @mac_ctx: Global Mac context
 * @sta_ds: Station DPH hash entry
 * @session_entry: PE session entry
 *
 * This function sends either LIM_MLM_ASSOC_IND
 * or LIM_MLM_REASSOC_IND to SME.
 *
 * Return: None
 */
void lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,
	tpDphHashNode sta_ds, tpPESession session_entry)
QDF_STATUS lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,
				  tpDphHashNode sta_ds,
				  tpPESession session_entry)
{
	tpLimMlmAssocInd assoc_ind = NULL;
	tpSirAssocReq assoc_req;
@@ -2275,7 +2265,7 @@ void lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,

	if (!session_entry->parsedAssocReq) {
		pe_err(" Parsed Assoc req is NULL");
		return;
		return QDF_STATUS_E_INVAL;
	}

	/* Get a copy of the already parsed Assoc Request */
@@ -2284,7 +2274,7 @@ void lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,

	if (!assoc_req) {
		pe_err("assoc req for assoc_id:%d is NULL", sta_ds->assocId);
		return;
		return QDF_STATUS_E_INVAL;
	}

	/* Get the phy_mode */
@@ -2309,7 +2299,7 @@ void lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,
			lim_release_peer_idx(mac_ctx, sta_ds->assocId,
				session_entry);
			pe_err("AllocateMemory failed for assoc_ind");
			return;
			return QDF_STATUS_E_NOMEM;
		}
		qdf_mem_copy((uint8_t *) assoc_ind->peerMacAddr,
			(uint8_t *) sta_ds->staAddr, sizeof(tSirMacAddr));
@@ -2362,7 +2352,7 @@ void lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,
				pe_err("rsnIEdata index out of bounds: %d",
					rsn_len);
				qdf_mem_free(assoc_ind);
				return;
				return QDF_STATUS_E_INVAL;
			}
			assoc_ind->rsnIE.rsnIEdata[rsn_len] =
				SIR_MAC_WPA_EID;
@@ -2514,5 +2504,5 @@ void lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,
			 (uint32_t *) assoc_ind);
		qdf_mem_free(assoc_ind);
	}
	return;
	return QDF_STATUS_SUCCESS;
}
+10 −2
Original line number Diff line number Diff line
/*
 * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
 * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
 *
 * Permission to use, copy, modify, and/or distribute this software for
 * any purpose with or without fee is hereby granted, provided that the
@@ -1977,7 +1977,15 @@ void lim_process_ap_mlm_add_sta_rsp(tpAniSirGlobal pMac, tpSirMsgQ limMsgQ,
	 * 2) PE receives eWNI_SME_ASSOC_CNF from SME
	 * 3) BTAMP-AP sends Re/Association Response to BTAMP-STA
	 */
	lim_send_mlm_assoc_ind(pMac, pStaDs, psessionEntry);
	if (lim_send_mlm_assoc_ind(pMac, pStaDs, psessionEntry) !=
							QDF_STATUS_SUCCESS) {
		lim_reject_association(pMac, pStaDs->staAddr,
				       pStaDs->mlmStaContext.subType,
				       true, pStaDs->mlmStaContext.authType,
				       pStaDs->assocId, true,
				       eSIR_MAC_UNSPEC_FAILURE_STATUS,
				       psessionEntry);
	}
	/* fall though to reclaim the original Add STA Response message */
end:
	if (0 != limMsgQ->bodyptr) {
+16 −3
Original line number Diff line number Diff line
/*
 * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
 * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
 *
 * Permission to use, copy, modify, and/or distribute this software for
 * any purpose with or without fee is hereby granted, provided that the
@@ -457,8 +457,21 @@ tSirRetStatus lim_process_auth_frame_no_session(tpAniSirGlobal pMac, uint8_t *,
						void *body);

void lim_process_assoc_req_frame(tpAniSirGlobal, uint8_t *, uint8_t, tpPESession);
void lim_send_mlm_assoc_ind(tpAniSirGlobal pMac, tpDphHashNode pStaDs,
			    tpPESession psessionEntry);

/**
 * lim_send_mlm_assoc_ind() - Sends assoc indication to SME
 * @mac_ctx: Global Mac context
 * @sta_ds: Station DPH hash entry
 * @session_entry: PE session entry
 *
 * This function sends either LIM_MLM_ASSOC_IND
 * or LIM_MLM_REASSOC_IND to SME.
 *
 * Return: QDF_STATUS
 */
QDF_STATUS lim_send_mlm_assoc_ind(tpAniSirGlobal mac_ctx,
				  tpDphHashNode sta_ds,
				  tpPESession session_entry);

void lim_process_assoc_rsp_frame(tpAniSirGlobal, uint8_t *, uint8_t, tpPESession);
void lim_process_disassoc_frame(tpAniSirGlobal, uint8_t *, tpPESession);