qcacmn: Fix possible OOB access for tx_hw_desc_history

Memory allocated for tx_hw_desc_history uses incorrect
size parameter resulting in much lower memory to get
assigned. This will result in OOB access and corruptions
in memory, regions post the trailing boundary when updating
tx hw desc events via dp_tx_hw_desc_update_evt.

Fix is to use the appropriate memory size for tx_hw_desc_history
and add NULL check in dp_tx_hw_desc_update_evt.

Change-Id: I97af7898cf8bf1b24978d559f84a2a3d00227ed8
CRs-Fixed: 2952859
这个提交包含在:
Yeshwanth Sriram Guntuka
2021-05-24 18:38:10 +05:30
提交者 Madan Koyyalamudi
父节点 bbd65e7a59
当前提交 27212c73fe
修改 2 个文件,包含 4 行新增1 行删除

查看文件

@@ -4541,7 +4541,7 @@ static void dp_soc_tx_hw_desc_history_attach(struct dp_soc *soc)
{
soc->tx_hw_desc_history = dp_context_alloc_mem(
soc, DP_TX_HW_DESC_HIST_TYPE,
sizeof(struct dp_tx_hw_desc_evt));
sizeof(*soc->tx_hw_desc_history));
if (soc->tx_hw_desc_history)
soc->tx_hw_desc_history->index = 0;
}

查看文件

@@ -1523,6 +1523,9 @@ dp_tx_hw_desc_update_evt(uint8_t *hal_tx_desc_cached,
struct dp_tx_hw_desc_evt *evt;
uint64_t idx = 0;
if (!soc->tx_hw_desc_history)
return;
idx = ++soc->tx_hw_desc_history->index;
if (idx == DP_TX_HW_DESC_HIST_MAX)
soc->tx_hw_desc_history->index = 0;