summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSecurityBot AutoMerger <android-nexus-securitybot@system.gserviceaccount.com>2019-12-20 14:12:40 -0800
committerSecurityBot <android-nexus-securitybot@system.gserviceaccount.com>2019-12-20 14:12:40 -0800
commit88de4bddbf8af01150c5f780de856c32453adf0a (patch)
treeccaaf0319b7aa07b42556d25ef97ff4159770931
parent9de09b5a744d931ad99e350cb6bc0642c54424a3 (diff)
parent05007d5bba53fbc4472829b39993748c1b165eb2 (diff)
downloadqcacld-android-msm-bonito-4.9-r-preview-1.tar.gz
SBMerger: 284775313 Change-Id: Ib3cf65c3cd343a76a830ec7d77d60bd863ba7a71 Signed-off-by: SecurityBot <android-nexus-securitybot@system.gserviceaccount.com>
-rw-r--r--core/dp/txrx/ol_rx.c7
-rw-r--r--core/dp/txrx/ol_txrx_types.h3
-rw-r--r--core/mac/src/pe/lim/lim_process_deauth_frame.c10
-rw-r--r--core/mac/src/pe/lim/lim_process_disassoc_frame.c10
-rw-r--r--core/sme/src/csr/csr_api_roam.c2
-rw-r--r--core/wma/src/wma_mgmt.c50
6 files changed, 39 insertions, 43 deletions
diff --git a/core/dp/txrx/ol_rx.c b/core/dp/txrx/ol_rx.c
index 7d443be064..a563d60275 100644
--- a/core/dp/txrx/ol_rx.c
+++ b/core/dp/txrx/ol_rx.c
@@ -1436,9 +1436,7 @@ void ol_rx_peer_init(struct ol_txrx_pdev_t *pdev, struct ol_txrx_peer_t *peer)
peer->keyinstalled = 0;
peer->last_assoc_rcvd = 0;
- peer->last_disassoc_rcvd = 0;
- peer->last_deauth_rcvd = 0;
-
+ peer->last_disassoc_deauth_rcvd = 0;
qdf_atomic_init(&peer->fw_pn_check);
}
@@ -1447,8 +1445,7 @@ ol_rx_peer_cleanup(struct ol_txrx_vdev_t *vdev, struct ol_txrx_peer_t *peer)
{
peer->keyinstalled = 0;
peer->last_assoc_rcvd = 0;
- peer->last_disassoc_rcvd = 0;
- peer->last_deauth_rcvd = 0;
+ peer->last_disassoc_deauth_rcvd = 0;
ol_rx_reorder_peer_cleanup(vdev, peer);
}
diff --git a/core/dp/txrx/ol_txrx_types.h b/core/dp/txrx/ol_txrx_types.h
index a678bfc1d6..49a3d44285 100644
--- a/core/dp/txrx/ol_txrx_types.h
+++ b/core/dp/txrx/ol_txrx_types.h
@@ -1369,8 +1369,7 @@ struct ol_txrx_peer_t {
u_int16_t tx_pause_flag;
#endif
qdf_time_t last_assoc_rcvd;
- qdf_time_t last_disassoc_rcvd;
- qdf_time_t last_deauth_rcvd;
+ qdf_time_t last_disassoc_deauth_rcvd;
qdf_atomic_t fw_create_pending;
qdf_timer_t peer_unmap_timer;
};
diff --git a/core/mac/src/pe/lim/lim_process_deauth_frame.c b/core/mac/src/pe/lim/lim_process_deauth_frame.c
index 7f654b5d0d..46b2f93997 100644
--- a/core/mac/src/pe/lim/lim_process_deauth_frame.c
+++ b/core/mac/src/pe/lim/lim_process_deauth_frame.c
@@ -510,18 +510,20 @@ void lim_perform_deauth(tpAniSirGlobal mac_ctx, tpPESession pe_session,
}
if ((sta_ds->mlmStaContext.mlmState == eLIM_MLM_WT_DEL_STA_RSP_STATE) ||
- (sta_ds->mlmStaContext.mlmState == eLIM_MLM_WT_DEL_BSS_RSP_STATE)) {
+ (sta_ds->mlmStaContext.mlmState == eLIM_MLM_WT_DEL_BSS_RSP_STATE) ||
+ sta_ds->sta_deletion_in_progress) {
/**
* Already in the process of deleting context for the peer
* and received Deauthentication frame. Log and Ignore.
*/
- pe_err("received Deauth frame from peer that is in state %X, addr "
- MAC_ADDRESS_STR, sta_ds->mlmStaContext.mlmState,
- MAC_ADDR_ARRAY(addr));
+ pe_debug("Deletion is in progress (%d) for peer:%pM in mlmState %d",
+ sta_ds->sta_deletion_in_progress, addr,
+ sta_ds->mlmStaContext.mlmState);
return;
}
sta_ds->mlmStaContext.disassocReason = (tSirMacReasonCodes) rc;
sta_ds->mlmStaContext.cleanupTrigger = eLIM_PEER_ENTITY_DEAUTH;
+ sta_ds->sta_deletion_in_progress = true;
/* / Issue Deauth Indication to SME. */
qdf_mem_copy((uint8_t *) &mlmDeauthInd.peerMacAddr,
diff --git a/core/mac/src/pe/lim/lim_process_disassoc_frame.c b/core/mac/src/pe/lim/lim_process_disassoc_frame.c
index e36ecc939f..4742b88b36 100644
--- a/core/mac/src/pe/lim/lim_process_disassoc_frame.c
+++ b/core/mac/src/pe/lim/lim_process_disassoc_frame.c
@@ -290,16 +290,18 @@ lim_process_disassoc_frame(tpAniSirGlobal pMac, uint8_t *pRxPacketInfo,
}
if ((pStaDs->mlmStaContext.mlmState == eLIM_MLM_WT_DEL_STA_RSP_STATE) ||
- (pStaDs->mlmStaContext.mlmState == eLIM_MLM_WT_DEL_BSS_RSP_STATE)) {
+ (pStaDs->mlmStaContext.mlmState == eLIM_MLM_WT_DEL_BSS_RSP_STATE) ||
+ pStaDs->sta_deletion_in_progress) {
/**
* Already in the process of deleting context for the peer
* and received Disassociation frame. Log and Ignore.
*/
- pe_err("received Disassoc frame in state: %d from"
- MAC_ADDRESS_STR, pStaDs->mlmStaContext.mlmState,
- MAC_ADDR_ARRAY(pHdr->sa));
+ pe_debug("Deletion is in progress (%d) for peer:%pM in mlmState %d",
+ pStaDs->sta_deletion_in_progress, pHdr->sa,
+ pStaDs->mlmStaContext.mlmState);
return;
}
+ pStaDs->sta_deletion_in_progress = true;
lim_disassoc_tdls_peers(pMac, psessionEntry, pHdr->sa);
if (pStaDs->mlmStaContext.mlmState != eLIM_MLM_LINK_ESTABLISHED_STATE) {
/**
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c
index a137c90a09..1c924e08fc 100644
--- a/core/sme/src/csr/csr_api_roam.c
+++ b/core/sme/src/csr/csr_api_roam.c
@@ -11348,7 +11348,7 @@ bool csr_roam_issue_wm_status_change(tpAniSirGlobal pMac, uint32_t sessionId,
DeauthIndMsg));
}
if (QDF_IS_STATUS_SUCCESS
- (csr_queue_sme_command(pMac, pCommand, true))) {
+ (csr_queue_sme_command(pMac, pCommand, false))) {
fCommandQueued = true;
} else {
sme_err(" fail to send message ");
diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c
index 784b553901..fbd7be256a 100644
--- a/core/wma/src/wma_mgmt.c
+++ b/core/wma/src/wma_mgmt.c
@@ -3537,37 +3537,33 @@ static bool wma_is_pkt_drop_candidate(tp_wma_handle wma_handle,
}
switch (subtype) {
- case SIR_MAC_MGMT_ASSOC_REQ:
- if (peer->last_assoc_rcvd) {
- if (qdf_get_system_timestamp() - peer->last_assoc_rcvd <
- WMA_MGMT_FRAME_DETECT_DOS_TIMER) {
- WMA_LOGD(FL("Dropping Assoc Req received"));
- should_drop = true;
- }
+ case IEEE80211_FC0_SUBTYPE_ASSOC_REQ:
+ if (peer->last_assoc_rcvd &&
+ qdf_system_time_before(qdf_get_system_timestamp(),
+ peer->last_assoc_rcvd + WMA_MGMT_FRAME_DETECT_DOS_TIMER)) {
+ WMA_LOGD(FL("Dropping Assoc Req as it is received after %d ms of last frame. Allow it only after %d ms"),
+ (int) (qdf_get_system_timestamp() -
+ peer->last_assoc_rcvd),
+ WMA_MGMT_FRAME_DETECT_DOS_TIMER);
+ should_drop = true;
+ break;
}
peer->last_assoc_rcvd = qdf_get_system_timestamp();
break;
- case SIR_MAC_MGMT_DISASSOC:
- if (peer->last_disassoc_rcvd) {
- if (qdf_get_system_timestamp() -
- peer->last_disassoc_rcvd <
- WMA_MGMT_FRAME_DETECT_DOS_TIMER) {
- WMA_LOGI(FL("Dropping DisAssoc received"));
- should_drop = true;
- }
- }
- peer->last_disassoc_rcvd = qdf_get_system_timestamp();
- break;
- case SIR_MAC_MGMT_DEAUTH:
- if (peer->last_deauth_rcvd) {
- if (qdf_get_system_timestamp() -
- peer->last_deauth_rcvd <
- WMA_MGMT_FRAME_DETECT_DOS_TIMER) {
- WMA_LOGI(FL("Dropping Deauth received"));
- should_drop = true;
- }
+ case IEEE80211_FC0_SUBTYPE_DISASSOC:
+ case IEEE80211_FC0_SUBTYPE_DEAUTH:
+ if (peer->last_disassoc_deauth_rcvd &&
+ qdf_system_time_before(qdf_get_system_timestamp(),
+ peer->last_disassoc_deauth_rcvd +
+ WMA_MGMT_FRAME_DETECT_DOS_TIMER)) {
+ WMA_LOGD(FL("Dropping subtype %x frame as it is received after %d ms of last frame. Allow it only after %d ms"),
+ subtype, (int) (qdf_get_system_timestamp() -
+ peer->last_disassoc_deauth_rcvd),
+ WMA_MGMT_FRAME_DETECT_DOS_TIMER);
+ should_drop = true;
+ break;
}
- peer->last_deauth_rcvd = qdf_get_system_timestamp();
+ peer->last_disassoc_deauth_rcvd = qdf_get_system_timestamp();
break;
default:
break;