RX/TX functions (rte_eth_rx_burst/rte_eth_tx_burst) get 'nb_pkts' argument, which specifies the maximum number to receive/transmit. It can be 0..nb_pkts, meaning nb_pkts+1 options. Testpmd can provide statistics of the burst sizes ('set record-burst-stats on') by incrementing an array cell of index <burst-size>. This array is mistakenly [MAX_PKT_BURST] size. Receiving the maximum burst will cause out of bound write. Enlarge the spread stats array by one cell to fix it.
Fixes: af75078fece3 ("first public release") Cc: sta...@dpdk.org Signed-off-by: Eli Britstein <el...@nvidia.com> Reviewed-by: Matan Azrad <ma...@mellanox.com> Acked-by: Ferruh Yigit <ferruh.yi...@intel.com> --- app/test-pmd/testpmd.c | 2 +- app/test-pmd/testpmd.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index af0e79fe6d..d75451ac7b 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -1873,7 +1873,7 @@ pkt_burst_stats_display(const char *rx_tx, struct pkt_burst_stats *pbs) pktnb_stats[0] = 0; /* Find the next 2 burst sizes with highest occurrences. */ - for (nb_pkt = 1; nb_pkt < MAX_PKT_BURST; nb_pkt++) { + for (nb_pkt = 1; nb_pkt < MAX_PKT_BURST + 1; nb_pkt++) { nb_burst = pbs->pkt_burst_spread[nb_pkt]; if (nb_burst == 0) diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index e3995d24ab..5238308ca7 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -96,7 +96,7 @@ enum { * that are recorded for each forwarding stream. */ struct pkt_burst_stats { - unsigned int pkt_burst_spread[MAX_PKT_BURST]; + unsigned int pkt_burst_spread[MAX_PKT_BURST + 1]; }; /** Information for a given RSS type. */ -- 2.28.0.2311.g225365fb51