Sync some patchs from upstreaming and modifies are as follow: 1. The rte_kvargs_process() was used to parse KV pairs, it also supports to parse 'only keys' 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'. 2. The MAP_FAILED should be used to determine whether the mapping is successful but not NULL. This patch fix it. (cherry picked from commit dfaed15bf9253e6b71dda7639806c0b265164a9e)
58 lines
2.0 KiB
Diff
58 lines
2.0 KiB
Diff
From 51a50c25f5884df574cb254ee92de23bc821c0b4 Mon Sep 17 00:00:00 2001
|
|
From: Chengwen Feng <fengchengwen@huawei.com>
|
|
Date: Thu, 2 Mar 2023 07:50:10 +0000
|
|
Subject: net/virtio: fix empty devargs parsing
|
|
|
|
[ upstream commit 1c1b35b59b4cee8836f34498b7c55b49de39d7b3 ]
|
|
|
|
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'
|
|
(e.g. vectorized,vdpa).
|
|
|
|
Fixes: 4710e16a4a7b ("net/virtio: add parameter to enable vectorized path")
|
|
Fixes: 44d7b2e87b69 ("net/virtio: refactor devargs parsing")
|
|
Fixes: 440f03c25378 ("net/virtio: skip device probe in vDPA mode")
|
|
Cc: stable@dpdk.org
|
|
|
|
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
|
|
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
|
|
---
|
|
drivers/net/virtio/virtio_ethdev.c | 3 +++
|
|
drivers/net/virtio/virtio_pci_ethdev.c | 3 +++
|
|
2 files changed, 6 insertions(+)
|
|
|
|
diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
|
|
index a38b15d01c..c22b2f2889 100644
|
|
--- a/drivers/net/virtio/virtio_ethdev.c
|
|
+++ b/drivers/net/virtio/virtio_ethdev.c
|
|
@@ -2474,6 +2474,9 @@ virtio_dev_speed_capa_get(uint32_t speed)
|
|
static int vectorized_check_handler(__rte_unused const char *key,
|
|
const char *value, void *ret_val)
|
|
{
|
|
+ if (value == NULL || ret_val == NULL)
|
|
+ return -EINVAL;
|
|
+
|
|
if (strcmp(value, "1") == 0)
|
|
*(int *)ret_val = 1;
|
|
else
|
|
diff --git a/drivers/net/virtio/virtio_pci_ethdev.c b/drivers/net/virtio/virtio_pci_ethdev.c
|
|
index 54645dc62e..de7b1ef344 100644
|
|
--- a/drivers/net/virtio/virtio_pci_ethdev.c
|
|
+++ b/drivers/net/virtio/virtio_pci_ethdev.c
|
|
@@ -138,6 +138,9 @@ eth_virtio_pci_uninit(struct rte_eth_dev *eth_dev)
|
|
static int vdpa_check_handler(__rte_unused const char *key,
|
|
const char *value, void *ret_val)
|
|
{
|
|
+ if (value == NULL || ret_val == NULL)
|
|
+ return -EINVAL;
|
|
+
|
|
if (strcmp(value, "1") == 0)
|
|
*(int *)ret_val = 1;
|
|
else
|
|
--
|
|
2.23.0
|
|
|