* [PATCH 0/3] examples: format truncation bugs
@ 2025-11-10 18:19 Stephen Hemminger
2025-11-10 18:19 ` [PATCH 1/3] examples/server_node_efd: fix format overflow Stephen Hemminger
` (3 more replies)
0 siblings, 4 replies; 13+ messages in thread
From: Stephen Hemminger @ 2025-11-10 18:19 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger
Enable format-overflow warnings in examples and fix the bugs.
Stephen Hemminger (3):
examples/server_node_efd: fix format overflow
examples/vdpa: fix format overflow warning
examples: re-enable format truncation warning
examples/meson.build | 5 ++---
examples/server_node_efd/efd_server/main.c | 2 +-
examples/vdpa/main.c | 12 ++++++------
3 files changed, 9 insertions(+), 10 deletions(-)
--
2.51.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/3] examples/server_node_efd: fix format overflow
2025-11-10 18:19 [PATCH 0/3] examples: format truncation bugs Stephen Hemminger
@ 2025-11-10 18:19 ` Stephen Hemminger
2025-11-10 18:19 ` [PATCH 2/3] examples/vdpa: fix format overflow warning Stephen Hemminger
` (2 subsequent siblings)
3 siblings, 0 replies; 13+ messages in thread
From: Stephen Hemminger @ 2025-11-10 18:19 UTC (permalink / raw)
To: dev
Cc: Stephen Hemminger, stable, Byron Marohn, Yipeng Wang,
Pablo de Lara, Saikrishna Edupuganti, Christian Maciocco
If format-truncation is enabled, the compiler detects a string overflow
since the snprintf() is putting ethernet address and new line
in buffer only sized for the address.
Fixes: 39aad0e88c58 ("examples/flow_distributor: new example to demonstrate EFD")
Cc: stable@dpdk.org
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
examples/server_node_efd/efd_server/main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/examples/server_node_efd/efd_server/main.c b/examples/server_node_efd/efd_server/main.c
index 75ff0ea532..62c3f4a16d 100644
--- a/examples/server_node_efd/efd_server/main.c
+++ b/examples/server_node_efd/efd_server/main.c
@@ -68,7 +68,7 @@ static const char *
get_printable_mac_addr(uint16_t port)
{
static const char err_address[] = "00:00:00:00:00:00";
- static char addresses[RTE_MAX_ETHPORTS][sizeof(err_address)];
+ static char addresses[RTE_MAX_ETHPORTS][RTE_ETHER_ADDR_FMT_SIZE + 1];
struct rte_ether_addr mac;
int ret;
--
2.51.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 2/3] examples/vdpa: fix format overflow warning
2025-11-10 18:19 [PATCH 0/3] examples: format truncation bugs Stephen Hemminger
2025-11-10 18:19 ` [PATCH 1/3] examples/server_node_efd: fix format overflow Stephen Hemminger
@ 2025-11-10 18:19 ` Stephen Hemminger
2025-11-10 18:19 ` [PATCH 3/3] examples: re-enable format truncation warning Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 0/7] fix format-truncation warnings Stephen Hemminger
3 siblings, 0 replies; 13+ messages in thread
From: Stephen Hemminger @ 2025-11-10 18:19 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, maxime.coquelin, stable, Chenbo Xia, Adrian Moreno
The ifname is limited to 128 characters, but it would allow up
to 128 characters as prefix then could overflow creating ifname.
Change to limit path prefix to 124 (128 - sizeof("1024"))
to avoid possible format overflow
Fixes: 38f8ab0bbc8d ("vhost: make vDPA framework bus agnostic")
Cc: maxime.coquelin@redhat.com
Cc: stable@dpdk.org
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
examples/vdpa/main.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/examples/vdpa/main.c b/examples/vdpa/main.c
index 289db26498..bdf751ad63 100644
--- a/examples/vdpa/main.c
+++ b/examples/vdpa/main.c
@@ -22,6 +22,8 @@
#define MAX_PATH_LEN 128
#define MAX_VDPA_SAMPLE_PORTS 1024
+#define stringify(x) (#x)
+#define MAX_VDPA_STR_LEN sizeof(stringify(MAX_VDPA_SAMPLE_PORTS))
#define RTE_LOGTYPE_VDPA RTE_LOGTYPE_USER1
struct vdpa_port {
@@ -36,7 +38,7 @@ struct vdpa_port {
static struct vdpa_port vports[MAX_VDPA_SAMPLE_PORTS];
-static char iface[MAX_PATH_LEN];
+static char iface[MAX_PATH_LEN - MAX_VDPA_STR_LEN];
static int devcnt;
static int interactive;
static int client_mode;
@@ -74,9 +76,8 @@ parse_args(int argc, char **argv)
break;
/* long options */
case 0:
- if (strncmp(long_option[idx].name, "iface",
- MAX_PATH_LEN) == 0) {
- rte_strscpy(iface, optarg, MAX_PATH_LEN);
+ if (!strcmp(long_option[idx].name, "iface")) {
+ rte_strscpy(iface, optarg, sizeof(iface));
printf("iface %s\n", iface);
}
if (!strcmp(long_option[idx].name, "interactive")) {
--
2.51.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 3/3] examples: re-enable format truncation warning
2025-11-10 18:19 [PATCH 0/3] examples: format truncation bugs Stephen Hemminger
2025-11-10 18:19 ` [PATCH 1/3] examples/server_node_efd: fix format overflow Stephen Hemminger
2025-11-10 18:19 ` [PATCH 2/3] examples/vdpa: fix format overflow warning Stephen Hemminger
@ 2025-11-10 18:19 ` Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 0/7] fix format-truncation warnings Stephen Hemminger
3 siblings, 0 replies; 13+ messages in thread
From: Stephen Hemminger @ 2025-11-10 18:19 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger
There were several hidden bugs in examples because format
truncation warning was disabled.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
examples/meson.build | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/examples/meson.build b/examples/meson.build
index 8e8968a1fa..25d9c88457 100644
--- a/examples/meson.build
+++ b/examples/meson.build
@@ -78,10 +78,9 @@ else
examples = get_option('examples').split(',')
allow_skips = false # error out if we can't build a requested app
endif
+
default_cflags = machine_args
-if cc.has_argument('-Wno-format-truncation')
- default_cflags += '-Wno-format-truncation'
-endif
+
default_ldflags = dpdk_extra_ldflags
if get_option('default_library') == 'static' and not is_windows
default_ldflags += ['-Wl,--export-dynamic']
--
2.51.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 0/7] fix format-truncation warnings
2025-11-10 18:19 [PATCH 0/3] examples: format truncation bugs Stephen Hemminger
` (2 preceding siblings ...)
2025-11-10 18:19 ` [PATCH 3/3] examples: re-enable format truncation warning Stephen Hemminger
@ 2025-11-11 22:17 ` Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 1/7] examples/server_node_efd: fix format overflow Stephen Hemminger
` (6 more replies)
3 siblings, 7 replies; 13+ messages in thread
From: Stephen Hemminger @ 2025-11-11 22:17 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger
Enable and fix format-truncation warnings in examples and tests.
v2 - fix build warnings (more fixes needed)
- do test as well (could be separate series?)
Stephen Hemminger (7):
examples/server_node_efd: fix format overflow
examples/vdpa: fix format overflow warning
examples/ip_reassembly: add check before formatting name
examples: re-enable format truncation warning
test: refactor file prefix arg handling
test: increase size of memzone name
test: re-enable format-truncation warnings
app/test/meson.build | 1 -
app/test/test_eal_flags.c | 161 ++++++++-------------
app/test/test_memzone.c | 2 +-
examples/ip_reassembly/main.c | 7 +
examples/meson.build | 5 +-
examples/server_node_efd/efd_server/main.c | 2 +-
examples/server_node_efd/shared/common.h | 3 +-
examples/vdpa/main.c | 9 +-
8 files changed, 77 insertions(+), 113 deletions(-)
--
2.51.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 1/7] examples/server_node_efd: fix format overflow
2025-11-11 22:17 ` [PATCH v2 0/7] fix format-truncation warnings Stephen Hemminger
@ 2025-11-11 22:17 ` Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 2/7] examples/vdpa: fix format overflow warning Stephen Hemminger
` (5 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Stephen Hemminger @ 2025-11-11 22:17 UTC (permalink / raw)
To: dev
Cc: Stephen Hemminger, stable, Byron Marohn, Yipeng Wang,
Saikrishna Edupuganti, Pablo de Lara, Christian Maciocco
If format-truncation is enabled, the compiler detects a string overflow
since the snprintf() is putting ethernet address and new line
in buffer only sized for the address.
Since get_rx_queue_name() is used to create a ring name.
The buffer should be sized to be a valid ring name.
This fixes some format-overflow warnings and also corrects
for future errors.
Fixes: 39aad0e88c58 ("examples/flow_distributor: new example to demonstrate EFD")
Cc: stable@dpdk.org
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
examples/server_node_efd/efd_server/main.c | 2 +-
examples/server_node_efd/shared/common.h | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/examples/server_node_efd/efd_server/main.c b/examples/server_node_efd/efd_server/main.c
index 75ff0ea532..62c3f4a16d 100644
--- a/examples/server_node_efd/efd_server/main.c
+++ b/examples/server_node_efd/efd_server/main.c
@@ -68,7 +68,7 @@ static const char *
get_printable_mac_addr(uint16_t port)
{
static const char err_address[] = "00:00:00:00:00:00";
- static char addresses[RTE_MAX_ETHPORTS][sizeof(err_address)];
+ static char addresses[RTE_MAX_ETHPORTS][RTE_ETHER_ADDR_FMT_SIZE + 1];
struct rte_ether_addr mac;
int ret;
diff --git a/examples/server_node_efd/shared/common.h b/examples/server_node_efd/shared/common.h
index e1ab7e62b7..6726e2031e 100644
--- a/examples/server_node_efd/shared/common.h
+++ b/examples/server_node_efd/shared/common.h
@@ -58,8 +58,9 @@ get_rx_queue_name(unsigned int id)
/*
* Buffer for return value. Size calculated by %u being replaced
* by maximum 3 digits (plus an extra byte for safety)
+ * Used as ring name, so upper limit is ring name size.
*/
- static char buffer[sizeof(MP_NODE_RXQ_NAME) + 2];
+ static char buffer[RTE_RING_NAMESIZE];
snprintf(buffer, sizeof(buffer), MP_NODE_RXQ_NAME, id);
return buffer;
--
2.51.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 2/7] examples/vdpa: fix format overflow warning
2025-11-11 22:17 ` [PATCH v2 0/7] fix format-truncation warnings Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 1/7] examples/server_node_efd: fix format overflow Stephen Hemminger
@ 2025-11-11 22:17 ` Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 3/7] examples/ip_reassembly: add check before formatting name Stephen Hemminger
` (4 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Stephen Hemminger @ 2025-11-11 22:17 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, maxime.coquelin, stable, Chenbo Xia, Adrian Moreno
The ifname is limited to 128 characters, but it would allow up
to 128 characters as prefix then could overflow creating ifname.
Change to limit path prefix to 124 (128 - sizeof("1024"))
to avoid possible format overflow
Fixes: 38f8ab0bbc8d ("vhost: make vDPA framework bus agnostic")
Cc: maxime.coquelin@redhat.com
Cc: stable@dpdk.org
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
examples/vdpa/main.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/examples/vdpa/main.c b/examples/vdpa/main.c
index 289db26498..7fd0e55b20 100644
--- a/examples/vdpa/main.c
+++ b/examples/vdpa/main.c
@@ -22,6 +22,8 @@
#define MAX_PATH_LEN 128
#define MAX_VDPA_SAMPLE_PORTS 1024
+#define stringify(x) (#x)
+#define MAX_VDPA_STR_LEN sizeof(stringify(MAX_VDPA_SAMPLE_PORTS))
#define RTE_LOGTYPE_VDPA RTE_LOGTYPE_USER1
struct vdpa_port {
@@ -36,7 +38,7 @@ struct vdpa_port {
static struct vdpa_port vports[MAX_VDPA_SAMPLE_PORTS];
-static char iface[MAX_PATH_LEN];
+static char iface[MAX_PATH_LEN - MAX_VDPA_STR_LEN];
static int devcnt;
static int interactive;
static int client_mode;
@@ -74,9 +76,8 @@ parse_args(int argc, char **argv)
break;
/* long options */
case 0:
- if (strncmp(long_option[idx].name, "iface",
- MAX_PATH_LEN) == 0) {
- rte_strscpy(iface, optarg, MAX_PATH_LEN);
+ if (!strcmp(long_option[idx].name, "iface")) {
+ rte_strscpy(iface, optarg, sizeof(iface));
printf("iface %s\n", iface);
}
if (!strcmp(long_option[idx].name, "interactive")) {
--
2.51.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 3/7] examples/ip_reassembly: add check before formatting name
2025-11-11 22:17 ` [PATCH v2 0/7] fix format-truncation warnings Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 1/7] examples/server_node_efd: fix format overflow Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 2/7] examples/vdpa: fix format overflow warning Stephen Hemminger
@ 2025-11-11 22:17 ` Stephen Hemminger
2025-11-12 14:50 ` Konstantin Ananyev
2025-11-11 22:17 ` [PATCH v2 4/7] examples: re-enable format truncation warning Stephen Hemminger
` (3 subsequent siblings)
6 siblings, 1 reply; 13+ messages in thread
From: Stephen Hemminger @ 2025-11-11 22:17 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Konstantin Ananyev
In theory, lcore and queue could be so large that mbuf pool name
could overflow. But that can never happen since lcore and queue
will be in range. Add a check so that static tools know that.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
examples/ip_reassembly/main.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/examples/ip_reassembly/main.c b/examples/ip_reassembly/main.c
index 17ae76d4ba..25b904dbd4 100644
--- a/examples/ip_reassembly/main.c
+++ b/examples/ip_reassembly/main.c
@@ -884,6 +884,13 @@ setup_queue_tbl(struct rx_queue *rxq, uint32_t lcore, uint32_t queue)
nb_mbuf = RTE_MAX(nb_mbuf, (uint32_t)NB_MBUF);
+ /* Should never happen but check so that pool name won't be too long. */
+ if (lcore > RTE_MAX_LCORE || queue > RTE_MAX_QUEUES_PER_PORT) {
+ RTE_LOG(ERR, IP_RSMBL, "invalid lcore %u or queue %u",
+ lcore, queue);
+ return -1;
+ }
+
snprintf(buf, sizeof(buf), "mbuf_pool_%u_%u", lcore, queue);
rxq->pool = rte_pktmbuf_pool_create(buf, nb_mbuf, MEMPOOL_CACHE_SIZE, 0,
--
2.51.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 4/7] examples: re-enable format truncation warning
2025-11-11 22:17 ` [PATCH v2 0/7] fix format-truncation warnings Stephen Hemminger
` (2 preceding siblings ...)
2025-11-11 22:17 ` [PATCH v2 3/7] examples/ip_reassembly: add check before formatting name Stephen Hemminger
@ 2025-11-11 22:17 ` Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 5/7] test: refactor file prefix arg handling Stephen Hemminger
` (2 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Stephen Hemminger @ 2025-11-11 22:17 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger
There were several hidden bugs in examples because format
truncation warning was disabled.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
examples/meson.build | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/examples/meson.build b/examples/meson.build
index 8e8968a1fa..25d9c88457 100644
--- a/examples/meson.build
+++ b/examples/meson.build
@@ -78,10 +78,9 @@ else
examples = get_option('examples').split(',')
allow_skips = false # error out if we can't build a requested app
endif
+
default_cflags = machine_args
-if cc.has_argument('-Wno-format-truncation')
- default_cflags += '-Wno-format-truncation'
-endif
+
default_ldflags = dpdk_extra_ldflags
if get_option('default_library') == 'static' and not is_windows
default_ldflags += ['-Wl,--export-dynamic']
--
2.51.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 5/7] test: refactor file prefix arg handling
2025-11-11 22:17 ` [PATCH v2 0/7] fix format-truncation warnings Stephen Hemminger
` (3 preceding siblings ...)
2025-11-11 22:17 ` [PATCH v2 4/7] examples: re-enable format truncation warning Stephen Hemminger
@ 2025-11-11 22:17 ` Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 6/7] test: increase size of memzone name Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 7/7] test: re-enable format-truncation warnings Stephen Hemminger
6 siblings, 0 replies; 13+ messages in thread
From: Stephen Hemminger @ 2025-11-11 22:17 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Tyler Retzlaff
Make setting up --file-prefix arg logic into a function,
and avoid impossible case of file prefix path causing overflow
of string.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
app/test/test_eal_flags.c | 161 ++++++++++++++------------------------
1 file changed, 59 insertions(+), 102 deletions(-)
diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c
index e32f83d3c8..05b4135a51 100644
--- a/app/test/test_eal_flags.c
+++ b/app/test/test_eal_flags.c
@@ -121,6 +121,8 @@ test_misc_flags(void)
#define no_shconf "--no-shconf"
#define allow "--allow"
#define vdev "--vdev"
+#define file_prefix "--file-prefix"
+
#define memtest "memtest"
#define memtest1 "memtest1"
#define memtest2 "memtest2"
@@ -312,26 +314,40 @@ get_number_of_sockets(void)
}
#endif
-/*
- * Test that the app doesn't run with invalid allow option.
- * Final tests ensures it does run with valid options as sanity check (one
- * test for with Domain+BDF, second for just with BDF)
- */
+/* Get the file_prefix xommand line argument */
static int
-test_allow_flag(void)
+get_file_prefix(char *prefix, size_t size)
{
- unsigned i;
#ifdef RTE_EXEC_ENV_FREEBSD
/* BSD target doesn't support prefixes at this point */
- const char * prefix = "";
+ RTE_SET_USED(len);
+ *prefix = 0;
+ return 0;
#else
- char prefix[PATH_MAX], tmp[PATH_MAX];
+ char tmp[PATH_MAX];
+
if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
printf("Error - unable to get current prefix!\n");
return -1;
}
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
+ snprintf(prefix, size, "%s=%s", file_prefix, tmp);
+ return 0;
#endif
+}
+
+/*
+ * Test that the app doesn't run with invalid allow option.
+ * Final tests ensures it does run with valid options as sanity check (one
+ * test for with Domain+BDF, second for just with BDF)
+ */
+static int
+test_allow_flag(void)
+{
+ unsigned i;
+ char prefix[PATH_MAX + sizeof(file_prefix)];
+
+ if (get_file_prefix(prefix, sizeof(prefix)) != 0)
+ return TEST_FAILED;
const char *wlinval[][7] = {
{prgname, prefix, mp_flag,
@@ -387,17 +403,10 @@ test_allow_flag(void)
static int
test_invalid_b_flag(void)
{
-#ifdef RTE_EXEC_ENV_FREEBSD
- /* BSD target doesn't support prefixes at this point */
- const char * prefix = "";
-#else
- char prefix[PATH_MAX], tmp[PATH_MAX];
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-#endif
+ char prefix[PATH_MAX + sizeof(file_prefix)];
+
+ if (get_file_prefix(prefix, sizeof(prefix)) != 0)
+ return TEST_FAILED;
const char *blinval[][5] = {
{prgname, prefix, mp_flag, "-b", "error"},
@@ -491,17 +500,10 @@ test_invalid_vdev_flag(void)
static int
test_invalid_r_flag(void)
{
-#ifdef RTE_EXEC_ENV_FREEBSD
- /* BSD target doesn't support prefixes at this point */
- const char * prefix = "";
-#else
- char prefix[PATH_MAX], tmp[PATH_MAX];
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-#endif
+ char prefix[PATH_MAX + sizeof(file_prefix)];
+
+ if (get_file_prefix(prefix, sizeof(prefix)) != 0)
+ return TEST_FAILED;
const char *rinval[][5] = {
{prgname, prefix, mp_flag, "-r", "error"},
@@ -535,17 +537,10 @@ test_invalid_r_flag(void)
static int
test_missing_c_flag(void)
{
-#ifdef RTE_EXEC_ENV_FREEBSD
- /* BSD target doesn't support prefixes at this point */
- const char * prefix = "";
-#else
- char prefix[PATH_MAX], tmp[PATH_MAX];
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-#endif
+ char prefix[PATH_MAX + sizeof(file_prefix)];
+
+ if (get_file_prefix(prefix, sizeof(prefix)) != 0)
+ return TEST_FAILED;
/* -c flag but no coremask value */
const char *argv1[] = { prgname, prefix, mp_flag, "-c"};
@@ -694,17 +689,10 @@ test_missing_c_flag(void)
static int
test_main_lcore_flag(void)
{
-#ifdef RTE_EXEC_ENV_FREEBSD
- /* BSD target doesn't support prefixes at this point */
- const char *prefix = "";
-#else
- char prefix[PATH_MAX], tmp[PATH_MAX];
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-#endif
+ char prefix[PATH_MAX + sizeof(file_prefix)];
+
+ if (get_file_prefix(prefix, sizeof(prefix)) != 0)
+ return TEST_FAILED;
if (!rte_lcore_is_enabled(0) || !rte_lcore_is_enabled(1))
return TEST_SKIPPED;
@@ -751,17 +739,10 @@ test_main_lcore_flag(void)
static int
test_invalid_n_flag(void)
{
-#ifdef RTE_EXEC_ENV_FREEBSD
- /* BSD target doesn't support prefixes at this point */
- const char * prefix = "";
-#else
- char prefix[PATH_MAX], tmp[PATH_MAX];
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-#endif
+ char prefix[PATH_MAX + sizeof(file_prefix)];
+
+ if (get_file_prefix(prefix, sizeof(prefix)) != 0)
+ return TEST_FAILED;
/* -n flag but no value */
const char *argv1[] = { prgname, prefix, no_huge, no_shconf,
@@ -803,18 +784,10 @@ test_invalid_n_flag(void)
static int
test_no_hpet_flag(void)
{
- char prefix[PATH_MAX] = "";
+ char prefix[PATH_MAX + sizeof(file_prefix)];
-#ifdef RTE_EXEC_ENV_FREEBSD
- return 0;
-#else
- char tmp[PATH_MAX];
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-#endif
+ if (get_file_prefix(prefix, sizeof(prefix)) != 0)
+ return TEST_FAILED;
/* With --no-hpet */
const char *argv1[] = {prgname, prefix, mp_flag, no_hpet};
@@ -913,17 +886,14 @@ test_misc_flags(void)
const char * prefix = "";
const char * nosh_prefix = "";
#else
- char prefix[PATH_MAX], tmp[PATH_MAX];
+ char prefix[PATH_MAX + sizeof(file_prefix)];
const char * nosh_prefix = "--file-prefix=noshconf";
FILE * hugedir_handle = NULL;
char line[PATH_MAX] = {0};
unsigned i, isempty = 1;
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
+ if (get_file_prefix(prefix, sizeof(prefix)) != 0)
+ return TEST_FAILED;
/*
* get first valid hugepage path
@@ -1239,16 +1209,10 @@ test_file_prefix(void)
* run in legacy mode, and not present at all after run in default
* mem mode
*/
- char prefix[PATH_MAX] = "";
+ char prefix[PATH_MAX + sizeof(file_prefix)];
-#ifdef RTE_EXEC_ENV_FREEBSD
- return 0;
-#else
- if (get_current_prefix(prefix, sizeof(prefix)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
-#endif
+ if (get_file_prefix(prefix, sizeof(prefix)) != 0)
+ return TEST_FAILED;
/* this should fail unless the test itself is run with "memtest" prefix */
const char *argv0[] = {prgname, mp_flag, "-m",
@@ -1525,17 +1489,10 @@ populate_socket_mem_param(int num_sockets, const char *mem,
static int
test_memory_flags(void)
{
-#ifdef RTE_EXEC_ENV_FREEBSD
- /* BSD target doesn't support prefixes at this point */
- const char * prefix = "";
-#else
- char prefix[PATH_MAX], tmp[PATH_MAX];
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-#endif
+ char prefix[PATH_MAX + sizeof(file_prefix)];
+
+ if (get_file_prefix(prefix, sizeof(prefix)) != 0)
+ return TEST_FAILED;
/* valid -m flag and mp flag */
const char *argv0[] = {prgname, prefix, mp_flag,
--
2.51.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 6/7] test: increase size of memzone name
2025-11-11 22:17 ` [PATCH v2 0/7] fix format-truncation warnings Stephen Hemminger
` (4 preceding siblings ...)
2025-11-11 22:17 ` [PATCH v2 5/7] test: refactor file prefix arg handling Stephen Hemminger
@ 2025-11-11 22:17 ` Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 7/7] test: re-enable format-truncation warnings Stephen Hemminger
6 siblings, 0 replies; 13+ messages in thread
From: Stephen Hemminger @ 2025-11-11 22:17 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Anatoly Burakov
The tests were using a name buffer of 20 characters which could
overflow if number of memory zones got large. The upper limit
is defined as RTE_MEMZONE_NAMESIZE so use that.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
app/test/test_memzone.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/test/test_memzone.c b/app/test/test_memzone.c
index 506725ea41..6586dad18d 100644
--- a/app/test/test_memzone.c
+++ b/app/test/test_memzone.c
@@ -872,7 +872,7 @@ test_memzone_free(void)
{
const struct rte_memzone **mz;
int i;
- char name[20];
+ char name[RTE_MEMZONE_NAMESIZE];
int rc = -1;
mz = rte_calloc("memzone_test", rte_memzone_max_get() + 1,
--
2.51.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 7/7] test: re-enable format-truncation warnings
2025-11-11 22:17 ` [PATCH v2 0/7] fix format-truncation warnings Stephen Hemminger
` (5 preceding siblings ...)
2025-11-11 22:17 ` [PATCH v2 6/7] test: increase size of memzone name Stephen Hemminger
@ 2025-11-11 22:17 ` Stephen Hemminger
6 siblings, 0 replies; 13+ messages in thread
From: Stephen Hemminger @ 2025-11-11 22:17 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger
Tests should be built with warnings.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
app/test/meson.build | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/test/meson.build b/app/test/meson.build
index 8df8d3edd1..66cbabe9fe 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -260,7 +260,6 @@ cflags += no_wvla_cflag
extra_flags = [
# Strict-aliasing rules are violated by uint8_t[] to context size casts.
'-fno-strict-aliasing',
- '-Wno-format-truncation',
]
foreach arg: extra_flags
--
2.51.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: [PATCH v2 3/7] examples/ip_reassembly: add check before formatting name
2025-11-11 22:17 ` [PATCH v2 3/7] examples/ip_reassembly: add check before formatting name Stephen Hemminger
@ 2025-11-12 14:50 ` Konstantin Ananyev
0 siblings, 0 replies; 13+ messages in thread
From: Konstantin Ananyev @ 2025-11-12 14:50 UTC (permalink / raw)
To: Stephen Hemminger, dev
>
> In theory, lcore and queue could be so large that mbuf pool name
> could overflow. But that can never happen since lcore and queue
> will be in range. Add a check so that static tools know that.
>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
> examples/ip_reassembly/main.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/examples/ip_reassembly/main.c b/examples/ip_reassembly/main.c
> index 17ae76d4ba..25b904dbd4 100644
> --- a/examples/ip_reassembly/main.c
> +++ b/examples/ip_reassembly/main.c
> @@ -884,6 +884,13 @@ setup_queue_tbl(struct rx_queue *rxq, uint32_t lcore,
> uint32_t queue)
>
> nb_mbuf = RTE_MAX(nb_mbuf, (uint32_t)NB_MBUF);
>
> + /* Should never happen but check so that pool name won't be too long. */
> + if (lcore > RTE_MAX_LCORE || queue > RTE_MAX_QUEUES_PER_PORT) {
> + RTE_LOG(ERR, IP_RSMBL, "invalid lcore %u or queue %u",
> + lcore, queue);
> + return -1;
> + }
> +
> snprintf(buf, sizeof(buf), "mbuf_pool_%u_%u", lcore, queue);
>
> rxq->pool = rte_pktmbuf_pool_create(buf, nb_mbuf,
> MEMPOOL_CACHE_SIZE, 0,
> --
Acked-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
> 2.51.0
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2025-11-12 14:50 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-11-10 18:19 [PATCH 0/3] examples: format truncation bugs Stephen Hemminger
2025-11-10 18:19 ` [PATCH 1/3] examples/server_node_efd: fix format overflow Stephen Hemminger
2025-11-10 18:19 ` [PATCH 2/3] examples/vdpa: fix format overflow warning Stephen Hemminger
2025-11-10 18:19 ` [PATCH 3/3] examples: re-enable format truncation warning Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 0/7] fix format-truncation warnings Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 1/7] examples/server_node_efd: fix format overflow Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 2/7] examples/vdpa: fix format overflow warning Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 3/7] examples/ip_reassembly: add check before formatting name Stephen Hemminger
2025-11-12 14:50 ` Konstantin Ananyev
2025-11-11 22:17 ` [PATCH v2 4/7] examples: re-enable format truncation warning Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 5/7] test: refactor file prefix arg handling Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 6/7] test: increase size of memzone name Stephen Hemminger
2025-11-11 22:17 ` [PATCH v2 7/7] test: re-enable format-truncation warnings Stephen Hemminger
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).