app/pdump: check lcore is not the maximum core
Checks
Commit Message
Check lcore id value is not the maximum core supported.
Using lcore id without this check might cause
out of bound access inside the rte_eal_wait_lcore.
Coverity issue: 375841
Fixes: b2854d5317e8 ("app/pdump: support multi-core capture")
Cc: vipin.varghese@intel.com
Cc: stable@dpdk.org
Signed-off-by: Reshma Pattan <reshma.pattan@intel.com>
---
app/pdump/main.c | 8 ++++++++
1 file changed, 8 insertions(+)
Comments
On Fri, 18 Feb 2022 15:18:41 +0000
Reshma Pattan <reshma.pattan@intel.com> wrote:
> lcore_id = rte_get_next_lcore(lcore_id, 1, 0);
> + if (lcore_id == RTE_MAX_LCORE) {
> + printf("Invalid core %u for the packet capture!\n", lcore_id);
> + return;
> + }
Since nothing useful can be done, maybe rte_exit()?
Or at least print to stderr and return error status.
Also, if you write same code in two places, it should
be a function.
@@ -931,11 +931,19 @@ dump_packets(void)
}
lcore_id = rte_get_next_lcore(lcore_id, 1, 0);
+ if (lcore_id == RTE_MAX_LCORE) {
+ printf("Invalid core %u for the packet capture!\n", lcore_id);
+ return;
+ }
for (i = 0; i < num_tuples; i++) {
rte_eal_remote_launch(dump_packets_core,
&pdump_t[i], lcore_id);
lcore_id = rte_get_next_lcore(lcore_id, 1, 0);
+ if (lcore_id == RTE_MAX_LCORE) {
+ printf("Invalid core %u for the capture for the tuple=%d!\n", lcore_id, i);
+ return;
+ }
if (rte_eal_wait_lcore(lcore_id) < 0)
rte_exit(EXIT_FAILURE, "failed to wait\n");