app/dma-perf: fix dma mapping access overruns
PATCH 1/1 app/dma-perf: fix dma mapping access overruns
The dma map supports a maximum of MAX_WORKER_NB=128. Initializing the dma map allows a maximum support of MAX_WORKER_NB=256. This results in memory access out-of-bounds when the actual dma entries exceed MAX_WORKER_NB.
This patch talks about MAX_WORKER_NB and MAX_WORKER_NB size set to 256 to fix this.
--- app/test-dma-perf/main.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
app/test-dma-perf/main.h +3 -2
@@ -10,11 +10,12 @@#include <rte_cycles.h> #include <rte_dev.h> -#define MAX_WORKER_NB 128 +#define MAX_WORKER_NB 256#define MAX_OUTPUT_STR_LEN 512#define MAX_DMA_NB 128 -#define MAX_LCORE_NB 256 +/* Note that MAX_LCORE_NB <= MAX_WORKER_NB */ +#define MAX_LCORE_NB MAX_WORKER_NBextern char output_str[MAX_WORKER_NB +1 ][MAX_OUTPUT_STR_LEN ];
Signature · 1 line
2.25.1
PATCH v2 1/1 app/dma-perf: fix lcores array out of bounds access
The default size of the lcores array in the lcore dma map is MAX_WORKER_NB. However, when parsing configuration parameters, MAX_LCORE_NB is used as a constraint. Since MAX_LCORE_NB is greater than MAX_WORKER_NB, this causes array access to go out of bounds when the value of the lcore_dma/lcore configuration item in the parameter file is greater than MAX_WORKER_NB.
This patch fixes the issue by removing the MAX_LCORE_NB macro and using MAX_WORKER_NB consistently.
---
v2:A better solution.
--- app/test-dma-perf/main.c | 4 ++-- app/test-dma-perf/main.h | 1 - 2 files changed, 2 insertions(+), 3 deletions(-)
app/test-dma-perf/main.c +2 -2
@@ -177,7 +177,7 @@ parse_lcore(struct test_configure *test_case, const char *value)char *token =strtok (input,", " );while (token !=NULL ) { -if (lcore_dma_map->cnt >=MAX_LCORE_NB ) { +if (lcore_dma_map->cnt >=MAX_WORKER_NB ) {free (input);return -1 ; }
@@ -248,7 +248,7 @@ parse_lcore_dma(struct test_configure *test_case, const char *value) } lcore_dma_map = &test_case->lcore_dma_map; -if (lcore_dma_map->cnt >=MAX_LCORE_NB ) { +if (lcore_dma_map->cnt >=MAX_WORKER_NB ) {fprintf (stderr,"lcores count error\n" ); ret =-1 ;break ;
app/test-dma-perf/main.h +0 -1
@@ -14,7 +14,6 @@#define MAX_OUTPUT_STR_LEN 512#define MAX_DMA_NB 128 -#define MAX_LCORE_NB 256extern char output_str[MAX_WORKER_NB +1 ][MAX_OUTPUT_STR_LEN ];
Signature · 1 line
2.25.1
Thomas Monjalon
AppliedRe: [PATCH v2] app/dma-perf: fix lcores array out of bounds access
26/10/2023 11:53, Mingjin Ye:
Quoted 8 lines
The default size of the lcores array in the lcore dma map is
MAX_WORKER_NB. However, when parsing configuration parameters,MAX_LCORE_NBis used as a constraint. SinceMAX_LCORE_NBis greater thanMAX_WORKER_NB, this causes array access to go out of bounds when the value of thelcore_dma/lcoreconfiguration item in the parameter file is greater thanMAX_WORKER_NB.
Quoted 6 lines
This patch fixes the issue by removing the
MAX_LCORE_NBmacro and usingMAX_WORKER_NBconsistently.Fixes 623dc9364dc6 ("app/dma-perf: introduce DMA performance test")Signed-off-by Mingjin Ye <[email protected]>
Applied, thanks.