qcacld-3.0: Fix use after free in sme_qos_del_ts_req
In sme_qos_del_ts_req, there is a chance that driver can access del ts req pMsg even after free. In umac_send_mb_message_to_mac driver frees pMsg if there is some failure. But driver still tries to access pMsg in sme_qos_del_ts_req even if umac_send_mb_ message_to_mac returns failure. Access pMsg only if umac_send_mb_message_to_mac returns success to avoid this use after free issue. Change-Id: I3638a38746b9cd917e01a7ff6f38430344e6e78d CRs-Fixed: 2214718
Tento commit je obsažen v:

odevzdal
nshrivas

rodič
33fcd68b5b
revize
96086a6d52
@@ -4113,7 +4113,6 @@ static QDF_STATUS sme_qos_del_ts_req(tpAniSirGlobal pMac,
|
||||
struct sme_qos_acinfo *pACInfo;
|
||||
tSirDeltsReq *pMsg;
|
||||
struct sme_qos_wmmtspecinfo *pTspecInfo;
|
||||
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||
|
||||
#ifdef FEATURE_WLAN_DIAG_SUPPORT
|
||||
WLAN_HOST_DIAG_EVENT_DEF(qos, host_event_wlan_qos_payload_type);
|
||||
@@ -4183,23 +4182,23 @@ static QDF_STATUS sme_qos_del_ts_req(tpAniSirGlobal pMac,
|
||||
pTspecInfo->ts_info.up, pTspecInfo->ts_info.tid);
|
||||
qdf_mem_zero(&pACInfo->curr_QoSInfo[tspec_mask - 1],
|
||||
sizeof(struct sme_qos_wmmtspecinfo));
|
||||
if (QDF_IS_STATUS_SUCCESS(umac_send_mb_message_to_mac(pMsg))) {
|
||||
status = QDF_STATUS_SUCCESS;
|
||||
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
|
||||
"%s: %d: sme_qos_del_ts_req:Test: sent down a DELTS req to PE",
|
||||
__func__, __LINE__);
|
||||
/* event: EVENT_WLAN_QOS */
|
||||
#ifdef FEATURE_WLAN_DIAG_SUPPORT
|
||||
qos.eventId = SME_QOS_DIAG_DELTS;
|
||||
qos.reasonCode = SME_QOS_DIAG_USER_REQUESTED;
|
||||
WLAN_HOST_DIAG_EVENT_REPORT(&qos, EVENT_WLAN_QOS);
|
||||
#endif /* FEATURE_WLAN_DIAG_SUPPORT */
|
||||
}
|
||||
sme_set_tspec_uapsd_mask_per_session(pMac,
|
||||
&pMsg->req.tspec.tsinfo,
|
||||
sessionId);
|
||||
|
||||
return status;
|
||||
if (!QDF_IS_STATUS_SUCCESS(umac_send_mb_message_to_mac(pMsg))) {
|
||||
sme_err("DELTS req to PE failed");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
sme_debug("sent down a DELTS req to PE");
|
||||
#ifdef FEATURE_WLAN_DIAG_SUPPORT
|
||||
qos.eventId = SME_QOS_DIAG_DELTS;
|
||||
qos.reasonCode = SME_QOS_DIAG_USER_REQUESTED;
|
||||
WLAN_HOST_DIAG_EVENT_REPORT(&qos, EVENT_WLAN_QOS);
|
||||
#endif
|
||||
|
||||
sme_set_tspec_uapsd_mask_per_session(pMac, &pMsg->req.tspec.tsinfo,
|
||||
sessionId);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Odkázat v novém úkolu
Zablokovat Uživatele