The last argument passed to ssovf_parsekv() is an unsigned char*, but it is accessed as an integer. This can lead to an integer overflow.
Hence, make ensure the argument is accessed as a char and for better error handling use strtol instead of atoi. Signed-off-by: Hanumanth Pothula <hpoth...@marvell.com> --- drivers/event/octeontx/ssovf_evdev.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/event/octeontx/ssovf_evdev.c b/drivers/event/octeontx/ssovf_evdev.c index 3a933b1db7..ccb447d33a 100644 --- a/drivers/event/octeontx/ssovf_evdev.c +++ b/drivers/event/octeontx/ssovf_evdev.c @@ -719,8 +719,16 @@ ssovf_close(struct rte_eventdev *dev) static int ssovf_parsekv(const char *key __rte_unused, const char *value, void *opaque) { - int *flag = opaque; - *flag = !!atoi(value); + uint8_t *flag = (uint8_t *)opaque; + char *end; + + errno = 0; + *flag = (uint8_t)strtol(value, &end, 2); + if ((errno != 0) || (value == end)) { + ssovf_log_err("fail to get key val ret:%d err:%d", *flag, errno); + return -EINVAL; + } + return 0; } -- 2.25.1