[v2,38/44] event/dlb2: fix segment fault when parse devargs

Message ID 20230320092110.37295-39-fengchengwen@huawei.com (mailing list archive)
State Changes Requested, archived
Delegated to: Thomas Monjalon
Headers
Series fix segment fault when parse args |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

fengchengwen March 20, 2023, 9:21 a.m. UTC
  The rte_kvargs_process() was used to parse KV pairs, it also supports
to parse 'only keys' (e.g. socket_id) type. And the callback function
parameter 'value' is NULL when parsed 'only keys'.

This patch fixes segment fault when parse input args with 'only keys'.

Fixes: 8d1d9070bbe9 ("event/dlb2: optimize producer port probing")
Fixes: bec8901bfe9f ("event/dlb2: support ldb port specific COS")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 drivers/event/dlb2/dlb2.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
  

Comments

Sevincer, Abdullah March 24, 2023, 4:26 p.m. UTC | #1
Acked-by: Abdullah Sevincer <abdullah.sevincer@intel.com>

-----Original Message-----
From: Chengwen Feng <fengchengwen@huawei.com> 
Sent: Monday, March 20, 2023 2:21 AM
To: thomas@monjalon.net; ferruh.yigit@amd.com; McDaniel, Timothy <timothy.mcdaniel@intel.com>; Sevincer, Abdullah <abdullah.sevincer@intel.com>
Cc: dev@dpdk.org
Subject: [PATCH v2 38/44] event/dlb2: fix segment fault when parse devargs

The rte_kvargs_process() was used to parse KV pairs, it also supports to parse 'only keys' (e.g. socket_id) type. And the callback function parameter 'value' is NULL when parsed 'only keys'.

This patch fixes segment fault when parse input args with 'only keys'.

Fixes: 8d1d9070bbe9 ("event/dlb2: optimize producer port probing")
Fixes: bec8901bfe9f ("event/dlb2: support ldb port specific COS")
Cc: stable@dpdk.org

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 drivers/event/dlb2/dlb2.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/event/dlb2/dlb2.c b/drivers/event/dlb2/dlb2.c index 60c5cd4804..d436cf852a 100644
--- a/drivers/event/dlb2/dlb2.c
+++ b/drivers/event/dlb2/dlb2.c
@@ -329,6 +329,9 @@ set_numa_node(const char *key __rte_unused, const char *value, void *opaque)
 	int *socket_id = opaque;
 	int ret;
 
+	if (value == NULL)
+		return -EINVAL;
+
 	ret = dlb2_string_to_int(socket_id, value);
 	if (ret < 0)
 		return ret;
@@ -542,7 +545,7 @@ set_cos_bw(const char *key __rte_unused,  {
 	struct dlb2_cos_bw *cos_bw = opaque;
 
-	if (opaque == NULL) {
+	if (value == NULL || opaque == NULL) {
 		DLB2_LOG_ERR("NULL pointer\n");
 		return -EINVAL;
 	}
--
2.17.1
  

Patch

diff --git a/drivers/event/dlb2/dlb2.c b/drivers/event/dlb2/dlb2.c
index 60c5cd4804..d436cf852a 100644
--- a/drivers/event/dlb2/dlb2.c
+++ b/drivers/event/dlb2/dlb2.c
@@ -329,6 +329,9 @@  set_numa_node(const char *key __rte_unused, const char *value, void *opaque)
 	int *socket_id = opaque;
 	int ret;
 
+	if (value == NULL)
+		return -EINVAL;
+
 	ret = dlb2_string_to_int(socket_id, value);
 	if (ret < 0)
 		return ret;
@@ -542,7 +545,7 @@  set_cos_bw(const char *key __rte_unused,
 {
 	struct dlb2_cos_bw *cos_bw = opaque;
 
-	if (opaque == NULL) {
+	if (value == NULL || opaque == NULL) {
 		DLB2_LOG_ERR("NULL pointer\n");
 		return -EINVAL;
 	}