diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index d9c573eea1cd..6d8b40fc3426 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -1692,7 +1692,10 @@ static QDF_STATUS hdd_dis_connect_handler(struct hdd_adapter *adapter, sta_id, status, status); status = QDF_STATUS_E_FAILURE; } - hdd_ctx->sta_to_adapter[sta_id] = NULL; + if (sta_id < HDD_MAX_ADAPTERS) + hdd_ctx->sta_to_adapter[sta_id] = NULL; + else + hdd_debug("invalid sta id %d", sta_id); /* Clear all the peer sta register with TL. */ for (i = 0; i < MAX_PEERS; i++) { if (HDD_WLAN_INVALID_STA_ID == @@ -1713,8 +1716,10 @@ static QDF_STATUS hdd_dis_connect_handler(struct hdd_adapter *adapter, HDD_WLAN_INVALID_STA_ID; qdf_mem_zero(&sta_ctx->conn_info.peerMacAddress[i], sizeof(struct qdf_mac_addr)); - if (sta_id < (WLAN_MAX_STA_COUNT + 3)) + if (sta_id < HDD_MAX_ADAPTERS) hdd_ctx->sta_to_adapter[sta_id] = NULL; + else + hdd_debug("invalid sta_id %d", sta_id); } } else { sta_id = sta_ctx->conn_info.staId[0]; @@ -1731,6 +1736,8 @@ static QDF_STATUS hdd_dis_connect_handler(struct hdd_adapter *adapter, } if (sta_id < HDD_MAX_ADAPTERS) hdd_ctx->sta_to_adapter[sta_id] = NULL; + else + hdd_debug("invalid sta_id %d", sta_id); } /* Clear saved connection information in HDD */ hdd_conn_remove_connect_info(sta_ctx); @@ -2700,13 +2707,11 @@ hdd_association_completion_handler(struct hdd_adapter *adapter, sta_ctx->ft_carrier_on = false; ft_carrier_on = true; } - if ((WLAN_MAX_STA_COUNT + 3) > roam_info->staId) + if (roam_info->staId < HDD_MAX_ADAPTERS) hdd_ctx->sta_to_adapter[roam_info->staId] = adapter; else hdd_err("Wrong Staid: %d", roam_info->staId); - hdd_ctx->sta_to_adapter[roam_info->staId] = adapter; - if (hdd_ipa_is_enabled(hdd_ctx)) hdd_ipa_wlan_evt(adapter, roam_info->staId, HDD_IPA_STA_CONNECT, @@ -3291,8 +3296,11 @@ static void hdd_roam_ibss_indication_handler(struct hdd_adapter *adapter, hdd_sta_ctx->broadcast_staid = roam_info->staId; - hdd_ctx->sta_to_adapter[roam_info->staId] = - adapter; + if (roam_info->staId < HDD_MAX_ADAPTERS) + hdd_ctx->sta_to_adapter[roam_info->staId] = + adapter; + else + hdd_debug("invalid sta id %d", roam_info->staId); hdd_roam_register_sta(adapter, roam_info, roam_info->staId, &broadcastMacAddr, @@ -3615,7 +3623,10 @@ roam_roam_connect_status_update_handler(struct hdd_adapter *adapter, break; } - hdd_ctx->sta_to_adapter[roam_info->staId] = adapter; + if (roam_info->staId < HDD_MAX_ADAPTERS) + hdd_ctx->sta_to_adapter[roam_info->staId] = adapter; + else + hdd_debug("invalid sta id %d", roam_info->staId); if (hdd_is_key_install_required_for_ibss(encr_type)) roam_info->fAuthRequired = true; @@ -3697,7 +3708,11 @@ roam_roam_connect_status_update_handler(struct hdd_adapter *adapter, hdd_roam_deregister_sta(adapter, roam_info->staId); - hdd_ctx->sta_to_adapter[roam_info->staId] = NULL; + if (roam_info->staId < HDD_MAX_ADAPTERS) + hdd_ctx->sta_to_adapter[roam_info->staId] = NULL; + else + hdd_debug("invalid sta id %d", roam_info->staId); + sta_ctx->ibss_sta_generation++; cfg80211_del_sta(adapter->dev,