qcacmn: Validate rx desc unmap in RXDMA err ring

Currently, in STA+Monitor mode, the first MSDU in MPDU is
unmapped and goes down. This MSDU is now processed as rxdma
err packet and crashes due to double unmap as rxdma err ring
is configured as monitor dest ring in monitor mode.
To fix this, validate rx descriptor unmapped flag in rxdma
err processing.

Change-Id: Ic503aa18e2269d8bda6aaf9b349c1ad8be11dcff
CRs-Fixed: 3175972
This commit is contained in:
Ananya Gupta
2022-04-25 13:12:14 +05:30
کامیت شده توسط Madan Koyyalamudi
والد 324dcd5688
کامیت 207111647e

مشاهده پرونده

@@ -3236,13 +3236,16 @@ dp_rx_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
continue;
}
rx_desc_pool = &soc->
rx_desc_buf[rx_desc->pool_id];
dp_ipa_rx_buf_smmu_mapping_lock(soc);
dp_rx_nbuf_unmap_pool(soc, rx_desc_pool,
msdu);
rx_desc->unmapped = 1;
dp_ipa_rx_buf_smmu_mapping_unlock(soc);
if (rx_desc->unmapped == 0) {
rx_desc_pool =
&soc->rx_desc_buf[rx_desc->pool_id];
dp_ipa_rx_buf_smmu_mapping_lock(soc);
dp_rx_nbuf_unmap_pool(soc,
rx_desc_pool,
msdu);
rx_desc->unmapped = 1;
dp_ipa_rx_buf_smmu_mapping_unlock(soc);
}
dp_rx_err_debug("%pK: msdu_nbuf=%pK ",
soc, msdu);