qcacld-3.0: Check the dscp value when update

The dscp value in the Qos map set element of assoc response
frame may be malformed. When try to update the dscpmampping,
make sure the value is less than SME_QOS_WMM_UP_MAX.

Change-Id: I669c5bec66a7dc839d2b2bdfa4eaafb8d7c8736a
CRs-Fixed: 3354319
此提交包含在:
Paul Zhang
2022-12-07 17:43:58 +08:00
提交者 Madan Koyyalamudi
父節點 1244103e06
當前提交 075d170c06

查看文件

@@ -8812,6 +8812,7 @@ QDF_STATUS sme_update_dsc_pto_up_mapping(mac_handle_t mac_handle,
uint8_t i, j;
struct csr_roam_session *pCsrSession = NULL;
struct pe_session *pSession = NULL;
struct qos_map_set *pqosmapset;
pCsrSession = CSR_GET_SESSION(mac, sessionId);
if (!pCsrSession) {
@@ -8830,21 +8831,23 @@ QDF_STATUS sme_update_dsc_pto_up_mapping(mac_handle_t mac_handle,
return QDF_STATUS_E_FAILURE;
}
if (!pSession->QosMapSet.present) {
pqosmapset = &pSession->QosMapSet;
if (!pqosmapset->present) {
sme_debug("QOS Mapping IE not present");
return QDF_STATUS_E_FAILURE;
}
for (i = 0; i < SME_QOS_WMM_UP_MAX; i++) {
for (j = pSession->QosMapSet.dscp_range[i][0];
j <= pSession->QosMapSet.dscp_range[i][1] &&
j <= WLAN_MAX_DSCP; j++)
dscpmapping[j] = i;
for (j = pqosmapset->dscp_range[i][0];
j <= pqosmapset->dscp_range[i][1] && j <= WLAN_MAX_DSCP;
j++)
dscpmapping[j] = i;
}
for (i = 0; i < pSession->QosMapSet.num_dscp_exceptions; i++)
if (pSession->QosMapSet.dscp_exceptions[i][0] <= WLAN_MAX_DSCP)
dscpmapping[pSession->QosMapSet.dscp_exceptions[i][0]] =
pSession->QosMapSet.dscp_exceptions[i][1];
for (i = 0; i < pqosmapset->num_dscp_exceptions; i++)
if (pqosmapset->dscp_exceptions[i][0] <= WLAN_MAX_DSCP &&
pqosmapset->dscp_exceptions[i][1] < SME_QOS_WMM_UP_MAX)
dscpmapping[pqosmapset->dscp_exceptions[i][0]] =
pqosmapset->dscp_exceptions[i][1];
return status;
}