diff --git a/core/mac/src/pe/rrm/rrm_api.c b/core/mac/src/pe/rrm/rrm_api.c index 483dc54c59f7..cc705bec06a9 100644 --- a/core/mac/src/pe/rrm/rrm_api.c +++ b/core/mac/src/pe/rrm/rrm_api.c @@ -632,23 +632,25 @@ rrm_process_beacon_report_req(tpAniSirGlobal pMac, pSmeBcnReportReq->channelList.numChannels = num_channels; if (pBeaconReq->measurement_request.Beacon.num_APChannelReport) { - uint8_t *pChanList = - pSmeBcnReportReq->channelList.channelNumber; + uint8_t *ch_lst = pSmeBcnReportReq->channelList.channelNumber; + uint8_t len; + uint16_t ch_ctr = 0; for (num_APChanReport = 0; num_APChanReport < pBeaconReq->measurement_request.Beacon.num_APChannelReport; num_APChanReport++) { - qdf_mem_copy(pChanList, - pBeaconReq->measurement_request.Beacon. - APChannelReport[num_APChanReport]. - channelList, - pBeaconReq->measurement_request.Beacon. - APChannelReport[num_APChanReport]. - num_channelList); + len = pBeaconReq->measurement_request.Beacon. + APChannelReport[num_APChanReport].num_channelList; + if (ch_ctr + len > + sizeof(pSmeBcnReportReq->channelList.channelNumber)) + break; - pChanList += - pBeaconReq->measurement_request.Beacon. - APChannelReport[num_APChanReport].num_channelList; + qdf_mem_copy(&ch_lst[ch_ctr], + pBeaconReq->measurement_request.Beacon. + APChannelReport[num_APChanReport]. + channelList, len); + + ch_ctr += len; } } /* Send request to SME. */