summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo Chang <schang@qca.qualcomm.com>2015-01-22 10:32:17 -0800
committerAnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com>2015-01-27 16:00:56 +0530
commitf0582d71eda2b7a67ebdf28c77f9f23af7093e6c (patch)
treece3ed5fce488e4618f838d27119f541b80369e28
parent9fa396b8289fbc55215f13ba8e1bc1af9a2e2d39 (diff)
qca-cld: ipa packet double free fix
RX packet IPA error condition, HDD IPA module free error packet. After free packet return error code to caller. And caller also try to free packet which already free. Then packet double free happen. HDD IPA dose not need free packet, just return error. Then caller will free packet Change-Id: I639f446fb7ea8d46b25ff6eef177fe490a000891 CRs-fixed: 782376
-rw-r--r--CORE/HDD/src/wlan_hdd_ipa.c18
1 files changed, 4 insertions, 14 deletions
diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c
index aa0a77976cf1..f40d9c1877af 100644
--- a/CORE/HDD/src/wlan_hdd_ipa.c
+++ b/CORE/HDD/src/wlan_hdd_ipa.c
@@ -2010,7 +2010,10 @@ VOS_STATUS hdd_ipa_process_rxt(v_VOID_t *vosContext, adf_nbuf_t rx_buf_list,
adapter->magic != WLAN_HDD_ADAPTER_MAGIC) {
HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO_LOW, "Invalid sta_id: %d",
sta_id);
- goto drop_pkts;
+ hdd_ipa->stats.num_rx_drop++;
+ if (adapter)
+ adapter->stats.rx_dropped++;
+ return VOS_STATUS_E_FAILURE;
}
iface_context = (struct hdd_ipa_iface_context *) adapter->ipa_context;
@@ -2076,19 +2079,6 @@ VOS_STATUS hdd_ipa_process_rxt(v_VOID_t *vosContext, adf_nbuf_t rx_buf_list,
}
return VOS_STATUS_SUCCESS;
-
-drop_pkts:
- buf = rx_buf_list;
- while (buf) {
- next_buf = adf_nbuf_queue_next(buf);
- adf_nbuf_free(buf);
- buf = next_buf;
- hdd_ipa->stats.num_rx_drop++;
- if (adapter)
- adapter->stats.rx_dropped++;
- }
-
- return VOS_STATUS_E_FAILURE;
}
static void hdd_ipa_set_adapter_ip_filter(hdd_adapter_t *adapter)