[PATCH] common/mlx5: fix missing validation in devargs parsing
    michaelba at nvidia.com 
    michaelba at nvidia.com
       
    Thu Dec 16 19:40:40 CET 2021
    
    
  
From: Michael Baum <michaelba at nvidia.com>
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: 85209924039c4 ("common/mlx5: share memory related devargs")
Cc: stable at dpdk.org
Signed-off-by: Michael Baum <michaelba at nvidia.com>
Acked-by: Matan Azrad <matan at nvidia.com>
---
 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 f1650f94c6..76cfeafef8 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) {
-- 
2.25.1
    
    
More information about the dev
mailing list