diff --git a/0277-mem-fix-hugepage-info-mapping.patch b/0277-mem-fix-hugepage-info-mapping.patch new file mode 100644 index 0000000000000000000000000000000000000000..c7c302bec712cf1a6e549438d8ba39b32f815140 --- /dev/null +++ b/0277-mem-fix-hugepage-info-mapping.patch @@ -0,0 +1,51 @@ +From 2d42f6d26a83262c9765c6db7dfca44c8c26d995 Mon Sep 17 00:00:00 2001 +From: Chengwen Feng +Date: Mon, 6 Feb 2023 10:53:10 +0000 +Subject: mem: fix hugepage info mapping + +[ upstream commit 66e7ac416f3d62c5ee773ff02c115a24da9f1991 ] + +The map_shared_memory() function should treat mmap MAP_FAILED as NULL +because callers compare it with NULL to determine whether the map is +failed. + +Fixes: 764bf26873b9 ("add FreeBSD support") +Fixes: cb97d93e9d3b ("mem: share hugepage info primary and secondary") +Cc: stable@dpdk.org + +Signed-off-by: Chengwen Feng +Reviewed-by: David Marchand +--- + lib/eal/freebsd/eal_hugepage_info.c | 2 +- + lib/eal/linux/eal_hugepage_info.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/lib/eal/freebsd/eal_hugepage_info.c b/lib/eal/freebsd/eal_hugepage_info.c +index 9dbe375bd3..e58e618469 100644 +--- a/lib/eal/freebsd/eal_hugepage_info.c ++++ b/lib/eal/freebsd/eal_hugepage_info.c +@@ -33,7 +33,7 @@ map_shared_memory(const char *filename, const size_t mem_size, int flags) + } + retval = mmap(NULL, mem_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + close(fd); +- return retval; ++ return retval == MAP_FAILED ? NULL : retval; + } + + static void * +diff --git a/lib/eal/linux/eal_hugepage_info.c b/lib/eal/linux/eal_hugepage_info.c +index 41acf180ee..6c76a36a0d 100644 +--- a/lib/eal/linux/eal_hugepage_info.c ++++ b/lib/eal/linux/eal_hugepage_info.c +@@ -57,7 +57,7 @@ map_shared_memory(const char *filename, const size_t mem_size, int flags) + retval = mmap(NULL, mem_size, PROT_READ | PROT_WRITE, + MAP_SHARED, fd, 0); + close(fd); +- return retval; ++ return retval == MAP_FAILED ? NULL : retval; + } + + static void * +-- +2.23.0 + diff --git a/0278-raw-ifpga-base-fix-init-with-multi-process.patch b/0278-raw-ifpga-base-fix-init-with-multi-process.patch new file mode 100644 index 0000000000000000000000000000000000000000..d5d7ab9c166f4a4f95242864d2287c3f1e52d699 --- /dev/null +++ b/0278-raw-ifpga-base-fix-init-with-multi-process.patch @@ -0,0 +1,44 @@ +From 08ad2bc6e7fd4bc11b25011dbae48268828d372f Mon Sep 17 00:00:00 2001 +From: Chengwen Feng +Date: Mon, 6 Feb 2023 10:53:11 +0000 +Subject: raw/ifpga/base: fix init with multi-process + +[ upstream commit e6a2804b77c5fbfd97d0fe05ec7f959a0404a380 ] + +The MAP_FAILED should be used to determine whether the mapping is +successful. + +Fixes: e41856b515ce ("raw/ifpga/base: enhance driver reliability in multi-process") +Cc: stable@dpdk.org + +Signed-off-by: Chengwen Feng +Reviewed-by: Rosen Xu +--- + drivers/raw/ifpga/base/opae_hw_api.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/raw/ifpga/base/opae_hw_api.c b/drivers/raw/ifpga/base/opae_hw_api.c +index 11c9887c7f..45efe70473 100644 +--- a/drivers/raw/ifpga/base/opae_hw_api.c ++++ b/drivers/raw/ifpga/base/opae_hw_api.c +@@ -380,7 +380,7 @@ static pthread_mutex_t *opae_adapter_mutex_open(struct opae_adapter *adapter) + PROT_READ | PROT_WRITE, MAP_SHARED, + shm_id, 0); + adapter->lock = (pthread_mutex_t *)ptr; +- if (ptr) { ++ if (ptr != MAP_FAILED) { + dev_info(NULL, + "shared memory %s address is %p\n", + shm_name, ptr); +@@ -499,7 +499,7 @@ static void *opae_adapter_shm_alloc(struct opae_adapter *adapter) + adapter->shm.size = size; + adapter->shm.ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, + MAP_SHARED, shm_id, 0); +- if (adapter->shm.ptr) { ++ if (adapter->shm.ptr != MAP_FAILED) { + dev_info(NULL, + "shared memory %s address is %p\n", + shm_name, adapter->shm.ptr); +-- +2.23.0 + diff --git a/0279-compressdev-fix-empty-devargs-parsing.patch b/0279-compressdev-fix-empty-devargs-parsing.patch new file mode 100644 index 0000000000000000000000000000000000000000..d42e29dc7b2dd2527eb81a99258964955f86d5f5 --- /dev/null +++ b/0279-compressdev-fix-empty-devargs-parsing.patch @@ -0,0 +1,52 @@ +From 37b765efbca81e4aa81fcb685e7810398e800e29 Mon Sep 17 00:00:00 2001 +From: Chengwen Feng +Date: Thu, 2 Mar 2023 07:50:05 +0000 +Subject: compressdev: fix empty devargs parsing + +[ upstream commit bb27182482d61777de6a38b16a1d2c692c2c3f8b ] + +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 in rte_compressdev_pmd_parse_uint_arg() +when parse input args with 'only keys' (e.g. socket_id). + +For a similar reason, this patch fixes +rte_compressdev_pmd_parse_name_arg(). + +Fixes: ed7dd94f7f66 ("compressdev: add basic device management") +Cc: stable@dpdk.org + +Signed-off-by: Chengwen Feng +--- + lib/compressdev/rte_compressdev_pmd.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/lib/compressdev/rte_compressdev_pmd.c b/lib/compressdev/rte_compressdev_pmd.c +index 7f500d76d4..6a11a396b7 100644 +--- a/lib/compressdev/rte_compressdev_pmd.c ++++ b/lib/compressdev/rte_compressdev_pmd.c +@@ -20,6 +20,9 @@ rte_compressdev_pmd_parse_name_arg(const char *key __rte_unused, + struct rte_compressdev_pmd_init_params *params = extra_args; + int n; + ++ if (value == NULL || extra_args == NULL) ++ return -EINVAL; ++ + n = strlcpy(params->name, value, RTE_COMPRESSDEV_NAME_MAX_LEN); + if (n >= RTE_COMPRESSDEV_NAME_MAX_LEN) + return -EINVAL; +@@ -37,6 +40,9 @@ rte_compressdev_pmd_parse_uint_arg(const char *key __rte_unused, + int i; + char *end; + ++ if (value == NULL || extra_args == NULL) ++ return -EINVAL; ++ + errno = 0; + i = strtol(value, &end, 10); + if (*end != 0 || errno != 0 || i < 0) +-- +2.23.0 + diff --git a/0280-cryptodev-fix-empty-devargs-parsing.patch b/0280-cryptodev-fix-empty-devargs-parsing.patch new file mode 100644 index 0000000000000000000000000000000000000000..9e9f0ead16badbb59d1ceca445e1830e2921b31c --- /dev/null +++ b/0280-cryptodev-fix-empty-devargs-parsing.patch @@ -0,0 +1,55 @@ +From 23320d21b4abc8f52c612768a8508443f77dfcd8 Mon Sep 17 00:00:00 2001 +From: Chengwen Feng +Date: Thu, 2 Mar 2023 07:50:07 +0000 +Subject: cryptodev: fix empty devargs parsing + +[ upstream commit 8146454c56636ba8af5263b57e1c4a9f67fd4a39 ] + +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 in rte_cryptodev_pmd_parse_uint_arg() +when parse input args with 'only keys' (e.g. socket_id, +max_nb_queue_pairs). + +For a similar reason, this patch fixes +rte_cryptodev_pmd_parse_name_arg(). + +Fixes: 9e6edea41805 ("cryptodev: add APIs to assist PMD initialisation") +Cc: stable@dpdk.org + +Signed-off-by: Chengwen Feng +Acked-by: Akhil Goyal +--- + lib/cryptodev/cryptodev_pmd.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/lib/cryptodev/cryptodev_pmd.c b/lib/cryptodev/cryptodev_pmd.c +index 739a0b3f34..9dab1ef7cd 100644 +--- a/lib/cryptodev/cryptodev_pmd.c ++++ b/lib/cryptodev/cryptodev_pmd.c +@@ -19,6 +19,9 @@ rte_cryptodev_pmd_parse_name_arg(const char *key __rte_unused, + struct rte_cryptodev_pmd_init_params *params = extra_args; + int n; + ++ if (value == NULL || extra_args == NULL) ++ return -EINVAL; ++ + n = strlcpy(params->name, value, RTE_CRYPTODEV_NAME_MAX_LEN); + if (n >= RTE_CRYPTODEV_NAME_MAX_LEN) + return -EINVAL; +@@ -35,6 +38,10 @@ rte_cryptodev_pmd_parse_uint_arg(const char *key __rte_unused, + { + int i; + char *end; ++ ++ if (value == NULL || extra_args == NULL) ++ return -EINVAL; ++ + errno = 0; + + i = strtol(value, &end, 10); +-- +2.23.0 + diff --git a/0281-net-hns3-fix-empty-devargs-parsing.patch b/0281-net-hns3-fix-empty-devargs-parsing.patch new file mode 100644 index 0000000000000000000000000000000000000000..84791c667820e0f36963e83a46ad084ed3a0fa83 --- /dev/null +++ b/0281-net-hns3-fix-empty-devargs-parsing.patch @@ -0,0 +1,62 @@ +From cd1064bf44f8da3286a48f3f3da7df88ae4fa645 Mon Sep 17 00:00:00 2001 +From: Chengwen Feng +Date: Thu, 2 Mar 2023 07:50:09 +0000 +Subject: net/hns3: fix empty devargs parsing + +[ upstream commit 8e9bd29995ddb1205d90291a684bcf71599d6623 ] + +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. rx_func_hint). + +Fixes: a124f9e9591b ("net/hns3: add runtime config to select IO burst function") +Fixes: 70791213242e ("net/hns3: support masking device capability") +Fixes: 2fc3e696a7f1 ("net/hns3: add runtime config for mailbox limit time") +Cc: stable@dpdk.org + +Signed-off-by: Chengwen Feng +Acked-by: Dongdong Liu +--- + drivers/net/hns3/hns3_common.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/drivers/net/hns3/hns3_common.c b/drivers/net/hns3/hns3_common.c +index 3c5e07f1bd..6697ecefe6 100644 +--- a/drivers/net/hns3/hns3_common.c ++++ b/drivers/net/hns3/hns3_common.c +@@ -161,6 +161,9 @@ hns3_parse_io_hint_func(const char *key, const char *value, void *extra_args) + + RTE_SET_USED(key); + ++ if (value == NULL || extra_args == NULL) ++ return 0; ++ + if (strcmp(value, "vec") == 0) + hint = HNS3_IO_FUNC_HINT_VEC; + else if (strcmp(value, "sve") == 0) +@@ -201,6 +204,9 @@ hns3_parse_dev_caps_mask(const char *key, const char *value, void *extra_args) + + RTE_SET_USED(key); + ++ if (value == NULL || extra_args == NULL) ++ return 0; ++ + val = strtoull(value, NULL, HNS3_CONVERT_TO_HEXADECIMAL); + *(uint64_t *)extra_args = val; + +@@ -214,6 +220,9 @@ hns3_parse_mbx_time_limit(const char *key, const char *value, void *extra_args) + + RTE_SET_USED(key); + ++ if (value == NULL || extra_args == NULL) ++ return 0; ++ + val = strtoul(value, NULL, HNS3_CONVERT_TO_DECIMAL); + + /* +-- +2.23.0 + diff --git a/0282-net-virtio-fix-empty-devargs-parsing.patch b/0282-net-virtio-fix-empty-devargs-parsing.patch new file mode 100644 index 0000000000000000000000000000000000000000..dafb8671f288efdc7bf0f45b062d25d5d6434aa9 --- /dev/null +++ b/0282-net-virtio-fix-empty-devargs-parsing.patch @@ -0,0 +1,57 @@ +From 51a50c25f5884df574cb254ee92de23bc821c0b4 Mon Sep 17 00:00:00 2001 +From: Chengwen Feng +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 +Reviewed-by: Maxime Coquelin +--- + 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 + diff --git a/0283-dma-skeleton-fix-empty-devargs-parsing.patch b/0283-dma-skeleton-fix-empty-devargs-parsing.patch new file mode 100644 index 0000000000000000000000000000000000000000..61664ec3fb321c4e0b6a916463dfb5574ef46a90 --- /dev/null +++ b/0283-dma-skeleton-fix-empty-devargs-parsing.patch @@ -0,0 +1,46 @@ +From 9db4a191823cb2dec68c4be50bb1143c141da22c Mon Sep 17 00:00:00 2001 +From: Chengwen Feng +Date: Thu, 2 Mar 2023 07:50:11 +0000 +Subject: dma/skeleton: fix empty devargs parsing + +[ upstream commit e0e5dd0450db22fc7712da4b5a8e6fd6e081c870 ] + +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. lcore). + +Fixes: 05d5fc66a269 ("dma/skeleton: introduce skeleton driver") +Cc: stable@dpdk.org + +Signed-off-by: Chengwen Feng +--- + drivers/dma/skeleton/skeleton_dmadev.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/drivers/dma/skeleton/skeleton_dmadev.c b/drivers/dma/skeleton/skeleton_dmadev.c +index 81cbdd286e..67e0357cf0 100644 +--- a/drivers/dma/skeleton/skeleton_dmadev.c ++++ b/drivers/dma/skeleton/skeleton_dmadev.c +@@ -500,9 +500,15 @@ skeldma_parse_lcore(const char *key __rte_unused, + const char *value, + void *opaque) + { +- int lcore_id = atoi(value); ++ int lcore_id; ++ ++ if (value == NULL || opaque == NULL) ++ return -EINVAL; ++ ++ lcore_id = atoi(value); + if (lcore_id >= 0 && lcore_id < RTE_MAX_LCORE) + *(int *)opaque = lcore_id; ++ + return 0; + } + +-- +2.23.0 + diff --git a/0284-raw-skeleton-fix-empty-devargs-parsing.patch b/0284-raw-skeleton-fix-empty-devargs-parsing.patch new file mode 100644 index 0000000000000000000000000000000000000000..4a67dc631322a4c12ad8f8de390f0578afd3a793 --- /dev/null +++ b/0284-raw-skeleton-fix-empty-devargs-parsing.patch @@ -0,0 +1,38 @@ +From db5368482035c920449a75d336afd3622044ee89 Mon Sep 17 00:00:00 2001 +From: Chengwen Feng +Date: Thu, 2 Mar 2023 07:50:12 +0000 +Subject: raw/skeleton: fix empty devargs parsing + +[ upstream commit 11da6149224a8de53d2ddd2aacba7b158cc4e3b4 ] + +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. self_test). + +Fixes: 55ca1b0f2151 ("raw/skeleton: add test cases") +Cc: stable@dpdk.org + +Signed-off-by: Chengwen Feng +--- + drivers/raw/skeleton/skeleton_rawdev.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/raw/skeleton/skeleton_rawdev.c b/drivers/raw/skeleton/skeleton_rawdev.c +index 16ecae3d92..a49e000146 100644 +--- a/drivers/raw/skeleton/skeleton_rawdev.c ++++ b/drivers/raw/skeleton/skeleton_rawdev.c +@@ -659,6 +659,8 @@ skeldev_get_selftest(const char *key __rte_unused, + void *opaque) + { + int *flag = opaque; ++ if (value == NULL || opaque == NULL) ++ return -EINVAL; + *flag = atoi(value); + return 0; + } +-- +2.23.0 + diff --git a/dpdk.spec b/dpdk.spec index ca508161a248be45cf833ecf776a2d7d41576e70..0680ac200eb357886d81a040e04367859ad7074b 100644 --- a/dpdk.spec +++ b/dpdk.spec @@ -1,6 +1,6 @@ Name: dpdk Version: 21.11 -Release: 41 +Release: 42 Packager: packaging@6wind.com URL: http://dpdk.org %global source_version 21.11 @@ -295,6 +295,14 @@ Patch9273: 0273-cryptodev-fix-telemetry-data-truncation.patch Patch9274: 0274-mem-fix-telemetry-data-truncation.patch Patch9275: 0275-telemetry-support-adding-integer-as-hexadecimal.patch Patch9276: 0276-ethdev-get-capabilities-from-telemetry-in-hexadecima.patch +Patch9277: 0277-mem-fix-hugepage-info-mapping.patch +Patch9278: 0278-raw-ifpga-base-fix-init-with-multi-process.patch +Patch9279: 0279-compressdev-fix-empty-devargs-parsing.patch +Patch9280: 0280-cryptodev-fix-empty-devargs-parsing.patch +Patch9281: 0281-net-hns3-fix-empty-devargs-parsing.patch +Patch9282: 0282-net-virtio-fix-empty-devargs-parsing.patch +Patch9283: 0283-dma-skeleton-fix-empty-devargs-parsing.patch +Patch9284: 0284-raw-skeleton-fix-empty-devargs-parsing.patch Summary: Data Plane Development Kit core Group: System Environment/Libraries @@ -442,6 +450,18 @@ strip -g $RPM_BUILD_ROOT/lib/modules/%{kern_devel_ver}/extra/dpdk/igb_uio.ko /usr/sbin/depmod %changelog +* Thu Apr 27 2023 chenjiji - 21.11-42 +- fix empty devargs parsing + 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. + * Fri Apr 21 2023 chenjiji - 21.11-41 - Telemetry: support display as hexadecimal Sync some patchs from upstreaming for telemetry and modifies