From 95ff87c60e5c4ee87fb5ffc143d3c070af20e992 Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Wed, 4 Apr 2018 16:10:00 -0700 Subject: [PATCH] qcacld-3.0: Flush packets in datapath error case Several packets are sent to firmware in htt_htc_attach_all(), back to back. However, if one of the latter packets fails to send for some reason, the previous packets are not flushed. This leads to a number of leaks under error conditions. If a packet fails to send in htt_htc_attach_all(), flush the endpoint before returning failure to the upper layers. Change-Id: If9b33a645f7bcc77442e18566525ae57b544f1a0 CRs-Fixed: 2219137 --- core/dp/htt/htt.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/core/dp/htt/htt.c b/core/dp/htt/htt.c index 5e99766facaa..447700fbf6d0 100644 --- a/core/dp/htt/htt.c +++ b/core/dp/htt/htt.c @@ -338,12 +338,20 @@ static int htt_htc_attach_all(struct htt_pdev_t *pdev) { if (htt_htc_attach(pdev, HTT_DATA_MSG_SVC)) - return -EIO; + goto flush_endpoint; + if (htt_htc_attach(pdev, HTT_DATA2_MSG_SVC)) - return -EIO; + goto flush_endpoint; + if (htt_htc_attach(pdev, HTT_DATA3_MSG_SVC)) - return -EIO; + goto flush_endpoint; + return 0; + +flush_endpoint: + htc_flush_endpoint(pdev->htc_pdev, ENDPOINT_0, HTC_TX_PACKET_TAG_ALL); + + return -EIO; } #else /**