diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index b84b537c8896..3f9656cfb81c 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -13010,14 +13010,31 @@ struct cfg80211_bss *wlan_hdd_cfg80211_inform_bss_frame(hdd_adapter_t *pAdapter, size_t frame_len = sizeof(struct ieee80211_mgmt) + ie_length; int rssi = 0; hdd_context_t *pHddCtx; - int status; struct timespec ts; struct hdd_config *cfg_param; pHddCtx = WLAN_HDD_GET_CTX(pAdapter); - status = wlan_hdd_validate_context(pHddCtx); - if (0 != status) + + /* + * wlan_hdd_validate_context should not be used here, In validate ctx + * start_modules_in_progress or stop_modules_in_progress is validated, + * If the start_modules_in_progress is set to true means the interface + * is not UP yet if the stop_modules_in_progress means that interface + * is already down. So in both the two scenario's driver should not be + * informing bss to kernel. Hence removing the validate context. + */ + + if (NULL == pHddCtx || NULL == pHddCtx->config) { + hdd_debug("HDD context is Null"); return NULL; + } + + if (cds_is_driver_recovering() || + cds_is_load_or_unload_in_progress()) { + hdd_debug("Recovery or load/unload in progress. State: 0x%x", + cds_get_driver_state()); + return NULL; + } cfg_param = pHddCtx->config; mgmt = qdf_mem_malloc((sizeof(struct ieee80211_mgmt) + ie_length));