From 7f63d05a487b0fec49b675cd3c4cdab10782e0a4 Mon Sep 17 00:00:00 2001 From: Manishekar Chandrasekaran Date: Sat, 7 May 2016 09:54:00 +0530 Subject: [PATCH] qcacld-3.0: Initialize spinlocks used for STA and SAP information update qcacld-2.0 to qcacld-3.0 propagation Initialize spinlocks sap_update_info_lock and sta_update_info_lock which are used during SAP and STA information update respectively. These uninitialized spinlocks lead to crash during access due to bad magic value of the spinlock. Change-Id: I7d2df8337f9feed352430774907aa095affa5a69 CRs-Fixed: 1011996 --- core/cds/src/cds_concurrency.c | 16 ++++++++-------- core/hdd/inc/wlan_hdd_main.h | 4 ++-- core/hdd/src/wlan_hdd_hostapd.c | 7 +++++-- core/hdd/src/wlan_hdd_main.c | 7 ++++++- core/hdd/src/wlan_hdd_scan.c | 1 + 5 files changed, 22 insertions(+), 13 deletions(-) diff --git a/core/cds/src/cds_concurrency.c b/core/cds/src/cds_concurrency.c index 0c11fdbeda44..bf67f59c75c2 100644 --- a/core/cds/src/cds_concurrency.c +++ b/core/cds/src/cds_concurrency.c @@ -1927,9 +1927,9 @@ bool cds_is_sta_connection_pending(void) return false; } - spin_lock(&hdd_ctx->sta_update_info_lock); + qdf_spin_lock(&hdd_ctx->sta_update_info_lock); status = hdd_ctx->is_sta_connection_pending; - spin_unlock(&hdd_ctx->sta_update_info_lock); + qdf_spin_unlock(&hdd_ctx->sta_update_info_lock); return status; } @@ -1952,9 +1952,9 @@ void cds_change_sta_conn_pending_status(bool value) return; } - spin_lock(&hdd_ctx->sta_update_info_lock); + qdf_spin_lock(&hdd_ctx->sta_update_info_lock); hdd_ctx->is_sta_connection_pending = value; - spin_unlock(&hdd_ctx->sta_update_info_lock); + qdf_spin_unlock(&hdd_ctx->sta_update_info_lock); } /** @@ -1976,9 +1976,9 @@ static bool cds_is_sap_restart_required(void) return false; } - spin_lock(&hdd_ctx->sap_update_info_lock); + qdf_spin_lock(&hdd_ctx->sap_update_info_lock); status = hdd_ctx->is_sap_restart_required; - spin_unlock(&hdd_ctx->sap_update_info_lock); + qdf_spin_unlock(&hdd_ctx->sap_update_info_lock); return status; } @@ -2001,9 +2001,9 @@ void cds_change_sap_restart_required_status(bool value) return; } - spin_lock(&hdd_ctx->sap_update_info_lock); + qdf_spin_lock(&hdd_ctx->sap_update_info_lock); hdd_ctx->is_sap_restart_required = value; - spin_unlock(&hdd_ctx->sap_update_info_lock); + qdf_spin_unlock(&hdd_ctx->sap_update_info_lock); } /** diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index f8a3837b13ee..cdd77891d7e1 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -1320,8 +1320,8 @@ struct hdd_context_s { struct work_struct sap_start_work; bool is_sap_restart_required; bool is_sta_connection_pending; - spinlock_t sap_update_info_lock; - spinlock_t sta_update_info_lock; + qdf_spinlock_t sap_update_info_lock; + qdf_spinlock_t sta_update_info_lock; uint8_t dev_dfs_cac_status; diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 0cb38a44674e..bf0cb5c310ba 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -116,6 +116,7 @@ int hdd_sap_context_init(hdd_context_t *hdd_ctx) mutex_init(&hdd_ctx->sap_lock); qdf_wake_lock_create(&hdd_ctx->sap_wake_lock, "qcom_sap_wakelock"); + qdf_spinlock_create(&hdd_ctx->sap_update_info_lock); mutex_init(&hdd_ctx->dfs_lock); @@ -220,6 +221,8 @@ void hdd_sap_context_destroy(hdd_context_t *hdd_ctx) mutex_destroy(&hdd_ctx->dfs_lock); + qdf_spinlock_destroy(&hdd_ctx->sap_update_info_lock); + } /** @@ -8161,9 +8164,9 @@ static int __wlan_hdd_cfg80211_stop_ap(struct wiphy *wiphy, (QDF_SAP_MODE == pAdapter->device_mode)) { cds_flush_work(&pHddCtx->sap_start_work); hddLog(LOGW, FL("Canceled the pending restart work")); - spin_lock(&pHddCtx->sap_update_info_lock); + qdf_spin_lock(&pHddCtx->sap_update_info_lock); pHddCtx->is_sap_restart_required = false; - spin_unlock(&pHddCtx->sap_update_info_lock); + qdf_spin_unlock(&pHddCtx->sap_update_info_lock); } pAdapter->sessionCtx.ap.sapConfig.acs_cfg.acs_mode = false; if (pAdapter->sessionCtx.ap.sapConfig.acs_cfg.ch_list) diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index c4f7f9f8488f..eb70039025e4 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -4183,6 +4183,10 @@ void hdd_wlan_exit(hdd_context_t *hdd_ctx) QDF_ASSERT(QDF_IS_STATUS_SUCCESS(qdf_status)); } + qdf_spinlock_destroy(&hdd_ctx->hdd_adapter_lock); + qdf_spinlock_destroy(&hdd_ctx->sta_update_info_lock); + qdf_spinlock_destroy(&hdd_ctx->connection_status_lock); + /* * Close CDS * This frees pMac(HAL) context. There should not be any call @@ -5484,8 +5488,9 @@ static int hdd_context_init(hdd_context_t *hdd_ctx) hdd_init_bpf_completion(); qdf_spinlock_create(&hdd_ctx->connection_status_lock); - + qdf_spinlock_create(&hdd_ctx->sta_update_info_lock); qdf_spinlock_create(&hdd_ctx->hdd_adapter_lock); + qdf_list_create(&hdd_ctx->hddAdapters, MAX_NUMBER_OF_ADAPTERS); init_completion(&hdd_ctx->set_antenna_mode_cmpl); diff --git a/core/hdd/src/wlan_hdd_scan.c b/core/hdd/src/wlan_hdd_scan.c index b4d68c59042e..bd7e301c2acd 100644 --- a/core/hdd/src/wlan_hdd_scan.c +++ b/core/hdd/src/wlan_hdd_scan.c @@ -2502,6 +2502,7 @@ void hdd_cleanup_scan_queue(hdd_context_t *hdd_ctx) void hdd_scan_context_destroy(hdd_context_t *hdd_ctx) { qdf_list_destroy(&hdd_ctx->hdd_scan_req_q); + qdf_spinlock_destroy(&hdd_ctx->sched_scan_lock); } /**