* [PATCH 02/10] test/telemetry: fix test calling all commands
[not found] <20250619071037.37325-1-david.marchand@redhat.com>
@ 2025-06-19 7:10 ` David Marchand
2025-06-20 9:16 ` Bruce Richardson
2025-06-23 9:54 ` David Marchand
2025-06-19 7:10 ` [PATCH 04/10] eal: fix plugin dir walk David Marchand
` (6 subsequent siblings)
7 siblings, 2 replies; 26+ messages in thread
From: David Marchand @ 2025-06-19 7:10 UTC (permalink / raw)
To: dev; +Cc: stable, Bruce Richardson
This test was doing nothing as it could not find the telemetry client
script following the test suite rework.
Caught while looking at UNH unit test logs:
/root/workspace/Generic-Unit-Test-DPDK/dpdk/app/test/suites/test_telemetry.sh:
18: /root/workspace/Generic-Unit-Test-DPDK/dpdk/app/usertools/dpdk-telemetry.py:
not found
Fixes: 9da71dc4f96e ("test: add test case for scripted telemetry commands")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
app/test/suites/test_telemetry.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/test/suites/test_telemetry.sh b/app/test/suites/test_telemetry.sh
index ca6abe266e..20806b43e4 100755
--- a/app/test/suites/test_telemetry.sh
+++ b/app/test/suites/test_telemetry.sh
@@ -7,7 +7,7 @@ which jq || {
exit 77
}
-rootdir=$(readlink -f $(dirname $(readlink -f $0))/../..)
+rootdir=$(readlink -f $(dirname $(readlink -f $0))/../../..)
tmpoutput=$(mktemp -t dpdk.test_telemetry.XXXXXX)
trap "cat $tmpoutput; rm -f $tmpoutput" EXIT
--
2.49.0
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH 04/10] eal: fix plugin dir walk
[not found] <20250619071037.37325-1-david.marchand@redhat.com>
2025-06-19 7:10 ` [PATCH 02/10] test/telemetry: fix test calling all commands David Marchand
@ 2025-06-19 7:10 ` David Marchand
2025-06-20 9:19 ` Bruce Richardson
2025-06-19 7:10 ` [PATCH 05/10] cmdline: fix port list parsing David Marchand
` (5 subsequent siblings)
7 siblings, 1 reply; 26+ messages in thread
From: David Marchand @ 2025-06-19 7:10 UTC (permalink / raw)
To: dev
Cc: stable, Tyler Retzlaff, Maxime Coquelin, Timothy Redaelli,
Bruce Richardson
For '.' and '..' directories (or any short file name),
a out of bound issue occurs.
Caught by UBSan:
EAL: Detected shared linkage of DPDK
../lib/eal/common/eal_common_options.c:420:15: runtime error: index -2
out of bounds for type 'char[256]'
#0 0x7f867eedf206 in eal_plugindir_init
eal_common_options.c
#1 0x7f867eede58a in eal_plugins_init
(build/lib/librte_eal.so.25+0xde58a)
(BuildId: e7e4a1935e4bacb51c82ab1a84098a27decf3b4c)
#2 0x7f867efb8587 in rte_eal_init
(build/lib/librte_eal.so.25+0x1b8587)
(BuildId: e7e4a1935e4bacb51c82ab1a84098a27decf3b4c)
#3 0x55b62360861e in main
(/home/runner/work/dpdk/dpdk/build/app/dpdk-testpmd+0x9e061e)
(BuildId: d821ec918612c83fad8b5ccb6cc518e66bee48cd)
#4 0x7f8667429d8f in __libc_start_call_main
csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#5 0x7f8667429e3f in __libc_start_main
csu/../csu/libc-start.c:392:3
#6 0x55b622d9d444 in _start
(/home/runner/work/dpdk/dpdk/build/app/dpdk-testpmd+0x175444)
(BuildId: d821ec918612c83fad8b5ccb6cc518e66bee48cd)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
../lib/eal/common/eal_common_options.c:420:15 in
../lib/eal/common/eal_common_options.c:421:15:
runtime error: index 18446744073709551609 out of bounds
for type 'char[256]'
Fixes: c57f6e5c604a ("eal: fix plugin loading")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
lib/eal/common/eal_common_options.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c
index 83b6fc7e89..153f807e4f 100644
--- a/lib/eal/common/eal_common_options.c
+++ b/lib/eal/common/eal_common_options.c
@@ -399,6 +399,14 @@ eal_plugins_init(void)
}
#else
+static bool
+ends_with(const char *str, size_t str_len, const char *tail)
+{
+ size_t tail_len = strlen(tail);
+
+ return str_len >= tail_len && strncmp(&str[str_len - tail_len], tail, tail_len) == 0;
+}
+
static int
eal_plugindir_init(const char *path)
{
@@ -417,13 +425,12 @@ eal_plugindir_init(const char *path)
}
while ((dent = readdir(d)) != NULL) {
+ size_t nlen = strnlen(dent->d_name, sizeof(dent->d_name));
struct stat sb;
- int nlen = strnlen(dent->d_name, sizeof(dent->d_name));
/* check if name ends in .so or .so.ABI_VERSION */
- if (strcmp(&dent->d_name[nlen - 3], ".so") != 0 &&
- strcmp(&dent->d_name[nlen - 4 - strlen(ABI_VERSION)],
- ".so."ABI_VERSION) != 0)
+ if (!ends_with(dent->d_name, nlen, ".so") &&
+ !ends_with(dent->d_name, nlen, ".so."ABI_VERSION))
continue;
snprintf(sopath, sizeof(sopath), "%s/%s", path, dent->d_name);
--
2.49.0
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH 05/10] cmdline: fix port list parsing
[not found] <20250619071037.37325-1-david.marchand@redhat.com>
2025-06-19 7:10 ` [PATCH 02/10] test/telemetry: fix test calling all commands David Marchand
2025-06-19 7:10 ` [PATCH 04/10] eal: fix plugin dir walk David Marchand
@ 2025-06-19 7:10 ` David Marchand
2025-06-20 9:58 ` Bruce Richardson
2025-06-19 7:10 ` [PATCH 06/10] cmdline: fix highest bit " David Marchand
` (4 subsequent siblings)
7 siblings, 1 reply; 26+ messages in thread
From: David Marchand @ 2025-06-19 7:10 UTC (permalink / raw)
To: dev; +Cc: stable
Doing arithmetics with the NULL pointer is undefined.
Caught by UBSan:
../lib/cmdline/cmdline_parse_portlist.c:40:19: runtime error:
applying non-zero offset 1 to null pointer
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
../lib/cmdline/cmdline_parse_portlist.c:40:19 in
Fixes: af75078fece3 ("first public release")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
lib/cmdline/cmdline_parse_portlist.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/lib/cmdline/cmdline_parse_portlist.c b/lib/cmdline/cmdline_parse_portlist.c
index ef6ce223b5..0c07cc02b5 100644
--- a/lib/cmdline/cmdline_parse_portlist.c
+++ b/lib/cmdline/cmdline_parse_portlist.c
@@ -4,6 +4,7 @@
* All rights reserved.
*/
+#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -37,10 +38,11 @@ parse_ports(cmdline_portlist_t *pl, const char *str)
const char *first, *last;
char *end;
- for (first = str, last = first;
- first != NULL && last != NULL;
- first = last + 1) {
+ if (str == NULL)
+ return 0;
+ last = first = str;
+ do {
last = strchr(first, ',');
errno = 0;
@@ -65,7 +67,10 @@ parse_ports(cmdline_portlist_t *pl, const char *str)
return -1;
parse_set_list(pl, ps, pe);
- }
+ if (last == NULL)
+ break;
+ first = last + 1;
+ } while (true);
return 0;
}
--
2.49.0
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH 06/10] cmdline: fix highest bit port list parsing
[not found] <20250619071037.37325-1-david.marchand@redhat.com>
` (2 preceding siblings ...)
2025-06-19 7:10 ` [PATCH 05/10] cmdline: fix port list parsing David Marchand
@ 2025-06-19 7:10 ` David Marchand
2025-06-20 9:21 ` Bruce Richardson
2025-06-19 7:10 ` [PATCH 07/10] tailq: fix cast macro for null pointer David Marchand
` (3 subsequent siblings)
7 siblings, 1 reply; 26+ messages in thread
From: David Marchand @ 2025-06-19 7:10 UTC (permalink / raw)
To: dev; +Cc: stable
pl->map is a uint32_t.
Caught by UBSan:
../lib/cmdline/cmdline_parse_portlist.c:27:17: runtime error:
left shift of 1 by 31 places cannot be represented in type 'int'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
../lib/cmdline/cmdline_parse_portlist.c:27:17 in
Fixes: af75078fece3 ("first public release")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
lib/cmdline/cmdline_parse_portlist.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/lib/cmdline/cmdline_parse_portlist.c b/lib/cmdline/cmdline_parse_portlist.c
index 0c07cc02b5..3ef427d32a 100644
--- a/lib/cmdline/cmdline_parse_portlist.c
+++ b/lib/cmdline/cmdline_parse_portlist.c
@@ -11,7 +11,9 @@
#include <errno.h>
#include <eal_export.h>
+#include <rte_bitops.h>
#include <rte_string_fns.h>
+
#include "cmdline_parse.h"
#include "cmdline_parse_portlist.h"
@@ -27,7 +29,7 @@ static void
parse_set_list(cmdline_portlist_t *pl, size_t low, size_t high)
{
do {
- pl->map |= (1 << low++);
+ pl->map |= RTE_BIT32(low++);
} while (low <= high);
}
--
2.49.0
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH 07/10] tailq: fix cast macro for null pointer
[not found] <20250619071037.37325-1-david.marchand@redhat.com>
` (3 preceding siblings ...)
2025-06-19 7:10 ` [PATCH 06/10] cmdline: fix highest bit " David Marchand
@ 2025-06-19 7:10 ` David Marchand
2025-06-20 9:23 ` Bruce Richardson
2025-06-19 7:10 ` [PATCH 08/10] hash: fix unaligned access in predictable RSS David Marchand
` (2 subsequent siblings)
7 siblings, 1 reply; 26+ messages in thread
From: David Marchand @ 2025-06-19 7:10 UTC (permalink / raw)
To: dev; +Cc: stable, Tyler Retzlaff, Neil Horman
Doing arithmetics with the NULL pointer is undefined.
Caught by UBSan:
../app/test/test_tailq.c:111:9: runtime error:
member access within null pointer of type 'struct rte_tailq_head'
Fixes: f6b4f6c9c123 ("tailq: use a single cast macro")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
lib/eal/include/rte_tailq.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/eal/include/rte_tailq.h b/lib/eal/include/rte_tailq.h
index 89f7ef2134..c23df77d96 100644
--- a/lib/eal/include/rte_tailq.h
+++ b/lib/eal/include/rte_tailq.h
@@ -54,7 +54,7 @@ struct rte_tailq_elem {
* Return the first tailq entry cast to the right struct.
*/
#define RTE_TAILQ_CAST(tailq_entry, struct_name) \
- (struct struct_name *)&(tailq_entry)->tailq_head
+ (tailq_entry == NULL ? NULL : (struct struct_name *)&(tailq_entry)->tailq_head)
/**
* Utility macro to make looking up a tailqueue for a particular struct easier.
--
2.49.0
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH 08/10] hash: fix unaligned access in predictable RSS
[not found] <20250619071037.37325-1-david.marchand@redhat.com>
` (4 preceding siblings ...)
2025-06-19 7:10 ` [PATCH 07/10] tailq: fix cast macro for null pointer David Marchand
@ 2025-06-19 7:10 ` David Marchand
2025-06-19 7:10 ` [PATCH 09/10] stack: fix unaligned accesses on 128-bit David Marchand
[not found] ` <20250623135242.461965-1-david.marchand@redhat.com>
7 siblings, 0 replies; 26+ messages in thread
From: David Marchand @ 2025-06-19 7:10 UTC (permalink / raw)
To: dev
Cc: stable, Yipeng Wang, Sameh Gobriel, Bruce Richardson,
Vladimir Medvedkin, Konstantin Ananyev, John McNamara
Caught by UBSan:
../lib/hash/rte_thash.c:421:8: runtime error: load of misaligned address
0x0001816c2da3 for type 'uint32_t' (aka 'unsigned int'),
which requires 4 byte alignment
Fixes: 28ebff11c2dc ("hash: add predictable RSS")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
lib/hash/rte_thash.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/hash/rte_thash.c b/lib/hash/rte_thash.c
index 6c662bf14f..6d4dbea6d7 100644
--- a/lib/hash/rte_thash.c
+++ b/lib/hash/rte_thash.c
@@ -415,10 +415,10 @@ generate_subkey(struct rte_thash_ctx *ctx, struct thash_lfsr *lfsr,
static inline uint32_t
get_subvalue(struct rte_thash_ctx *ctx, uint32_t offset)
{
- uint32_t *tmp, val;
+ uint32_t tmp, val;
- tmp = (uint32_t *)(&ctx->hash_key[offset >> 3]);
- val = rte_be_to_cpu_32(*tmp);
+ memcpy(&tmp, &ctx->hash_key[offset >> 3], sizeof(tmp));
+ val = rte_be_to_cpu_32(tmp);
val >>= (TOEPLITZ_HASH_LEN - ((offset & (CHAR_BIT - 1)) +
ctx->reta_sz_log));
--
2.49.0
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH 09/10] stack: fix unaligned accesses on 128-bit
[not found] <20250619071037.37325-1-david.marchand@redhat.com>
` (5 preceding siblings ...)
2025-06-19 7:10 ` [PATCH 08/10] hash: fix unaligned access in predictable RSS David Marchand
@ 2025-06-19 7:10 ` David Marchand
[not found] ` <20250623135242.461965-1-david.marchand@redhat.com>
7 siblings, 0 replies; 26+ messages in thread
From: David Marchand @ 2025-06-19 7:10 UTC (permalink / raw)
To: dev; +Cc: stable, Honnappa Nagarahalli, Gage Eads, Olivier Matz
Caught by UBSan:
../lib/eal/x86/include/rte_atomic_64.h:206:21: runtime error:
member access within misaligned address 0x7ffd9c67f228 for
type 'const rte_int128_t', which requires 16 byte alignment
0x7ffd9c67f228: note: pointer points here
00 00 00 00 c0 5d 3e 00 01 00 00 00 01 00 00 00 00 00 00 00
^
00 00 00 00 00 00 00 00 00 00 00 00
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
../lib/eal/x86/include/rte_atomic_64.h:206:21 in
../lib/eal/x86/include/rte_atomic_64.h:206:21: runtime error:
member access within misaligned address 0x7ffd9c67f228 for type
'const union rte_int128_t::(anonymous at
../lib/eal/include/generic/rte_atomic.h:1102:2)', which requires
16 byte alignment
0x7ffd9c67f228: note: pointer points here
00 00 00 00 c0 5d 3e 00 01 00 00 00 01 00 00 00 00 00 00 00
^
00 00 00 00 00 00 00 00 00 00 00 00
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
../lib/eal/x86/include/rte_atomic_64.h:206:21 in
../lib/eal/x86/include/rte_atomic_64.h:206:16: runtime error:
load of misaligned address 0x7ffd9c67f228 for type
'const uint64_t' (aka 'const unsigned long'), which requires
16 byte alignment
0x7ffd9c67f228: note: pointer points here
00 00 00 00 c0 5d 3e 00 01 00 00 00 01 00 00 00 00 00 00 00
^
00 00 00 00 00 00 00 00 00 00 00 00
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
../lib/eal/x86/include/rte_atomic_64.h:206:21 in
Fixes: 3340202f5954 ("stack: add lock-free implementation")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
lib/stack/rte_stack_lf_c11.h | 8 ++++----
lib/stack/rte_stack_lf_generic.h | 8 ++++----
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/lib/stack/rte_stack_lf_c11.h b/lib/stack/rte_stack_lf_c11.h
index b97e02d6a1..f674731235 100644
--- a/lib/stack/rte_stack_lf_c11.h
+++ b/lib/stack/rte_stack_lf_c11.h
@@ -63,13 +63,13 @@ __rte_stack_lf_push_elems(struct rte_stack_lf_list *list,
struct rte_stack_lf_elem *last,
unsigned int num)
{
- struct rte_stack_lf_head old_head;
+ alignas(16) struct rte_stack_lf_head old_head;
int success;
old_head = list->head;
do {
- struct rte_stack_lf_head new_head;
+ alignas(16) struct rte_stack_lf_head new_head;
/* Swing the top pointer to the first element in the list and
* make the last element point to the old top.
@@ -102,7 +102,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *list,
void **obj_table,
struct rte_stack_lf_elem **last)
{
- struct rte_stack_lf_head old_head;
+ alignas(16) struct rte_stack_lf_head old_head;
uint64_t len;
int success = 0;
@@ -129,7 +129,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *list,
/* Pop num elements */
do {
- struct rte_stack_lf_head new_head;
+ alignas(16) struct rte_stack_lf_head new_head;
struct rte_stack_lf_elem *tmp;
unsigned int i;
diff --git a/lib/stack/rte_stack_lf_generic.h b/lib/stack/rte_stack_lf_generic.h
index cc69e4d168..32f56dffdd 100644
--- a/lib/stack/rte_stack_lf_generic.h
+++ b/lib/stack/rte_stack_lf_generic.h
@@ -36,13 +36,13 @@ __rte_stack_lf_push_elems(struct rte_stack_lf_list *list,
struct rte_stack_lf_elem *last,
unsigned int num)
{
- struct rte_stack_lf_head old_head;
+ alignas(16) struct rte_stack_lf_head old_head;
int success;
old_head = list->head;
do {
- struct rte_stack_lf_head new_head;
+ alignas(16) struct rte_stack_lf_head new_head;
/* An acquire fence (or stronger) is needed for weak memory
* models to establish a synchronized-with relationship between
@@ -77,7 +77,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *list,
void **obj_table,
struct rte_stack_lf_elem **last)
{
- struct rte_stack_lf_head old_head;
+ alignas(16) struct rte_stack_lf_head old_head;
int success = 0;
/* Reserve num elements, if available */
@@ -99,7 +99,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *list,
/* Pop num elements */
do {
- struct rte_stack_lf_head new_head;
+ alignas(16) struct rte_stack_lf_head new_head;
struct rte_stack_lf_elem *tmp;
unsigned int i;
--
2.49.0
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 02/10] test/telemetry: fix test calling all commands
2025-06-19 7:10 ` [PATCH 02/10] test/telemetry: fix test calling all commands David Marchand
@ 2025-06-20 9:16 ` Bruce Richardson
2025-06-23 9:54 ` David Marchand
1 sibling, 0 replies; 26+ messages in thread
From: Bruce Richardson @ 2025-06-20 9:16 UTC (permalink / raw)
To: David Marchand; +Cc: dev, stable
On Thu, Jun 19, 2025 at 09:10:28AM +0200, David Marchand wrote:
> This test was doing nothing as it could not find the telemetry client
> script following the test suite rework.
>
> Caught while looking at UNH unit test logs:
>
> /root/workspace/Generic-Unit-Test-DPDK/dpdk/app/test/suites/test_telemetry.sh:
> 18: /root/workspace/Generic-Unit-Test-DPDK/dpdk/app/usertools/dpdk-telemetry.py:
> not found
>
> Fixes: 9da71dc4f96e ("test: add test case for scripted telemetry commands")
> Cc: stable@dpdk.org
>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> ---
> app/test/suites/test_telemetry.sh | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/app/test/suites/test_telemetry.sh b/app/test/suites/test_telemetry.sh
> index ca6abe266e..20806b43e4 100755
> --- a/app/test/suites/test_telemetry.sh
> +++ b/app/test/suites/test_telemetry.sh
> @@ -7,7 +7,7 @@ which jq || {
> exit 77
> }
>
> -rootdir=$(readlink -f $(dirname $(readlink -f $0))/../..)
> +rootdir=$(readlink -f $(dirname $(readlink -f $0))/../../..)
> tmpoutput=$(mktemp -t dpdk.test_telemetry.XXXXXX)
> trap "cat $tmpoutput; rm -f $tmpoutput" EXIT
>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 04/10] eal: fix plugin dir walk
2025-06-19 7:10 ` [PATCH 04/10] eal: fix plugin dir walk David Marchand
@ 2025-06-20 9:19 ` Bruce Richardson
2025-06-23 9:41 ` David Marchand
0 siblings, 1 reply; 26+ messages in thread
From: Bruce Richardson @ 2025-06-20 9:19 UTC (permalink / raw)
To: David Marchand
Cc: dev, stable, Tyler Retzlaff, Maxime Coquelin, Timothy Redaelli
On Thu, Jun 19, 2025 at 09:10:30AM +0200, David Marchand wrote:
> For '.' and '..' directories (or any short file name),
> a out of bound issue occurs.
>
> Caught by UBSan:
>
> EAL: Detected shared linkage of DPDK
> ../lib/eal/common/eal_common_options.c:420:15: runtime error: index -2
> out of bounds for type 'char[256]'
> #0 0x7f867eedf206 in eal_plugindir_init
> eal_common_options.c
> #1 0x7f867eede58a in eal_plugins_init
> (build/lib/librte_eal.so.25+0xde58a)
> (BuildId: e7e4a1935e4bacb51c82ab1a84098a27decf3b4c)
> #2 0x7f867efb8587 in rte_eal_init
> (build/lib/librte_eal.so.25+0x1b8587)
> (BuildId: e7e4a1935e4bacb51c82ab1a84098a27decf3b4c)
> #3 0x55b62360861e in main
> (/home/runner/work/dpdk/dpdk/build/app/dpdk-testpmd+0x9e061e)
> (BuildId: d821ec918612c83fad8b5ccb6cc518e66bee48cd)
> #4 0x7f8667429d8f in __libc_start_call_main
> csu/../sysdeps/nptl/libc_start_call_main.h:58:16
> #5 0x7f8667429e3f in __libc_start_main
> csu/../csu/libc-start.c:392:3
> #6 0x55b622d9d444 in _start
> (/home/runner/work/dpdk/dpdk/build/app/dpdk-testpmd+0x175444)
> (BuildId: d821ec918612c83fad8b5ccb6cc518e66bee48cd)
> SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
> ../lib/eal/common/eal_common_options.c:420:15 in
> ../lib/eal/common/eal_common_options.c:421:15:
> runtime error: index 18446744073709551609 out of bounds
> for type 'char[256]'
>
> Fixes: c57f6e5c604a ("eal: fix plugin loading")
> Cc: stable@dpdk.org
>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> ---
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
One thought inline below...
> lib/eal/common/eal_common_options.c | 15 +++++++++++----
> 1 file changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c
> index 83b6fc7e89..153f807e4f 100644
> --- a/lib/eal/common/eal_common_options.c
> +++ b/lib/eal/common/eal_common_options.c
> @@ -399,6 +399,14 @@ eal_plugins_init(void)
> }
> #else
>
> +static bool
> +ends_with(const char *str, size_t str_len, const char *tail)
> +{
> + size_t tail_len = strlen(tail);
> +
> + return str_len >= tail_len && strncmp(&str[str_len - tail_len], tail, tail_len) == 0;
> +}
> +
I wonder if that function is worth renaming to "rte_str_ends_with" and
putting in rte_string_fns.h?
> static int
> eal_plugindir_init(const char *path)
> {
> @@ -417,13 +425,12 @@ eal_plugindir_init(const char *path)
> }
>
> while ((dent = readdir(d)) != NULL) {
> + size_t nlen = strnlen(dent->d_name, sizeof(dent->d_name));
> struct stat sb;
> - int nlen = strnlen(dent->d_name, sizeof(dent->d_name));
>
> /* check if name ends in .so or .so.ABI_VERSION */
> - if (strcmp(&dent->d_name[nlen - 3], ".so") != 0 &&
> - strcmp(&dent->d_name[nlen - 4 - strlen(ABI_VERSION)],
> - ".so."ABI_VERSION) != 0)
> + if (!ends_with(dent->d_name, nlen, ".so") &&
> + !ends_with(dent->d_name, nlen, ".so."ABI_VERSION))
> continue;
>
> snprintf(sopath, sizeof(sopath), "%s/%s", path, dent->d_name);
> --
> 2.49.0
>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 06/10] cmdline: fix highest bit port list parsing
2025-06-19 7:10 ` [PATCH 06/10] cmdline: fix highest bit " David Marchand
@ 2025-06-20 9:21 ` Bruce Richardson
2025-06-23 9:32 ` David Marchand
0 siblings, 1 reply; 26+ messages in thread
From: Bruce Richardson @ 2025-06-20 9:21 UTC (permalink / raw)
To: David Marchand; +Cc: dev, stable
On Thu, Jun 19, 2025 at 09:10:32AM +0200, David Marchand wrote:
> pl->map is a uint32_t.
>
> Caught by UBSan:
>
> ../lib/cmdline/cmdline_parse_portlist.c:27:17: runtime error:
> left shift of 1 by 31 places cannot be represented in type 'int'
> SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
> ../lib/cmdline/cmdline_parse_portlist.c:27:17 in
>
> Fixes: af75078fece3 ("first public release")
> Cc: stable@dpdk.org
>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> ---
> lib/cmdline/cmdline_parse_portlist.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/lib/cmdline/cmdline_parse_portlist.c b/lib/cmdline/cmdline_parse_portlist.c
> index 0c07cc02b5..3ef427d32a 100644
> --- a/lib/cmdline/cmdline_parse_portlist.c
> +++ b/lib/cmdline/cmdline_parse_portlist.c
> @@ -11,7 +11,9 @@
> #include <errno.h>
>
> #include <eal_export.h>
> +#include <rte_bitops.h>
> #include <rte_string_fns.h>
> +
> #include "cmdline_parse.h"
> #include "cmdline_parse_portlist.h"
>
> @@ -27,7 +29,7 @@ static void
> parse_set_list(cmdline_portlist_t *pl, size_t low, size_t high)
> {
> do {
> - pl->map |= (1 << low++);
> + pl->map |= RTE_BIT32(low++);
> } while (low <= high);
> }
>
While this is correct, the use of "++" in a call to a macro sets off some
alarm bells for me!
Can we put the "++" in the while instead, as "++low"?
/Bruce
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 07/10] tailq: fix cast macro for null pointer
2025-06-19 7:10 ` [PATCH 07/10] tailq: fix cast macro for null pointer David Marchand
@ 2025-06-20 9:23 ` Bruce Richardson
0 siblings, 0 replies; 26+ messages in thread
From: Bruce Richardson @ 2025-06-20 9:23 UTC (permalink / raw)
To: David Marchand; +Cc: dev, stable, Tyler Retzlaff, Neil Horman
On Thu, Jun 19, 2025 at 09:10:33AM +0200, David Marchand wrote:
> Doing arithmetics with the NULL pointer is undefined.
>
> Caught by UBSan:
>
> ../app/test/test_tailq.c:111:9: runtime error:
> member access within null pointer of type 'struct rte_tailq_head'
>
> Fixes: f6b4f6c9c123 ("tailq: use a single cast macro")
> Cc: stable@dpdk.org
>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 05/10] cmdline: fix port list parsing
2025-06-19 7:10 ` [PATCH 05/10] cmdline: fix port list parsing David Marchand
@ 2025-06-20 9:58 ` Bruce Richardson
2025-06-23 9:40 ` David Marchand
0 siblings, 1 reply; 26+ messages in thread
From: Bruce Richardson @ 2025-06-20 9:58 UTC (permalink / raw)
To: David Marchand; +Cc: dev, stable
On Thu, Jun 19, 2025 at 09:10:31AM +0200, David Marchand wrote:
> Doing arithmetics with the NULL pointer is undefined.
>
> Caught by UBSan:
>
> ../lib/cmdline/cmdline_parse_portlist.c:40:19: runtime error:
> applying non-zero offset 1 to null pointer
> SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
> ../lib/cmdline/cmdline_parse_portlist.c:40:19 in
>
> Fixes: af75078fece3 ("first public release")
> Cc: stable@dpdk.org
>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> ---
> lib/cmdline/cmdline_parse_portlist.c | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/lib/cmdline/cmdline_parse_portlist.c b/lib/cmdline/cmdline_parse_portlist.c
> index ef6ce223b5..0c07cc02b5 100644
> --- a/lib/cmdline/cmdline_parse_portlist.c
> +++ b/lib/cmdline/cmdline_parse_portlist.c
> @@ -4,6 +4,7 @@
> * All rights reserved.
> */
>
> +#include <stdbool.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> @@ -37,10 +38,11 @@ parse_ports(cmdline_portlist_t *pl, const char *str)
> const char *first, *last;
> char *end;
>
> - for (first = str, last = first;
> - first != NULL && last != NULL;
> - first = last + 1) {
Maybe I'm a little slow this morning, but I can't see how this is actually
a problem. By my understanding, the check for "first != NULL && last !=
NULL" happens before any increment of "first = last + 1", meaning we are
guaranteed that the last is never null when we increment it.
/Bruce
> + if (str == NULL)
> + return 0;
>
> + last = first = str;
> + do {
> last = strchr(first, ',');
>
> errno = 0;
> @@ -65,7 +67,10 @@ parse_ports(cmdline_portlist_t *pl, const char *str)
> return -1;
>
> parse_set_list(pl, ps, pe);
> - }
> + if (last == NULL)
> + break;
> + first = last + 1;
> + } while (true);
>
> return 0;
> }
> --
> 2.49.0
>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 06/10] cmdline: fix highest bit port list parsing
2025-06-20 9:21 ` Bruce Richardson
@ 2025-06-23 9:32 ` David Marchand
0 siblings, 0 replies; 26+ messages in thread
From: David Marchand @ 2025-06-23 9:32 UTC (permalink / raw)
To: Bruce Richardson; +Cc: dev, stable
On Fri, Jun 20, 2025 at 11:22 AM Bruce Richardson
<bruce.richardson@intel.com> wrote:
>
> On Thu, Jun 19, 2025 at 09:10:32AM +0200, David Marchand wrote:
> > pl->map is a uint32_t.
> >
> > Caught by UBSan:
> >
> > ../lib/cmdline/cmdline_parse_portlist.c:27:17: runtime error:
> > left shift of 1 by 31 places cannot be represented in type 'int'
> > SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
> > ../lib/cmdline/cmdline_parse_portlist.c:27:17 in
> >
> > Fixes: af75078fece3 ("first public release")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: David Marchand <david.marchand@redhat.com>
> > ---
> > lib/cmdline/cmdline_parse_portlist.c | 4 +++-
> > 1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/lib/cmdline/cmdline_parse_portlist.c b/lib/cmdline/cmdline_parse_portlist.c
> > index 0c07cc02b5..3ef427d32a 100644
> > --- a/lib/cmdline/cmdline_parse_portlist.c
> > +++ b/lib/cmdline/cmdline_parse_portlist.c
> > @@ -11,7 +11,9 @@
> > #include <errno.h>
> >
> > #include <eal_export.h>
> > +#include <rte_bitops.h>
> > #include <rte_string_fns.h>
> > +
> > #include "cmdline_parse.h"
> > #include "cmdline_parse_portlist.h"
> >
> > @@ -27,7 +29,7 @@ static void
> > parse_set_list(cmdline_portlist_t *pl, size_t low, size_t high)
> > {
> > do {
> > - pl->map |= (1 << low++);
> > + pl->map |= RTE_BIT32(low++);
> > } while (low <= high);
> > }
> >
> While this is correct, the use of "++" in a call to a macro sets off some
> alarm bells for me!
> Can we put the "++" in the while instead, as "++low"?
It would be safer yes.
--
David Marchand
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 05/10] cmdline: fix port list parsing
2025-06-20 9:58 ` Bruce Richardson
@ 2025-06-23 9:40 ` David Marchand
2025-06-23 10:41 ` Bruce Richardson
0 siblings, 1 reply; 26+ messages in thread
From: David Marchand @ 2025-06-23 9:40 UTC (permalink / raw)
To: Bruce Richardson; +Cc: dev, stable
On Fri, Jun 20, 2025 at 11:59 AM Bruce Richardson
<bruce.richardson@intel.com> wrote:
>
> On Thu, Jun 19, 2025 at 09:10:31AM +0200, David Marchand wrote:
> > Doing arithmetics with the NULL pointer is undefined.
> >
> > Caught by UBSan:
> >
> > ../lib/cmdline/cmdline_parse_portlist.c:40:19: runtime error:
> > applying non-zero offset 1 to null pointer
> > SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
> > ../lib/cmdline/cmdline_parse_portlist.c:40:19 in
> >
> > Fixes: af75078fece3 ("first public release")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: David Marchand <david.marchand@redhat.com>
> > ---
> > lib/cmdline/cmdline_parse_portlist.c | 13 +++++++++----
> > 1 file changed, 9 insertions(+), 4 deletions(-)
> >
> > diff --git a/lib/cmdline/cmdline_parse_portlist.c b/lib/cmdline/cmdline_parse_portlist.c
> > index ef6ce223b5..0c07cc02b5 100644
> > --- a/lib/cmdline/cmdline_parse_portlist.c
> > +++ b/lib/cmdline/cmdline_parse_portlist.c
> > @@ -4,6 +4,7 @@
> > * All rights reserved.
> > */
> >
> > +#include <stdbool.h>
> > #include <stdio.h>
> > #include <stdlib.h>
> > #include <string.h>
> > @@ -37,10 +38,11 @@ parse_ports(cmdline_portlist_t *pl, const char *str)
> > const char *first, *last;
> > char *end;
> >
> > - for (first = str, last = first;
> > - first != NULL && last != NULL;
> > - first = last + 1) {
>
> Maybe I'm a little slow this morning, but I can't see how this is actually
> a problem. By my understanding, the check for "first != NULL && last !=
> NULL" happens before any increment of "first = last + 1", meaning we are
> guaranteed that the last is never null when we increment it.
Well, not sure I follow, but the problem is not at the first
iteration, if this is what you mean.
On the last iteration of the parsing, there is no , left in the string
that is parsed so last = strchr(first, ',') makes last == NULL.
Then the first variable is set to last + 1 *before* evaluating the end
condition.
I removed this patch of the series, rerun the test and I see:
9/75 DPDK:fast-tests / cmdline_autotest OK 0.22s
09:20:08 DPDK_TEST=cmdline_autotest MALLOC_PERTURB_=169
/home/runner/work/dpdk/dpdk/build/app/dpdk-test --no-huge -m 2048 -d
/home/runner/work/dpdk/dpdk/build/drivers
----------------------------------- output -----------------------------------
stdout:
RTE>>cmdline_autotest
Testind parsing ethernet addresses...
Testind parsing port lists...
Testind parsing numbers...
Testing parsing IP addresses...
Testing parsing strings...
Testing circular buffer...
Testing library functions...
Test OK
RTE>>
stderr:
EAL: Detected CPU lcores: 4
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
APP: HPET is not enabled, using TSC as default timer
../lib/cmdline/cmdline_parse_portlist.c:44:19: runtime error: applying
non-zero offset 1 to null pointer
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
../lib/cmdline/cmdline_parse_portlist.c:44:19 in
------------------------------------------------------------------------------
--
David Marchand
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 04/10] eal: fix plugin dir walk
2025-06-20 9:19 ` Bruce Richardson
@ 2025-06-23 9:41 ` David Marchand
0 siblings, 0 replies; 26+ messages in thread
From: David Marchand @ 2025-06-23 9:41 UTC (permalink / raw)
To: Bruce Richardson
Cc: dev, stable, Tyler Retzlaff, Maxime Coquelin, Timothy Redaelli
On Fri, Jun 20, 2025 at 11:19 AM Bruce Richardson
<bruce.richardson@intel.com> wrote:
>
> On Thu, Jun 19, 2025 at 09:10:30AM +0200, David Marchand wrote:
> > For '.' and '..' directories (or any short file name),
> > a out of bound issue occurs.
> >
> > Caught by UBSan:
> >
> > EAL: Detected shared linkage of DPDK
> > ../lib/eal/common/eal_common_options.c:420:15: runtime error: index -2
> > out of bounds for type 'char[256]'
> > #0 0x7f867eedf206 in eal_plugindir_init
> > eal_common_options.c
> > #1 0x7f867eede58a in eal_plugins_init
> > (build/lib/librte_eal.so.25+0xde58a)
> > (BuildId: e7e4a1935e4bacb51c82ab1a84098a27decf3b4c)
> > #2 0x7f867efb8587 in rte_eal_init
> > (build/lib/librte_eal.so.25+0x1b8587)
> > (BuildId: e7e4a1935e4bacb51c82ab1a84098a27decf3b4c)
> > #3 0x55b62360861e in main
> > (/home/runner/work/dpdk/dpdk/build/app/dpdk-testpmd+0x9e061e)
> > (BuildId: d821ec918612c83fad8b5ccb6cc518e66bee48cd)
> > #4 0x7f8667429d8f in __libc_start_call_main
> > csu/../sysdeps/nptl/libc_start_call_main.h:58:16
> > #5 0x7f8667429e3f in __libc_start_main
> > csu/../csu/libc-start.c:392:3
> > #6 0x55b622d9d444 in _start
> > (/home/runner/work/dpdk/dpdk/build/app/dpdk-testpmd+0x175444)
> > (BuildId: d821ec918612c83fad8b5ccb6cc518e66bee48cd)
> > SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
> > ../lib/eal/common/eal_common_options.c:420:15 in
> > ../lib/eal/common/eal_common_options.c:421:15:
> > runtime error: index 18446744073709551609 out of bounds
> > for type 'char[256]'
> >
> > Fixes: c57f6e5c604a ("eal: fix plugin loading")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: David Marchand <david.marchand@redhat.com>
> > ---
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>
>
> One thought inline below...
>
> > lib/eal/common/eal_common_options.c | 15 +++++++++++----
> > 1 file changed, 11 insertions(+), 4 deletions(-)
> >
> > diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c
> > index 83b6fc7e89..153f807e4f 100644
> > --- a/lib/eal/common/eal_common_options.c
> > +++ b/lib/eal/common/eal_common_options.c
> > @@ -399,6 +399,14 @@ eal_plugins_init(void)
> > }
> > #else
> >
> > +static bool
> > +ends_with(const char *str, size_t str_len, const char *tail)
> > +{
> > + size_t tail_len = strlen(tail);
> > +
> > + return str_len >= tail_len && strncmp(&str[str_len - tail_len], tail, tail_len) == 0;
> > +}
> > +
>
> I wonder if that function is worth renaming to "rte_str_ends_with" and
> putting in rte_string_fns.h?
I'll have a look and see if we have potential users in the tree.
--
David Marchand
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 02/10] test/telemetry: fix test calling all commands
2025-06-19 7:10 ` [PATCH 02/10] test/telemetry: fix test calling all commands David Marchand
2025-06-20 9:16 ` Bruce Richardson
@ 2025-06-23 9:54 ` David Marchand
1 sibling, 0 replies; 26+ messages in thread
From: David Marchand @ 2025-06-23 9:54 UTC (permalink / raw)
To: Shai Brandes; +Cc: dev, stable, Bruce Richardson
Hello Shai,
On Thu, Jun 19, 2025 at 9:11 AM David Marchand
<david.marchand@redhat.com> wrote:
>
> This test was doing nothing as it could not find the telemetry client
> script following the test suite rework.
>
> Caught while looking at UNH unit test logs:
>
> /root/workspace/Generic-Unit-Test-DPDK/dpdk/app/test/suites/test_telemetry.sh:
> 18: /root/workspace/Generic-Unit-Test-DPDK/dpdk/app/usertools/dpdk-telemetry.py:
> not found
>
> Fixes: 9da71dc4f96e ("test: add test case for scripted telemetry commands")
> Cc: stable@dpdk.org
>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
This fix is flagged as a failure because telemetry_all hits a 10s
timeout in AWS CI.
https://mails.dpdk.org/archives/test-report/2025-June/887693.html
Please use a 30s timeout (like other CI do for fast-tests), iow pass a
'-t 3' to the meson test command.
Thanks.
--
David Marchand
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 05/10] cmdline: fix port list parsing
2025-06-23 9:40 ` David Marchand
@ 2025-06-23 10:41 ` Bruce Richardson
0 siblings, 0 replies; 26+ messages in thread
From: Bruce Richardson @ 2025-06-23 10:41 UTC (permalink / raw)
To: David Marchand; +Cc: dev, stable
On Mon, Jun 23, 2025 at 11:40:15AM +0200, David Marchand wrote:
> On Fri, Jun 20, 2025 at 11:59 AM Bruce Richardson
> <bruce.richardson@intel.com> wrote:
> >
> > On Thu, Jun 19, 2025 at 09:10:31AM +0200, David Marchand wrote:
> > > Doing arithmetics with the NULL pointer is undefined.
> > >
> > > Caught by UBSan:
> > >
> > > ../lib/cmdline/cmdline_parse_portlist.c:40:19: runtime error:
> > > applying non-zero offset 1 to null pointer
> > > SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
> > > ../lib/cmdline/cmdline_parse_portlist.c:40:19 in
> > >
> > > Fixes: af75078fece3 ("first public release")
> > > Cc: stable@dpdk.org
> > >
> > > Signed-off-by: David Marchand <david.marchand@redhat.com>
> > > ---
> > > lib/cmdline/cmdline_parse_portlist.c | 13 +++++++++----
> > > 1 file changed, 9 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/lib/cmdline/cmdline_parse_portlist.c b/lib/cmdline/cmdline_parse_portlist.c
> > > index ef6ce223b5..0c07cc02b5 100644
> > > --- a/lib/cmdline/cmdline_parse_portlist.c
> > > +++ b/lib/cmdline/cmdline_parse_portlist.c
> > > @@ -4,6 +4,7 @@
> > > * All rights reserved.
> > > */
> > >
> > > +#include <stdbool.h>
> > > #include <stdio.h>
> > > #include <stdlib.h>
> > > #include <string.h>
> > > @@ -37,10 +38,11 @@ parse_ports(cmdline_portlist_t *pl, const char *str)
> > > const char *first, *last;
> > > char *end;
> > >
> > > - for (first = str, last = first;
> > > - first != NULL && last != NULL;
> > > - first = last + 1) {
> >
> > Maybe I'm a little slow this morning, but I can't see how this is actually
> > a problem. By my understanding, the check for "first != NULL && last !=
> > NULL" happens before any increment of "first = last + 1", meaning we are
> > guaranteed that the last is never null when we increment it.
>
> Well, not sure I follow, but the problem is not at the first
> iteration, if this is what you mean.
>
> On the last iteration of the parsing, there is no , left in the string
> that is parsed so last = strchr(first, ',') makes last == NULL.
> Then the first variable is set to last + 1 *before* evaluating the end
> condition.
>
> I removed this patch of the series, rerun the test and I see:
>
> 9/75 DPDK:fast-tests / cmdline_autotest OK 0.22s
> 09:20:08 DPDK_TEST=cmdline_autotest MALLOC_PERTURB_=169
> /home/runner/work/dpdk/dpdk/build/app/dpdk-test --no-huge -m 2048 -d
> /home/runner/work/dpdk/dpdk/build/drivers
> ----------------------------------- output -----------------------------------
> stdout:
> RTE>>cmdline_autotest
> Testind parsing ethernet addresses...
> Testind parsing port lists...
> Testind parsing numbers...
> Testing parsing IP addresses...
> Testing parsing strings...
> Testing circular buffer...
> Testing library functions...
> Test OK
> RTE>>
> stderr:
> EAL: Detected CPU lcores: 4
> EAL: Detected NUMA nodes: 1
> EAL: Detected shared linkage of DPDK
> EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
> EAL: Selected IOVA mode 'VA'
> APP: HPET is not enabled, using TSC as default timer
> ../lib/cmdline/cmdline_parse_portlist.c:44:19: runtime error: applying
> non-zero offset 1 to null pointer
> SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
> ../lib/cmdline/cmdline_parse_portlist.c:44:19 in
> ------------------------------------------------------------------------------
>
>
Thanks for the explanation. I was indeed thinking the issue was on the
first iteration only.
With the change to fix this, we can actually make last a local var within
the loop itself. Also, by using a while rather than do-while we can remove
the initial check for str = NULL. Here's an alternate fix that is very
slightly shorter, and limits the scope of "last":
diff --git a/lib/cmdline/cmdline_parse_portlist.c b/lib/cmdline/cmdline_parse_portlist.c
index ebe2a961bb..c65f3b704e 100644
--- a/lib/cmdline/cmdline_parse_portlist.c
+++ b/lib/cmdline/cmdline_parse_portlist.c
@@ -34,14 +34,11 @@ static int
parse_ports(cmdline_portlist_t *pl, const char *str)
{
size_t ps, pe;
- const char *first, *last;
+ const char *first = str;
char *end;
- for (first = str, last = first;
- first != NULL && last != NULL;
- first = last + 1) {
-
- last = strchr(first, ',');
+ while (first != NULL) {
+ const char *last = strchr(first, ',');
errno = 0;
ps = strtoul(first, &end, 10);
@@ -65,6 +62,8 @@ parse_ports(cmdline_portlist_t *pl, const char *str)
return -1;
parse_set_list(pl, ps, pe);
+
+ first = (last == NULL ? NULL : last + 1);
}
return 0;
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v2 02/10] test/telemetry: fix test calling all commands
[not found] ` <20250623135242.461965-1-david.marchand@redhat.com>
@ 2025-06-23 13:52 ` David Marchand
2025-06-24 15:59 ` Marat Khalili
2025-06-23 13:52 ` [PATCH v2 04/10] eal: fix plugin dir walk David Marchand
` (5 subsequent siblings)
6 siblings, 1 reply; 26+ messages in thread
From: David Marchand @ 2025-06-23 13:52 UTC (permalink / raw)
To: dev; +Cc: stable, Bruce Richardson
This test was doing nothing as it could not find the telemetry client
script following the test suite rework.
Caught while looking at UNH unit test logs:
/root/workspace/Generic-Unit-Test-DPDK/dpdk/app/test/suites/test_telemetry.sh:
18: /root/workspace/Generic-Unit-Test-DPDK/dpdk/app/usertools/dpdk-telemetry.py:
not found
Fixes: 9da71dc4f96e ("test: add test case for scripted telemetry commands")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
app/test/suites/test_telemetry.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/test/suites/test_telemetry.sh b/app/test/suites/test_telemetry.sh
index ca6abe266e..20806b43e4 100755
--- a/app/test/suites/test_telemetry.sh
+++ b/app/test/suites/test_telemetry.sh
@@ -7,7 +7,7 @@ which jq || {
exit 77
}
-rootdir=$(readlink -f $(dirname $(readlink -f $0))/../..)
+rootdir=$(readlink -f $(dirname $(readlink -f $0))/../../..)
tmpoutput=$(mktemp -t dpdk.test_telemetry.XXXXXX)
trap "cat $tmpoutput; rm -f $tmpoutput" EXIT
--
2.49.0
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v2 04/10] eal: fix plugin dir walk
[not found] ` <20250623135242.461965-1-david.marchand@redhat.com>
2025-06-23 13:52 ` [PATCH v2 02/10] test/telemetry: fix test calling all commands David Marchand
@ 2025-06-23 13:52 ` David Marchand
2025-06-23 13:52 ` [PATCH v2 05/10] cmdline: fix port list parsing David Marchand
` (4 subsequent siblings)
6 siblings, 0 replies; 26+ messages in thread
From: David Marchand @ 2025-06-23 13:52 UTC (permalink / raw)
To: dev
Cc: stable, Bruce Richardson, Tyler Retzlaff, Timothy Redaelli,
Maxime Coquelin
For '.' and '..' directories (or any short file name),
a out of bound issue occurs.
Caught by UBSan:
EAL: Detected shared linkage of DPDK
../lib/eal/common/eal_common_options.c:420:15: runtime error: index -2
out of bounds for type 'char[256]'
#0 0x7f867eedf206 in eal_plugindir_init
eal_common_options.c
#1 0x7f867eede58a in eal_plugins_init
(build/lib/librte_eal.so.25+0xde58a)
(BuildId: e7e4a1935e4bacb51c82ab1a84098a27decf3b4c)
#2 0x7f867efb8587 in rte_eal_init
(build/lib/librte_eal.so.25+0x1b8587)
(BuildId: e7e4a1935e4bacb51c82ab1a84098a27decf3b4c)
#3 0x55b62360861e in main
(/home/runner/work/dpdk/dpdk/build/app/dpdk-testpmd+0x9e061e)
(BuildId: d821ec918612c83fad8b5ccb6cc518e66bee48cd)
#4 0x7f8667429d8f in __libc_start_call_main
csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#5 0x7f8667429e3f in __libc_start_main
csu/../csu/libc-start.c:392:3
#6 0x55b622d9d444 in _start
(/home/runner/work/dpdk/dpdk/build/app/dpdk-testpmd+0x175444)
(BuildId: d821ec918612c83fad8b5ccb6cc518e66bee48cd)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
../lib/eal/common/eal_common_options.c:420:15 in
../lib/eal/common/eal_common_options.c:421:15:
runtime error: index 18446744073709551609 out of bounds
for type 'char[256]'
Fixes: c57f6e5c604a ("eal: fix plugin loading")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
lib/eal/common/eal_common_options.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c
index 83b6fc7e89..153f807e4f 100644
--- a/lib/eal/common/eal_common_options.c
+++ b/lib/eal/common/eal_common_options.c
@@ -399,6 +399,14 @@ eal_plugins_init(void)
}
#else
+static bool
+ends_with(const char *str, size_t str_len, const char *tail)
+{
+ size_t tail_len = strlen(tail);
+
+ return str_len >= tail_len && strncmp(&str[str_len - tail_len], tail, tail_len) == 0;
+}
+
static int
eal_plugindir_init(const char *path)
{
@@ -417,13 +425,12 @@ eal_plugindir_init(const char *path)
}
while ((dent = readdir(d)) != NULL) {
+ size_t nlen = strnlen(dent->d_name, sizeof(dent->d_name));
struct stat sb;
- int nlen = strnlen(dent->d_name, sizeof(dent->d_name));
/* check if name ends in .so or .so.ABI_VERSION */
- if (strcmp(&dent->d_name[nlen - 3], ".so") != 0 &&
- strcmp(&dent->d_name[nlen - 4 - strlen(ABI_VERSION)],
- ".so."ABI_VERSION) != 0)
+ if (!ends_with(dent->d_name, nlen, ".so") &&
+ !ends_with(dent->d_name, nlen, ".so."ABI_VERSION))
continue;
snprintf(sopath, sizeof(sopath), "%s/%s", path, dent->d_name);
--
2.49.0
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v2 05/10] cmdline: fix port list parsing
[not found] ` <20250623135242.461965-1-david.marchand@redhat.com>
2025-06-23 13:52 ` [PATCH v2 02/10] test/telemetry: fix test calling all commands David Marchand
2025-06-23 13:52 ` [PATCH v2 04/10] eal: fix plugin dir walk David Marchand
@ 2025-06-23 13:52 ` David Marchand
2025-06-23 14:00 ` Bruce Richardson
2025-06-23 13:52 ` [PATCH v2 06/10] cmdline: fix highest bit " David Marchand
` (3 subsequent siblings)
6 siblings, 1 reply; 26+ messages in thread
From: David Marchand @ 2025-06-23 13:52 UTC (permalink / raw)
To: dev; +Cc: stable
Doing arithmetics with the NULL pointer is undefined.
Caught by UBSan:
../lib/cmdline/cmdline_parse_portlist.c:40:19: runtime error:
applying non-zero offset 1 to null pointer
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
../lib/cmdline/cmdline_parse_portlist.c:40:19 in
Fixes: af75078fece3 ("first public release")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
Changes since v1:
- moved some variable as suggested by Bruce,
---
lib/cmdline/cmdline_parse_portlist.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/lib/cmdline/cmdline_parse_portlist.c b/lib/cmdline/cmdline_parse_portlist.c
index ef6ce223b5..549f6d9671 100644
--- a/lib/cmdline/cmdline_parse_portlist.c
+++ b/lib/cmdline/cmdline_parse_portlist.c
@@ -33,15 +33,12 @@ parse_set_list(cmdline_portlist_t *pl, size_t low, size_t high)
static int
parse_ports(cmdline_portlist_t *pl, const char *str)
{
+ const char *first = str;
size_t ps, pe;
- const char *first, *last;
char *end;
- for (first = str, last = first;
- first != NULL && last != NULL;
- first = last + 1) {
-
- last = strchr(first, ',');
+ while (first != NULL) {
+ const char *last = strchr(first, ',');
errno = 0;
ps = strtoul(first, &end, 10);
@@ -65,6 +62,7 @@ parse_ports(cmdline_portlist_t *pl, const char *str)
return -1;
parse_set_list(pl, ps, pe);
+ first = (last == NULL ? NULL : last + 1);
}
return 0;
--
2.49.0
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v2 06/10] cmdline: fix highest bit port list parsing
[not found] ` <20250623135242.461965-1-david.marchand@redhat.com>
` (2 preceding siblings ...)
2025-06-23 13:52 ` [PATCH v2 05/10] cmdline: fix port list parsing David Marchand
@ 2025-06-23 13:52 ` David Marchand
2025-06-23 13:52 ` [PATCH v2 07/10] tailq: fix cast macro for null pointer David Marchand
` (2 subsequent siblings)
6 siblings, 0 replies; 26+ messages in thread
From: David Marchand @ 2025-06-23 13:52 UTC (permalink / raw)
To: dev; +Cc: stable, Bruce Richardson
pl->map is a uint32_t.
Caught by UBSan:
../lib/cmdline/cmdline_parse_portlist.c:27:17: runtime error:
left shift of 1 by 31 places cannot be represented in type 'int'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
../lib/cmdline/cmdline_parse_portlist.c:27:17 in
Fixes: af75078fece3 ("first public release")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
Changes since v1:
- moved variable increment out of the macro call,
---
lib/cmdline/cmdline_parse_portlist.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/lib/cmdline/cmdline_parse_portlist.c b/lib/cmdline/cmdline_parse_portlist.c
index 549f6d9671..3efe4143e3 100644
--- a/lib/cmdline/cmdline_parse_portlist.c
+++ b/lib/cmdline/cmdline_parse_portlist.c
@@ -10,7 +10,9 @@
#include <errno.h>
#include <eal_export.h>
+#include <rte_bitops.h>
#include <rte_string_fns.h>
+
#include "cmdline_parse.h"
#include "cmdline_parse_portlist.h"
@@ -26,7 +28,8 @@ static void
parse_set_list(cmdline_portlist_t *pl, size_t low, size_t high)
{
do {
- pl->map |= (1 << low++);
+ pl->map |= RTE_BIT32(low);
+ low++;
} while (low <= high);
}
--
2.49.0
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v2 07/10] tailq: fix cast macro for null pointer
[not found] ` <20250623135242.461965-1-david.marchand@redhat.com>
` (3 preceding siblings ...)
2025-06-23 13:52 ` [PATCH v2 06/10] cmdline: fix highest bit " David Marchand
@ 2025-06-23 13:52 ` David Marchand
2025-06-23 13:52 ` [PATCH v2 08/10] hash: fix unaligned access in predictable RSS David Marchand
2025-06-23 13:52 ` [PATCH v2 09/10] stack: fix unaligned accesses on 128-bit David Marchand
6 siblings, 0 replies; 26+ messages in thread
From: David Marchand @ 2025-06-23 13:52 UTC (permalink / raw)
To: dev; +Cc: stable, Bruce Richardson, Tyler Retzlaff, Neil Horman
Doing arithmetics with the NULL pointer is undefined.
Caught by UBSan:
../app/test/test_tailq.c:111:9: runtime error:
member access within null pointer of type 'struct rte_tailq_head'
Fixes: f6b4f6c9c123 ("tailq: use a single cast macro")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
lib/eal/include/rte_tailq.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/eal/include/rte_tailq.h b/lib/eal/include/rte_tailq.h
index 89f7ef2134..c23df77d96 100644
--- a/lib/eal/include/rte_tailq.h
+++ b/lib/eal/include/rte_tailq.h
@@ -54,7 +54,7 @@ struct rte_tailq_elem {
* Return the first tailq entry cast to the right struct.
*/
#define RTE_TAILQ_CAST(tailq_entry, struct_name) \
- (struct struct_name *)&(tailq_entry)->tailq_head
+ (tailq_entry == NULL ? NULL : (struct struct_name *)&(tailq_entry)->tailq_head)
/**
* Utility macro to make looking up a tailqueue for a particular struct easier.
--
2.49.0
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v2 08/10] hash: fix unaligned access in predictable RSS
[not found] ` <20250623135242.461965-1-david.marchand@redhat.com>
` (4 preceding siblings ...)
2025-06-23 13:52 ` [PATCH v2 07/10] tailq: fix cast macro for null pointer David Marchand
@ 2025-06-23 13:52 ` David Marchand
2025-06-23 13:52 ` [PATCH v2 09/10] stack: fix unaligned accesses on 128-bit David Marchand
6 siblings, 0 replies; 26+ messages in thread
From: David Marchand @ 2025-06-23 13:52 UTC (permalink / raw)
To: dev
Cc: stable, Yipeng Wang, Sameh Gobriel, Bruce Richardson,
Vladimir Medvedkin, John McNamara, Konstantin Ananyev
Caught by UBSan:
../lib/hash/rte_thash.c:421:8: runtime error: load of misaligned address
0x0001816c2da3 for type 'uint32_t' (aka 'unsigned int'),
which requires 4 byte alignment
Fixes: 28ebff11c2dc ("hash: add predictable RSS")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
lib/hash/rte_thash.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/hash/rte_thash.c b/lib/hash/rte_thash.c
index 6c662bf14f..6d4dbea6d7 100644
--- a/lib/hash/rte_thash.c
+++ b/lib/hash/rte_thash.c
@@ -415,10 +415,10 @@ generate_subkey(struct rte_thash_ctx *ctx, struct thash_lfsr *lfsr,
static inline uint32_t
get_subvalue(struct rte_thash_ctx *ctx, uint32_t offset)
{
- uint32_t *tmp, val;
+ uint32_t tmp, val;
- tmp = (uint32_t *)(&ctx->hash_key[offset >> 3]);
- val = rte_be_to_cpu_32(*tmp);
+ memcpy(&tmp, &ctx->hash_key[offset >> 3], sizeof(tmp));
+ val = rte_be_to_cpu_32(tmp);
val >>= (TOEPLITZ_HASH_LEN - ((offset & (CHAR_BIT - 1)) +
ctx->reta_sz_log));
--
2.49.0
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v2 09/10] stack: fix unaligned accesses on 128-bit
[not found] ` <20250623135242.461965-1-david.marchand@redhat.com>
` (5 preceding siblings ...)
2025-06-23 13:52 ` [PATCH v2 08/10] hash: fix unaligned access in predictable RSS David Marchand
@ 2025-06-23 13:52 ` David Marchand
6 siblings, 0 replies; 26+ messages in thread
From: David Marchand @ 2025-06-23 13:52 UTC (permalink / raw)
To: dev; +Cc: stable, Honnappa Nagarahalli, Olivier Matz, Gage Eads
Caught by UBSan:
../lib/eal/x86/include/rte_atomic_64.h:206:21: runtime error:
member access within misaligned address 0x7ffd9c67f228 for
type 'const rte_int128_t', which requires 16 byte alignment
0x7ffd9c67f228: note: pointer points here
00 00 00 00 c0 5d 3e 00 01 00 00 00 01 00 00 00 00 00 00 00
^
00 00 00 00 00 00 00 00 00 00 00 00
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
../lib/eal/x86/include/rte_atomic_64.h:206:21 in
../lib/eal/x86/include/rte_atomic_64.h:206:21: runtime error:
member access within misaligned address 0x7ffd9c67f228 for type
'const union rte_int128_t::(anonymous at
../lib/eal/include/generic/rte_atomic.h:1102:2)', which requires
16 byte alignment
0x7ffd9c67f228: note: pointer points here
00 00 00 00 c0 5d 3e 00 01 00 00 00 01 00 00 00 00 00 00 00
^
00 00 00 00 00 00 00 00 00 00 00 00
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
../lib/eal/x86/include/rte_atomic_64.h:206:21 in
../lib/eal/x86/include/rte_atomic_64.h:206:16: runtime error:
load of misaligned address 0x7ffd9c67f228 for type
'const uint64_t' (aka 'const unsigned long'), which requires
16 byte alignment
0x7ffd9c67f228: note: pointer points here
00 00 00 00 c0 5d 3e 00 01 00 00 00 01 00 00 00 00 00 00 00
^
00 00 00 00 00 00 00 00 00 00 00 00
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
../lib/eal/x86/include/rte_atomic_64.h:206:21 in
Fixes: 3340202f5954 ("stack: add lock-free implementation")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
lib/stack/rte_stack_lf_c11.h | 8 ++++----
lib/stack/rte_stack_lf_generic.h | 8 ++++----
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/lib/stack/rte_stack_lf_c11.h b/lib/stack/rte_stack_lf_c11.h
index b97e02d6a1..f674731235 100644
--- a/lib/stack/rte_stack_lf_c11.h
+++ b/lib/stack/rte_stack_lf_c11.h
@@ -63,13 +63,13 @@ __rte_stack_lf_push_elems(struct rte_stack_lf_list *list,
struct rte_stack_lf_elem *last,
unsigned int num)
{
- struct rte_stack_lf_head old_head;
+ alignas(16) struct rte_stack_lf_head old_head;
int success;
old_head = list->head;
do {
- struct rte_stack_lf_head new_head;
+ alignas(16) struct rte_stack_lf_head new_head;
/* Swing the top pointer to the first element in the list and
* make the last element point to the old top.
@@ -102,7 +102,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *list,
void **obj_table,
struct rte_stack_lf_elem **last)
{
- struct rte_stack_lf_head old_head;
+ alignas(16) struct rte_stack_lf_head old_head;
uint64_t len;
int success = 0;
@@ -129,7 +129,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *list,
/* Pop num elements */
do {
- struct rte_stack_lf_head new_head;
+ alignas(16) struct rte_stack_lf_head new_head;
struct rte_stack_lf_elem *tmp;
unsigned int i;
diff --git a/lib/stack/rte_stack_lf_generic.h b/lib/stack/rte_stack_lf_generic.h
index cc69e4d168..32f56dffdd 100644
--- a/lib/stack/rte_stack_lf_generic.h
+++ b/lib/stack/rte_stack_lf_generic.h
@@ -36,13 +36,13 @@ __rte_stack_lf_push_elems(struct rte_stack_lf_list *list,
struct rte_stack_lf_elem *last,
unsigned int num)
{
- struct rte_stack_lf_head old_head;
+ alignas(16) struct rte_stack_lf_head old_head;
int success;
old_head = list->head;
do {
- struct rte_stack_lf_head new_head;
+ alignas(16) struct rte_stack_lf_head new_head;
/* An acquire fence (or stronger) is needed for weak memory
* models to establish a synchronized-with relationship between
@@ -77,7 +77,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *list,
void **obj_table,
struct rte_stack_lf_elem **last)
{
- struct rte_stack_lf_head old_head;
+ alignas(16) struct rte_stack_lf_head old_head;
int success = 0;
/* Reserve num elements, if available */
@@ -99,7 +99,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *list,
/* Pop num elements */
do {
- struct rte_stack_lf_head new_head;
+ alignas(16) struct rte_stack_lf_head new_head;
struct rte_stack_lf_elem *tmp;
unsigned int i;
--
2.49.0
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 05/10] cmdline: fix port list parsing
2025-06-23 13:52 ` [PATCH v2 05/10] cmdline: fix port list parsing David Marchand
@ 2025-06-23 14:00 ` Bruce Richardson
0 siblings, 0 replies; 26+ messages in thread
From: Bruce Richardson @ 2025-06-23 14:00 UTC (permalink / raw)
To: David Marchand; +Cc: dev, stable
On Mon, Jun 23, 2025 at 03:52:35PM +0200, David Marchand wrote:
> Doing arithmetics with the NULL pointer is undefined.
>
> Caught by UBSan:
>
> ../lib/cmdline/cmdline_parse_portlist.c:40:19: runtime error:
> applying non-zero offset 1 to null pointer
> SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
> ../lib/cmdline/cmdline_parse_portlist.c:40:19 in
>
> Fixes: af75078fece3 ("first public release")
> Cc: stable@dpdk.org
>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> ---
> Changes since v1:
> - moved some variable as suggested by Bruce,
>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
^ permalink raw reply [flat|nested] 26+ messages in thread
* RE: [PATCH v2 02/10] test/telemetry: fix test calling all commands
2025-06-23 13:52 ` [PATCH v2 02/10] test/telemetry: fix test calling all commands David Marchand
@ 2025-06-24 15:59 ` Marat Khalili
0 siblings, 0 replies; 26+ messages in thread
From: Marat Khalili @ 2025-06-24 15:59 UTC (permalink / raw)
To: David Marchand, dev; +Cc: stable, Bruce Richardson
Reviewed-by: Marat Khalili <marat.khalili@huawei.com>
Just an idea, in case you have another iteration: could we maybe add a small check that $telemetry_script actually exists and executable to avoid similar situations in the future? Can be as simple as:
test -f "$telemetry_script"
test -x "$telemetry_script"
Due to -e in the first line it should fail the script of any of these tests fail.
> -----Original Message-----
> From: David Marchand <david.marchand@redhat.com>
> Sent: Monday 23 June 2025 14:53
> To: dev@dpdk.org
> Cc: stable@dpdk.org; Bruce Richardson <bruce.richardson@intel.com>
> Subject: [PATCH v2 02/10] test/telemetry: fix test calling all commands
>
> This test was doing nothing as it could not find the telemetry client
> script following the test suite rework.
>
> Caught while looking at UNH unit test logs:
>
> /root/workspace/Generic-Unit-Test-
> DPDK/dpdk/app/test/suites/test_telemetry.sh:
> 18: /root/workspace/Generic-Unit-Test-DPDK/dpdk/app/usertools/dpdk-
> telemetry.py:
> not found
>
> Fixes: 9da71dc4f96e ("test: add test case for scripted telemetry commands")
> Cc: stable@dpdk.org
>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>
> ---
> app/test/suites/test_telemetry.sh | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/app/test/suites/test_telemetry.sh
> b/app/test/suites/test_telemetry.sh
> index ca6abe266e..20806b43e4 100755
> --- a/app/test/suites/test_telemetry.sh
> +++ b/app/test/suites/test_telemetry.sh
> @@ -7,7 +7,7 @@ which jq || {
> exit 77
> }
>
> -rootdir=$(readlink -f $(dirname $(readlink -f $0))/../..)
> +rootdir=$(readlink -f $(dirname $(readlink -f $0))/../../..)
> tmpoutput=$(mktemp -t dpdk.test_telemetry.XXXXXX)
> trap "cat $tmpoutput; rm -f $tmpoutput" EXIT
>
> --
> 2.49.0
^ permalink raw reply [flat|nested] 26+ messages in thread
end of thread, other threads:[~2025-06-24 15:59 UTC | newest]
Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20250619071037.37325-1-david.marchand@redhat.com>
2025-06-19 7:10 ` [PATCH 02/10] test/telemetry: fix test calling all commands David Marchand
2025-06-20 9:16 ` Bruce Richardson
2025-06-23 9:54 ` David Marchand
2025-06-19 7:10 ` [PATCH 04/10] eal: fix plugin dir walk David Marchand
2025-06-20 9:19 ` Bruce Richardson
2025-06-23 9:41 ` David Marchand
2025-06-19 7:10 ` [PATCH 05/10] cmdline: fix port list parsing David Marchand
2025-06-20 9:58 ` Bruce Richardson
2025-06-23 9:40 ` David Marchand
2025-06-23 10:41 ` Bruce Richardson
2025-06-19 7:10 ` [PATCH 06/10] cmdline: fix highest bit " David Marchand
2025-06-20 9:21 ` Bruce Richardson
2025-06-23 9:32 ` David Marchand
2025-06-19 7:10 ` [PATCH 07/10] tailq: fix cast macro for null pointer David Marchand
2025-06-20 9:23 ` Bruce Richardson
2025-06-19 7:10 ` [PATCH 08/10] hash: fix unaligned access in predictable RSS David Marchand
2025-06-19 7:10 ` [PATCH 09/10] stack: fix unaligned accesses on 128-bit David Marchand
[not found] ` <20250623135242.461965-1-david.marchand@redhat.com>
2025-06-23 13:52 ` [PATCH v2 02/10] test/telemetry: fix test calling all commands David Marchand
2025-06-24 15:59 ` Marat Khalili
2025-06-23 13:52 ` [PATCH v2 04/10] eal: fix plugin dir walk David Marchand
2025-06-23 13:52 ` [PATCH v2 05/10] cmdline: fix port list parsing David Marchand
2025-06-23 14:00 ` Bruce Richardson
2025-06-23 13:52 ` [PATCH v2 06/10] cmdline: fix highest bit " David Marchand
2025-06-23 13:52 ` [PATCH v2 07/10] tailq: fix cast macro for null pointer David Marchand
2025-06-23 13:52 ` [PATCH v2 08/10] hash: fix unaligned access in predictable RSS David Marchand
2025-06-23 13:52 ` [PATCH v2 09/10] stack: fix unaligned accesses on 128-bit David Marchand
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).