diff options
| author | Rajeev Kumar <rajekuma@codeaurora.org> | 2017-09-28 17:41:35 -0700 |
|---|---|---|
| committer | snandini <snandini@codeaurora.org> | 2017-09-29 17:29:27 -0700 |
| commit | 310e284dac74807aaefd2acd78e7ceb9088617b3 (patch) | |
| tree | 83073f38bb64d15ceb6df6268548aea1e15d8629 | |
| parent | 9dd946a525d5048fb18ee433809b327039ebebfa (diff) | |
qcacld-3.0: Set hdd context to null when its freed
HDD context in gp_cds_context is not getting reset to null during
driver remove callback when hdd context is destroyed. Set HDD context
to null to avoid any use after free.
Change-Id: Ifbeaca139ed44f871266a11f4b9e973961e26cc8
CRs-Fixed: 2119187
| -rw-r--r-- | core/cds/src/cds_api.c | 3 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_main.c | 5 |
2 files changed, 6 insertions, 2 deletions
diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c index 4a9e4c1636ac..27737e628eb5 100644 --- a/core/cds/src/cds_api.c +++ b/core/cds/src/cds_api.c @@ -1358,6 +1358,9 @@ QDF_STATUS cds_set_context(QDF_MODULE_ID module_id, void *context) case QDF_MODULE_ID_HIF: p_cds_context->pHIFContext = context; break; + case QDF_MODULE_ID_HDD: + p_cds_context->pHDDContext = context; + break; default: QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, "%s: Module ID %i does not have its context managed by CDS", diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index e23f2b1bbbce..795d138e748a 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -5735,6 +5735,7 @@ static int hdd_context_deinit(hdd_context_t *hdd_ctx) */ static void hdd_context_destroy(hdd_context_t *hdd_ctx) { + cds_set_context(QDF_MODULE_ID_HDD, NULL); wlan_hdd_deinit_tx_rx_histogram(hdd_ctx); @@ -7838,8 +7839,6 @@ static hdd_context_t *hdd_context_create(struct device *dev) hdd_override_ini_config(hdd_ctx); - ((cds_context_type *) (p_cds_context))->pHDDContext = (void *)hdd_ctx; - ret = hdd_context_init(hdd_ctx); if (ret) @@ -7868,6 +7867,8 @@ static hdd_context_t *hdd_context_create(struct device *dev) if (cds_is_multicast_logging()) wlan_logging_set_log_level(); + cds_set_context(QDF_MODULE_ID_HDD, hdd_ctx); + skip_multicast_logging: hdd_set_trace_level_for_each(hdd_ctx); |
