diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 53e38a8e7408..6e9ddb01bf5a 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -12952,6 +12952,16 @@ static void csr_merge_supported_and_extended_rates( { int i; + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, + FL("supported_rates: %d extended_rates: %d"), + supported_rates->numRates, extended_rates->numRates); + + if (supported_rates->numRates > SIR_MAC_RATESET_EID_MAX) + supported_rates->numRates = SIR_MAC_RATESET_EID_MAX; + + if (extended_rates->numRates > SIR_MAC_RATESET_EID_MAX) + extended_rates->numRates = SIR_MAC_RATESET_EID_MAX; + qdf_mem_copy(rates->rate, supported_rates->rate, supported_rates->numRates); @@ -13137,12 +13147,18 @@ csr_roam_get_bss_start_parms(tpAniSirGlobal pMac, opr_ch = tmp_opr_ch; break; } - pParam->operationChn = opr_ch; + + pParam->operationChn = opr_ch; if (pProfile->supported_rates.numRates || pProfile->extended_rates.numRates) { struct merged_mac_rate_set rates_driver, rates_hostapd; + qdf_mem_zero(&rates_driver, + sizeof(struct merged_mac_rate_set)); + qdf_mem_zero(&rates_hostapd, + sizeof(struct merged_mac_rate_set)); + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, "Merge rates driver"); csr_merge_supported_and_extended_rates(&rates_driver, @@ -18772,7 +18788,10 @@ QDF_STATUS csr_roam_channel_change_req(tpAniSirGlobal pMac, * give us rates based on original channel which may not be * suitable for new channel */ + qdf_mem_zero(¶m, sizeof(tCsrRoamStartBssParams)); + csr_roam_get_bss_start_parms(pMac, profile, ¶m, true); + pMsg = qdf_mem_malloc(sizeof(tSirChanChangeRequest)); if (!pMsg) return QDF_STATUS_E_NOMEM;