qcacld-3.0: add vdev->osif_rx failure handling for fisa path

Currently there is no vdev->osif_rx result check in fisa path,
so if vdev->osif_rx returns failure, the RX skb may not have been
handled and it may be leaked.

Add vdev->osif_rx failure handling to avoid skb leak.

Change-Id: I6c194c31bbe71cba5c56c2b93f505225de439b72
CRs-Fixed: 2695084
This commit is contained in:
Jinwei Chen 2020-05-28 16:57:27 +08:00 • committed by nshrivas
commit d3f4ccf4d6
2 changed files with 10 additions and 9 deletions

View file

@ -804,14 +804,14 @@ dp_rx_fisa_flush_udp_flow(struct dp_vdev *vdev,
dp_fisa_debug("fisa_flow->curr_aggr %d", fisa_flow->cur_aggr);
linear_skb = dp_fisa_rx_linear_skb(vdev, fisa_flow->head_skb, 24000);
if (linear_skb) {
if (qdf_likely(vdev->osif_rx))
vdev->osif_rx(vdev->osif_vdev, linear_skb);
if (!vdev->osif_rx || QDF_STATUS_SUCCESS !=
vdev->osif_rx(vdev->osif_vdev, linear_skb))
qdf_nbuf_free(linear_skb);
/* Free non linear skb */
qdf_nbuf_free(fisa_flow->head_skb);
} else {
if (qdf_likely(vdev->osif_rx))
vdev->osif_rx(vdev->osif_vdev, fisa_flow->head_skb);
else
if (!vdev->osif_rx || QDF_STATUS_SUCCESS !=
vdev->osif_rx(vdev->osif_vdev, fisa_flow->head_skb))
qdf_nbuf_free(fisa_flow->head_skb);
}
@ -1061,9 +1061,8 @@ pull_nbuf:
deliver_nbuf: /* Deliver without FISA */
qdf_nbuf_set_next(head_nbuf, NULL);
hex_dump_skb_data(head_nbuf, false);
if (qdf_likely(vdev->osif_rx))
vdev->osif_rx(vdev->osif_vdev, head_nbuf);
else
if (!vdev->osif_rx || QDF_STATUS_SUCCESS !=
vdev->osif_rx(vdev->osif_vdev, head_nbuf))
qdf_nbuf_free(head_nbuf);
next_msdu:
head_nbuf = next_nbuf;

View file

@ -1951,8 +1951,10 @@ QDF_STATUS hdd_rx_pkt_thread_enqueue_cbk(void *adapter,
}
hdd_adapter = (struct hdd_adapter *)adapter;
if (hdd_validate_adapter(hdd_adapter))
if (hdd_validate_adapter(hdd_adapter)) {
hdd_err_rl("adapter validate failed");
return QDF_STATUS_E_FAILURE;
}
vdev_id = hdd_adapter->vdev_id;
head_ptr = nbuf_list;