qcacld-3.0: Don't free assoc rsp fail timer on rsp status TRY_AGAIN_LATER

For WPA3 SAE, host runs pmf comeback timer to retry assoc request. Host
retires assoc request once if assoc response has response status as
TRY_AGAIN_LATER after 1 seconds.
Problem scenario:
Host sends assoc request to which AP respond with assoc response status
TRY_AGAIN_LATER, deactivates assoc response failure timer and retransmit
assoc request after 1 second. After 1 second host retransmit assoc req
and marks this is "retried" assoc request. If to the retried assoc
request host gets assoc response with reason status TRY_AGAIN_LATER,
host deactivates assoc failure timer and drops the assoc response.
Thus association does not complete and even association timer doesn't
trigger.
Fix:
deactivate assoc failure timer after checking the assoc response status
is not TRY_AGAIN_LATER and deactivate pmf comeback timer on assoc failure
timer gets trigger.

Change-Id: I7fc89063efec3c4a5b0521e9ff8301d6ea64683e
CRs-Fixed: 2730194
This commit is contained in:
Abhishek Ambure 2020-07-13 20:43:50 +05:30 committed by snandini
parent 3491a58edd
commit 48d4b5c4c6
4 changed files with 22 additions and 12 deletions

View File

@ -113,6 +113,20 @@ QDF_STATUS lim_start(struct mac_context *mac);
QDF_STATUS pe_start(struct mac_context *mac); QDF_STATUS pe_start(struct mac_context *mac);
void pe_stop(struct mac_context *mac); void pe_stop(struct mac_context *mac);
#ifdef WLAN_FEATURE_11W
/**
* lim_stop_pmfcomeback_timer() - stop pmf comeback timer
* @session: Pointer to PE session
*
* Return: None
*/
void lim_stop_pmfcomeback_timer(struct pe_session *session);
#else
static inline void lim_stop_pmfcomeback_timer(struct pe_session *session)
{
}
#endif
/** /**
* pe_register_mgmt_rx_frm_callback() - registers callback for receiving * pe_register_mgmt_rx_frm_callback() - registers callback for receiving
* mgmt rx frames * mgmt rx frames

View File

@ -593,7 +593,7 @@ static inline void lim_nan_register_callbacks(struct mac_context *mac_ctx)
#endif #endif
#ifdef WLAN_FEATURE_11W #ifdef WLAN_FEATURE_11W
static void lim_stop_pmfcomeback_timer(struct pe_session *session) void lim_stop_pmfcomeback_timer(struct pe_session *session)
{ {
if (session->opmode != QDF_STA_MODE) if (session->opmode != QDF_STA_MODE)
return; return;
@ -601,10 +601,6 @@ static void lim_stop_pmfcomeback_timer(struct pe_session *session)
qdf_mc_timer_stop(&session->pmf_retry_timer); qdf_mc_timer_stop(&session->pmf_retry_timer);
session->pmf_retry_timer_info.retried = false; session->pmf_retry_timer_info.retried = false;
} }
#else
static void lim_stop_pmfcomeback_timer(struct pe_session *session)
{
}
#endif #endif
/* /*

View File

@ -836,13 +836,6 @@ lim_process_assoc_rsp_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info,
return; return;
} }
lim_copy_u16((uint8_t *) &mac_capab, caps); lim_copy_u16((uint8_t *) &mac_capab, caps);
/* Stop Association failure timer */
if (subtype == LIM_ASSOC)
lim_deactivate_and_change_timer(mac_ctx, eLIM_ASSOC_FAIL_TIMER);
else
lim_stop_reassoc_retry_timer(mac_ctx);
lim_handle_assoc_reject_status(mac_ctx, session_entry, assoc_rsp, lim_handle_assoc_reject_status(mac_ctx, session_entry, assoc_rsp,
hdr->sa); hdr->sa);
@ -873,6 +866,12 @@ lim_process_assoc_rsp_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info,
return; return;
} }
/* Stop Association failure timer */
if (subtype == LIM_ASSOC)
lim_deactivate_and_change_timer(mac_ctx, eLIM_ASSOC_FAIL_TIMER);
else
lim_stop_reassoc_retry_timer(mac_ctx);
if (assoc_rsp->status_code != eSIR_MAC_SUCCESS_STATUS) { if (assoc_rsp->status_code != eSIR_MAC_SUCCESS_STATUS) {
/* /*
*Re/Association response was received *Re/Association response was received

View File

@ -1957,6 +1957,7 @@ void lim_process_assoc_failure_timeout(struct mac_context *mac_ctx,
session->peSessionId, session->limMlmState)); session->peSessionId, session->limMlmState));
/* Change timer for future activations */ /* Change timer for future activations */
lim_deactivate_and_change_timer(mac_ctx, eLIM_ASSOC_FAIL_TIMER); lim_deactivate_and_change_timer(mac_ctx, eLIM_ASSOC_FAIL_TIMER);
lim_stop_pmfcomeback_timer(session);
/* /*
* Free up buffer allocated for JoinReq held by * Free up buffer allocated for JoinReq held by
* MLM state machine * MLM state machine