qcacmn: Fix an array index out of bounds issue
Sometimes when the stats of MLD_PEER is requested, Access Violation may occur because peer_stats[1], which does not exit, may be accessed. This change fixes this issue by aggregating the stats of all link_peer into peer_stats[0]. Change-Id: Ib8138d4b95bef39b084756dd9f9ffae67967100a CRs-Fixed: 3678284
This commit is contained in:

committed by
Ravindra Konda

parent
efc1a90bed
commit
cf8f844d0c
@@ -9552,10 +9552,9 @@ QDF_STATUS dp_get_per_link_peer_stats(struct dp_peer *peer,
|
||||
enum cdp_peer_type peer_type,
|
||||
uint8_t num_link)
|
||||
{
|
||||
uint8_t i, index = 0;
|
||||
uint8_t i, min_num_links;
|
||||
struct dp_peer *link_peer;
|
||||
struct dp_mld_link_peers link_peers_info;
|
||||
struct cdp_peer_stats *stats;
|
||||
struct dp_soc *soc = peer->vdev->pdev->soc;
|
||||
|
||||
dp_get_peer_calibr_stats(peer, peer_stats);
|
||||
@@ -9566,19 +9565,18 @@ QDF_STATUS dp_get_per_link_peer_stats(struct dp_peer *peer,
|
||||
dp_get_link_peers_ref_from_mld_peer(soc, peer,
|
||||
&link_peers_info,
|
||||
DP_MOD_ID_GENERIC_STATS);
|
||||
for (i = 0; i < link_peers_info.num_links; i++) {
|
||||
if (link_peers_info.num_links > num_link)
|
||||
dp_info("Req stats of %d link. less than total link %d",
|
||||
num_link, link_peers_info.num_links);
|
||||
|
||||
min_num_links = num_link < link_peers_info.num_links ?
|
||||
num_link : link_peers_info.num_links;
|
||||
for (i = 0; i < min_num_links; i++) {
|
||||
link_peer = link_peers_info.link_peers[i];
|
||||
if (qdf_unlikely(!link_peer))
|
||||
continue;
|
||||
if (index > num_link) {
|
||||
dp_err("Request stats for %d link(s) is less than total link(s) %d",
|
||||
num_link, link_peers_info.num_links);
|
||||
break;
|
||||
}
|
||||
stats = &peer_stats[index];
|
||||
dp_get_peer_per_pkt_stats(link_peer, stats);
|
||||
dp_get_peer_extd_stats(link_peer, stats);
|
||||
index++;
|
||||
dp_get_peer_per_pkt_stats(link_peer, peer_stats);
|
||||
dp_get_peer_extd_stats(link_peer, peer_stats);
|
||||
}
|
||||
dp_release_link_peers_ref(&link_peers_info,
|
||||
DP_MOD_ID_GENERIC_STATS);
|
||||
|
Reference in New Issue
Block a user