summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManikandan Mohan <manikand@codeaurora.org>2017-03-17 14:55:17 -0700
committerSandeep Puligilla <spuligil@codeaurora.org>2017-03-28 12:11:34 -0700
commitef4201d07fa82616a19109b7cb793a936a1da7e1 (patch)
tree3bb32671bdad6b161f37ff0a87f4c6886b1295cb
parentcd5024140d2ccc29de61c71540536ca5d1173cf2 (diff)
qcacld-3.0: Check for adapter validity in pre cac work
Check for adapter validity for pre cac adapter close work function and hdd context validity to avoid crash during race condition in SSR case. Change-Id: I6c167e8f1a8199c63fba905fff4e781d244c7dc1 CRs-fixed: 2021403
-rw-r--r--core/hdd/src/wlan_hdd_hostapd.c39
1 files changed, 26 insertions, 13 deletions
diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c
index cec58bc481a7..1af1df75888b 100644
--- a/core/hdd/src/wlan_hdd_hostapd.c
+++ b/core/hdd/src/wlan_hdd_hostapd.c
@@ -899,40 +899,53 @@ static int wlan_hdd_set_pre_cac_complete_status(hdd_adapter_t *ap_adapter,
}
/**
- * wlan_hdd_sap_pre_cac_failure() - Process the pre cac failure
+ * __wlan_hdd_sap_pre_cac_failure() - Process the pre cac failure
* @data: AP adapter
*
* Deletes the pre cac adapter
*
* Return: None
*/
-void wlan_hdd_sap_pre_cac_failure(void *data)
+static void __wlan_hdd_sap_pre_cac_failure(void *data)
{
- hdd_adapter_t *pHostapdAdapter;
+ hdd_adapter_t *adapter;
hdd_context_t *hdd_ctx;
ENTER();
- pHostapdAdapter = (hdd_adapter_t *) data;
- if (!pHostapdAdapter) {
- hdd_err("AP adapter is NULL");
+ adapter = (hdd_adapter_t *) data;
+ if (!adapter ||
+ adapter->magic != WLAN_HDD_ADAPTER_MAGIC) {
+ hdd_err("SAP Pre CAC adapter invalid");
return;
}
- hdd_ctx = (hdd_context_t *) (pHostapdAdapter->pHddCtx);
- if (!hdd_ctx) {
+ hdd_ctx = (hdd_context_t *) (adapter->pHddCtx);
+ if (wlan_hdd_validate_context(hdd_ctx)) {
hdd_err("HDD context is null");
return;
}
- cds_ssr_protect(__func__);
wlan_hdd_release_intf_addr(hdd_ctx,
- pHostapdAdapter->macAddressCurrent.bytes);
- hdd_stop_adapter(hdd_ctx, pHostapdAdapter, true);
- hdd_close_adapter(hdd_ctx, pHostapdAdapter, false);
- cds_ssr_unprotect(__func__);
+ adapter->macAddressCurrent.bytes);
+ hdd_stop_adapter(hdd_ctx, adapter, true);
+ hdd_close_adapter(hdd_ctx, adapter, false);
}
+/**
+ * wlan_hdd_sap_pre_cac_failure() - Process the pre cac failure
+ * @data: AP adapter
+ *
+ * Deletes the pre cac adapter
+ *
+ * Return: None
+ */
+void wlan_hdd_sap_pre_cac_failure(void *data)
+{
+ cds_ssr_protect(__func__);
+ __wlan_hdd_sap_pre_cac_failure(data);
+ cds_ssr_unprotect(__func__);
+}
/**
* wlan_hdd_sap_pre_cac_success() - Process the pre cac result