qcacmn: fix dp_rx_defrag_add_last_frag peer tid array invalid access

In some case, HW will fill in unexpected peer_id into RX PKT TLV,
if this peer_id related peer is valid by coincidence, but actually
this peer won't do dp_peer_rx_init(like SAP Vdev self peer),
then invalid accessing to peer rx tid will happen.

do SW WAR that add checking about peer tid array, if not initialed,
free the rx nbuf.

Change-Id: Icf196b4f92eb341e1ace5128c681d24c41dff6cd
CRs-Fixed: 2468537
此提交包含在:
Jinwei Chen
2019-06-27 17:12:03 +08:00
提交者 nshrivas
父節點 57e7e055f2
當前提交 63705259d2
共有 3 個檔案被更改,包括 23 行新增1 行删除

查看文件

@@ -5096,6 +5096,8 @@ void dp_txrx_path_stats(struct dp_soc *soc)
pdev->soc->stats.rx.err.rx_invalid_pkt_len.num);
DP_PRINT_STATS("sa or da idx invalid %u",
pdev->soc->stats.rx.err.invalid_sa_da_idx);
DP_PRINT_STATS("defrag peer uninit %u",
pdev->soc->stats.rx.err.defrag_peer_uninit);
DP_PRINT_STATS("Reo Statistics");
DP_PRINT_STATS("rbm error: %u msdus",
@@ -5556,6 +5558,8 @@ dp_print_soc_rx_stats(struct dp_soc *soc)
soc->stats.rx.err.invalid_vdev);
DP_PRINT_STATS("Invalid sa_idx or da_idx = %d",
soc->stats.rx.err.invalid_sa_da_idx);
DP_PRINT_STATS("Defrag peer uninit = %d",
soc->stats.rx.err.defrag_peer_uninit);
DP_PRINT_STATS("Invalid Pdev = %d",
soc->stats.rx.err.invalid_pdev);
DP_PRINT_STATS("Invalid Peer = %d",