mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-10 06:09:23 -04:00
qcacld-3.0: Notify the failure to firmware if SAE auth retries exhausted
Currently during SAE roaming, if the DUT exhaust SAE retries (i.e. DUT doesn't receive SAE auth confirm/commit response even after max retries), host driver stops retrying and cleans up the internal counters/frame. But, the failure is not notified to firmware. So, firmware may go out of sync. Therefore, Notify the failure to firmware through WMA_ROAM_PRE_AUTH_STATUS in such cases. So that, firmware can abort roaming. Change-Id: Ic769dcabc15c1052f5d7d43f3ef754dd7b7c1f40 CRs-Fixed: 2981666
This commit is contained in:
parent
3e147542c9
commit
ece9151f58
1 changed files with 42 additions and 1 deletions
|
|
@ -1650,10 +1650,41 @@ static void lim_process_periodic_join_probe_req_timer(struct mac_context *mac_ct
|
|||
}
|
||||
}
|
||||
|
||||
static void lim_send_pre_auth_failure(uint8_t vdev_id, tSirMacAddr bssid)
|
||||
{
|
||||
struct scheduler_msg sch_msg = {0};
|
||||
struct wmi_roam_auth_status_params *params;
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
|
||||
params = qdf_mem_malloc(sizeof(*params));
|
||||
if (!params)
|
||||
return;
|
||||
|
||||
params->vdev_id = vdev_id;
|
||||
params->preauth_status = STATUS_UNSPECIFIED_FAILURE;
|
||||
qdf_mem_copy(params->bssid.bytes, bssid, QDF_MAC_ADDR_SIZE);
|
||||
qdf_mem_zero(params->pmkid, PMKID_LEN);
|
||||
|
||||
sch_msg.type = WMA_ROAM_PRE_AUTH_STATUS;
|
||||
sch_msg.bodyptr = params;
|
||||
pe_debug("Sending pre auth failure for mac_addr " QDF_MAC_ADDR_FMT,
|
||||
QDF_MAC_ADDR_REF(params->bssid.bytes));
|
||||
|
||||
status = scheduler_post_message(QDF_MODULE_ID_PE,
|
||||
QDF_MODULE_ID_WMA,
|
||||
QDF_MODULE_ID_WMA,
|
||||
&sch_msg);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
pe_err("Sending preauth status failed");
|
||||
qdf_mem_free(params);
|
||||
}
|
||||
}
|
||||
|
||||
static void lim_handle_sae_auth_timeout(struct mac_context *mac_ctx,
|
||||
struct pe_session *session_entry)
|
||||
{
|
||||
struct sae_auth_retry *sae_retry;
|
||||
tpSirMacMgmtHdr mac_hdr;
|
||||
|
||||
sae_retry = mlme_get_sae_auth_retry(session_entry->vdev);
|
||||
if (!(sae_retry && sae_retry->sae_auth.data)) {
|
||||
|
|
@ -1662,6 +1693,16 @@ static void lim_handle_sae_auth_timeout(struct mac_context *mac_ctx,
|
|||
return;
|
||||
}
|
||||
|
||||
if (!sae_retry->sae_auth_max_retry) {
|
||||
if (MLME_IS_ROAMING_IN_PROG(mac_ctx->psoc,
|
||||
session_entry->vdev_id)) {
|
||||
mac_hdr = (tpSirMacMgmtHdr)sae_retry->sae_auth.data;
|
||||
lim_send_pre_auth_failure(session_entry->vdev_id,
|
||||
mac_hdr->bssId);
|
||||
}
|
||||
goto free_and_deactivate_timer;
|
||||
}
|
||||
|
||||
pe_debug("retry sae auth for seq num %d vdev id %d",
|
||||
mac_ctx->mgmtSeqNum, session_entry->vdev_id);
|
||||
lim_send_frame(mac_ctx, session_entry->vdev_id,
|
||||
|
|
@ -1669,7 +1710,7 @@ static void lim_handle_sae_auth_timeout(struct mac_context *mac_ctx,
|
|||
|
||||
sae_retry->sae_auth_max_retry--;
|
||||
/* Activate Auth Retry timer if max_retries are not done */
|
||||
if (!sae_retry->sae_auth_max_retry || (tx_timer_activate(
|
||||
if ((tx_timer_activate(
|
||||
&mac_ctx->lim.lim_timers.g_lim_periodic_auth_retry_timer) !=
|
||||
TX_SUCCESS))
|
||||
goto free_and_deactivate_timer;
|
||||
|
|
|
|||
Loading…
Reference in a new issue