From a1d59091a6b56ea8f22a9954b71070533d26d63a Mon Sep 17 00:00:00 2001 From: Michael Baum Date: Thu, 16 Dec 2021 20:40:40 +0200 Subject: [PATCH] common/mlx5: fix missing validation in devargs parsing The rte_kvargs_parse function parses the arguments "key=value,key=value,..." string and return an allocated structure that contains a key/value list. It enables also to send a key without value and updates the values in the following ways: - "key=value,key,..." - value is updated as NULL. - "key=value,key=,..." - value is updated as "" (empty string). Mlx5 PMDs use this function to parse, but they don't support key without value. They send the value as an argument to strtol function. When strtol gets NULL as a parameter it cause a crash, when it gets "" (empty string) it returns 0. Adds a check that will prevent an argument in these formats, and returns an error for it. Fixes: 85209924039c ("common/mlx5: share memory related devargs") Cc: stable@dpdk.org Signed-off-by: Michael Baum Acked-by: Matan Azrad --- drivers/common/mlx5/mlx5_common.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/common/mlx5/mlx5_common.c b/drivers/common/mlx5/mlx5_common.c index 22ff273819..185db4d004 100644 --- a/drivers/common/mlx5/mlx5_common.c +++ b/drivers/common/mlx5/mlx5_common.c @@ -111,6 +111,11 @@ mlx5_common_args_check_handler(const char *key, const char *val, void *opaque) struct mlx5_common_dev_config *config = opaque; signed long tmp; + if (val == NULL || *val == '\0') { + DRV_LOG(ERR, "Key %s is missing value.", key); + rte_errno = EINVAL; + return -rte_errno; + } errno = 0; tmp = strtol(val, NULL, 0); if (errno) {