patch 'app/testpmd: fix out-of-bound reference in offload config' has been queued to stable release 23.11.4

Xueming Li xuemingl at nvidia.com
Tue Apr 8 09:44:33 CEST 2025


Hi,

FYI, your patch has been queued to stable release 23.11.4

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 04/10/25. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://git.dpdk.org/dpdk-stable/log/?h=23.11-staging

This queued commit can be viewed at:
https://git.dpdk.org/dpdk-stable/commit/?h=23.11-staging&id=ee6a1cdc5a990f7b2360b9d547e702d8373bf947

Thanks.

Xueming Li <xuemingl at nvidia.com>

---
>From ee6a1cdc5a990f7b2360b9d547e702d8373bf947 Mon Sep 17 00:00:00 2001
From: Stephen Hemminger <stephen at networkplumber.org>
Date: Thu, 20 Feb 2025 12:44:26 -0800
Subject: [PATCH] app/testpmd: fix out-of-bound reference in offload config
Cc: Xueming Li <xuemingl at nvidia.com>

[ upstream commit 8f847023dd16cb6e5858756d7ec16c940ac6eee9 ]

When configuring offloads, need to check the port id before
indexing into the ports[] array. This can easily be done
by moving the call to oh_dev_conf_get_print_err() to before
the checks for port stopped.

Fixes: c73a9071877a ("app/testpmd: add commands to test new offload API")

Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
Acked-by: Huisong Li <lihuisong at huawei.com>
---
 app/test-pmd/cmdline.c | 57 +++++++++++++++++++++++-------------------
 1 file changed, 31 insertions(+), 26 deletions(-)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index c150315eb8..d40f0fb7bb 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -11055,7 +11055,7 @@ cmd_rx_offload_get_configuration_parsed(
 	struct cmd_rx_offload_get_configuration_result *res = parsed_result;
 	struct rte_eth_dev_info dev_info;
 	portid_t port_id = res->port_id;
-	struct rte_port *port = &ports[port_id];
+	struct rte_port *port;
 	struct rte_eth_conf dev_conf;
 	uint64_t port_offloads;
 	uint64_t queue_offloads;
@@ -11063,12 +11063,13 @@ cmd_rx_offload_get_configuration_parsed(
 	int q;
 	int ret;
 
-	printf("Rx Offloading Configuration of port %d :\n", port_id);
-
 	ret = eth_dev_conf_get_print_err(port_id, &dev_conf);
 	if (ret != 0)
 		return;
 
+	port = &ports[port_id];
+	printf("Rx Offloading Configuration of port %d :\n", port_id);
+
 	port_offloads = dev_conf.rxmode.offloads;
 	printf("  Port :");
 	print_rx_offloads(port_offloads);
@@ -11169,12 +11170,17 @@ static void
 config_port_rx_offload(portid_t port_id, char *name, bool on)
 {
 	struct rte_eth_dev_info dev_info;
-	struct rte_port *port = &ports[port_id];
+	struct rte_port *port;
 	uint16_t nb_rx_queues;
 	uint64_t offload;
 	int q;
 	int ret;
 
+	ret = eth_dev_info_get_print_err(port_id, &dev_info);
+	if (ret != 0)
+		return;
+
+	port = &ports[port_id];
 	if (port->port_status != RTE_PORT_STOPPED) {
 		fprintf(stderr,
 			"Error: Can't config offload when Port %d is not stopped\n",
@@ -11182,10 +11188,6 @@ config_port_rx_offload(portid_t port_id, char *name, bool on)
 		return;
 	}
 
-	ret = eth_dev_info_get_print_err(port_id, &dev_info);
-	if (ret != 0)
-		return;
-
 	if (!strcmp(name, "all")) {
 		offload = dev_info.rx_offload_capa;
 	} else {
@@ -11371,10 +11373,15 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
 	struct rte_eth_dev_info dev_info;
 	portid_t port_id = res->port_id;
 	uint16_t queue_id = res->queue_id;
-	struct rte_port *port = &ports[port_id];
+	struct rte_port *port;
 	uint64_t offload;
 	int ret;
 
+	ret = eth_dev_info_get_print_err(port_id, &dev_info);
+	if (ret != 0)
+		return;
+
+	port = &ports[port_id];
 	if (port->port_status != RTE_PORT_STOPPED) {
 		fprintf(stderr,
 			"Error: Can't config offload when Port %d is not stopped\n",
@@ -11382,10 +11389,6 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
 		return;
 	}
 
-	ret = eth_dev_info_get_print_err(port_id, &dev_info);
-	if (ret != 0)
-		return;
-
 	if (queue_id >= dev_info.nb_rx_queues) {
 		fprintf(stderr,
 			"Error: input queue_id should be 0 ... %d\n",
@@ -11573,7 +11576,7 @@ cmd_tx_offload_get_configuration_parsed(
 	struct cmd_tx_offload_get_configuration_result *res = parsed_result;
 	struct rte_eth_dev_info dev_info;
 	portid_t port_id = res->port_id;
-	struct rte_port *port = &ports[port_id];
+	struct rte_port *port;
 	struct rte_eth_conf dev_conf;
 	uint64_t port_offloads;
 	uint64_t queue_offloads;
@@ -11581,12 +11584,12 @@ cmd_tx_offload_get_configuration_parsed(
 	int q;
 	int ret;
 
-	printf("Tx Offloading Configuration of port %d :\n", port_id);
-
 	ret = eth_dev_conf_get_print_err(port_id, &dev_conf);
 	if (ret != 0)
 		return;
 
+	printf("Tx Offloading Configuration of port %d :\n", port_id);
+	port = &ports[port_id];
 	port_offloads = dev_conf.txmode.offloads;
 	printf("  Port :");
 	print_tx_offloads(port_offloads);
@@ -11691,12 +11694,17 @@ static void
 config_port_tx_offload(portid_t port_id, char *name, bool on)
 {
 	struct rte_eth_dev_info dev_info;
-	struct rte_port *port = &ports[port_id];
+	struct rte_port *port;
 	uint16_t nb_tx_queues;
 	uint64_t offload;
 	int q;
 	int ret;
 
+	ret = eth_dev_info_get_print_err(port_id, &dev_info);
+	if (ret != 0)
+		return;
+
+	port = &ports[port_id];
 	if (port->port_status != RTE_PORT_STOPPED) {
 		fprintf(stderr,
 			"Error: Can't config offload when Port %d is not stopped\n",
@@ -11704,10 +11712,6 @@ config_port_tx_offload(portid_t port_id, char *name, bool on)
 		return;
 	}
 
-	ret = eth_dev_info_get_print_err(port_id, &dev_info);
-	if (ret != 0)
-		return;
-
 	if (!strcmp(name, "all")) {
 		offload = dev_info.tx_offload_capa;
 	} else {
@@ -11897,10 +11901,15 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
 	struct rte_eth_dev_info dev_info;
 	portid_t port_id = res->port_id;
 	uint16_t queue_id = res->queue_id;
-	struct rte_port *port = &ports[port_id];
+	struct rte_port *port;
 	uint64_t offload;
 	int ret;
 
+	ret = eth_dev_info_get_print_err(port_id, &dev_info);
+	if (ret != 0)
+		return;
+
+	port = &ports[port_id];
 	if (port->port_status != RTE_PORT_STOPPED) {
 		fprintf(stderr,
 			"Error: Can't config offload when Port %d is not stopped\n",
@@ -11908,10 +11917,6 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
 		return;
 	}
 
-	ret = eth_dev_info_get_print_err(port_id, &dev_info);
-	if (ret != 0)
-		return;
-
 	if (queue_id >= dev_info.nb_tx_queues) {
 		fprintf(stderr,
 			"Error: input queue_id should be 0 ... %d\n",
-- 
2.34.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2025-04-08 15:39:06.284276766 +0800
+++ 0008-app-testpmd-fix-out-of-bound-reference-in-offload-co.patch	2025-04-08 15:39:05.886436594 +0800
@@ -1 +1 @@
-From 8f847023dd16cb6e5858756d7ec16c940ac6eee9 Mon Sep 17 00:00:00 2001
+From ee6a1cdc5a990f7b2360b9d547e702d8373bf947 Mon Sep 17 00:00:00 2001
@@ -4,0 +5,3 @@
+Cc: Xueming Li <xuemingl at nvidia.com>
+
+[ upstream commit 8f847023dd16cb6e5858756d7ec16c940ac6eee9 ]
@@ -12 +14,0 @@
-Cc: stable at dpdk.org
@@ -21 +23 @@
-index 6ca3eedb92..d4bb3ec998 100644
+index c150315eb8..d40f0fb7bb 100644
@@ -24 +26 @@
-@@ -11633,7 +11633,7 @@ cmd_rx_offload_get_configuration_parsed(
+@@ -11055,7 +11055,7 @@ cmd_rx_offload_get_configuration_parsed(
@@ -33 +35 @@
-@@ -11641,12 +11641,13 @@ cmd_rx_offload_get_configuration_parsed(
+@@ -11063,12 +11063,13 @@ cmd_rx_offload_get_configuration_parsed(
@@ -49 +51 @@
-@@ -11747,12 +11748,17 @@ static void
+@@ -11169,12 +11170,17 @@ static void
@@ -68 +70 @@
-@@ -11760,10 +11766,6 @@ config_port_rx_offload(portid_t port_id, char *name, bool on)
+@@ -11182,10 +11188,6 @@ config_port_rx_offload(portid_t port_id, char *name, bool on)
@@ -79 +81 @@
-@@ -11949,10 +11951,15 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
+@@ -11371,10 +11373,15 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
@@ -96 +98 @@
-@@ -11960,10 +11967,6 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
+@@ -11382,10 +11389,6 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
@@ -107 +109 @@
-@@ -12151,7 +12154,7 @@ cmd_tx_offload_get_configuration_parsed(
+@@ -11573,7 +11576,7 @@ cmd_tx_offload_get_configuration_parsed(
@@ -116 +118 @@
-@@ -12159,12 +12162,12 @@ cmd_tx_offload_get_configuration_parsed(
+@@ -11581,12 +11584,12 @@ cmd_tx_offload_get_configuration_parsed(
@@ -131 +133 @@
-@@ -12269,12 +12272,17 @@ static void
+@@ -11691,12 +11694,17 @@ static void
@@ -150 +152 @@
-@@ -12282,10 +12290,6 @@ config_port_tx_offload(portid_t port_id, char *name, bool on)
+@@ -11704,10 +11712,6 @@ config_port_tx_offload(portid_t port_id, char *name, bool on)
@@ -161 +163 @@
-@@ -12475,10 +12479,15 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
+@@ -11897,10 +11901,15 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
@@ -178 +180 @@
-@@ -12486,10 +12495,6 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
+@@ -11908,10 +11917,6 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,


More information about the stable mailing list