From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0991246364 for ; Fri, 7 Mar 2025 13:24:52 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 021454029E; Fri, 7 Mar 2025 13:24:52 +0100 (CET) Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) by mails.dpdk.org (Postfix) with ESMTP id 9F8D94029E for ; Fri, 7 Mar 2025 13:24:50 +0100 (CET) Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-43bc63876f1so15117365e9.3 for ; Fri, 07 Mar 2025 04:24:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741350290; x=1741955090; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kPJMj3Kue972ENDnAxhQ1RtAjc7QMvrWQdsDmWT19m4=; b=F2a/Du1coTzp6E6m8PINQGtJ9fw3BbscnQ2DHj407dmcwW03YLwaKI8t9w73hpaVir YIH+z2Gq1edJtzqbcKaISULpY1SI2DN/MLdofoZBUCneVbqz1meA1QYV9nT8teTqY8be x2xiYdwNN9YeU3aW1wuvt8svSCnHAcwmBqRW+P48XnfVxLLOM+e/sRG49fjwUNyEjaEB LpONVT+S4VBv7wDcG7KaP5zi3ioIM6jCoG95GfHVFwts3/s55r5odBtdLB58nEVrcLWU yVTMWLV8A/yL2M1RHrLMztIp3f9uaoe5MQ4qrgfd3nQ09HUTL5MMt0y6JogtsOB3VtmC eLLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741350290; x=1741955090; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kPJMj3Kue972ENDnAxhQ1RtAjc7QMvrWQdsDmWT19m4=; b=J9KD0xfnd/hht9jiaGoBwhYwD5uTCvj5/OKlx6Ytj/6/4amCwR1KjocDFTr9bCRJ94 jiXmkoR7NthtXuknK10LFlbhUCbrmJ9FckxJtW75VhEmhRS5+h2vc7NVJwgWe41WCpVZ wfwHV62GQz/jGUjyMQoVF5ygZStbkX9ot/mQyU1Mxr6IR5bEdrrOlqO9gMwiCWvyfX78 rbU0yFWuJ8PhUKGMeV/WkAwLj4SM4LszL4CxG8LeYnFiMRPn8/laywJjU3cbQTAg11y0 W8PkQ+Q1hJatTv/clqHGB4RWvyM+uKnKeAzOWViA/Lg9fbC5Swt7/J75he8/BZH3Bedv 8iaA== X-Forwarded-Encrypted: i=1; AJvYcCU2s9thR7+BGwjXwLO4VRGriRWizDkToUyKVb7gg+Ogq9PHF7pCBJSzc2CTyKnsQsZo/rOXKDQ=@dpdk.org X-Gm-Message-State: AOJu0YziFOl7vdnO3mR3eIfPi0fpiiH2BKg7gcOUqFRO55SDjBBspV5s DR9dkxK6pPXYgha78aPJAjTPDTbd8ZnG2C6cc6hthrRieqoOJVj3wlOmoO7M X-Gm-Gg: ASbGncvnNf6gmhN1neLDMlV7SDtaRZZKGp9eewzN8NnRjVxpwTnpf1vjsJX3BmlLjbj 08Cn5WjIAESEbGiVG00Rj5ki1SsH77u8cTZfWti4uKs1gceRee7vXvkqfAFJXSfuRQDX7Sh36hF gBBYGz83MTQuCbPXF3iTUyvvPboZRRy/t1b2uCa9DDO6s8VRuejjNzu7ux9VQ2CpjXqxhfP3s66 wgGW/57PZFgTd/dFJ4XX5FoF+/7whxWdlZGKzdE56stLis0spl7YLTCld9o0+n6h63/XM3kE79m 4ks4QDSDgIjkBVlUkzop+ZgSAdtLiZhdt+wqo3VbhYd6tUtz1M4= X-Google-Smtp-Source: AGHT+IFYiWek0QIPDZWKNqw+DTaDibMG7kMY7vy2wiY1RTask3BOfIycz3kHHL8Uq0xJjMFciGqKrA== X-Received: by 2002:a05:6000:4109:b0:390:fb04:f930 with SMTP id ffacd0b85a97d-39132dbb560mr1853815f8f.34.1741350290038; Fri, 07 Mar 2025 04:24:50 -0800 (PST) Received: from localhost ([2a01:4b00:d036:ae00:ff31:f049:bd38:f7cf]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-43bd4291ffbsm79626295e9.15.2025.03.07.04.24.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 04:24:49 -0800 (PST) From: luca.boccassi@gmail.com To: Stephen Hemminger Cc: Huisong Li , dpdk stable Subject: patch 'app/testpmd: fix out-of-bound reference in offload config' has been queued to stable release 22.11.8 Date: Fri, 7 Mar 2025 12:24:05 +0000 Message-ID: <20250307122431.1415551-6-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250307122431.1415551-1-luca.boccassi@gmail.com> References: <20250217170456.1068278-79-luca.boccassi@gmail.com> <20250307122431.1415551-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Hi, FYI, your patch has been queued to stable release 22.11.8 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 03/09/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://github.com/bluca/dpdk-stable This queued commit can be viewed at: https://github.com/bluca/dpdk-stable/commit/6737b184aac935441fad1750704cd8e4eb7eed29 Thanks. Luca Boccassi --- >From 6737b184aac935441fad1750704cd8e4eb7eed29 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Thu, 20 Feb 2025 12:44:26 -0800 Subject: [PATCH] app/testpmd: fix out-of-bound reference in offload config [ 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 Acked-by: Huisong Li --- app/test-pmd/cmdline.c | 59 ++++++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 90b501863c..b955803123 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -10921,7 +10921,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; @@ -10929,12 +10929,13 @@ cmd_rx_offload_get_configuration_parsed( int q; int ret; + 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); - ret = eth_dev_conf_get_print_err(port_id, &dev_conf); - if (ret != 0) - return; - port_offloads = dev_conf.rxmode.offloads; printf(" Port :"); print_rx_offloads(port_offloads); @@ -11039,12 +11040,17 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result, struct cmd_config_per_port_rx_offload_result *res = parsed_result; portid_t port_id = res->port_id; struct rte_eth_dev_info dev_info; - struct rte_port *port = &ports[port_id]; + struct rte_port *port; uint64_t single_offload; uint16_t nb_rx_queues; 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", @@ -11147,10 +11153,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 single_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", @@ -11158,10 +11169,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", @@ -11340,7 +11347,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; @@ -11348,12 +11355,12 @@ cmd_tx_offload_get_configuration_parsed( int q; int ret; + 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); - - ret = eth_dev_conf_get_print_err(port_id, &dev_conf); - if (ret != 0) - return; - + port = &ports[port_id]; port_offloads = dev_conf.txmode.offloads; printf(" Port :"); print_tx_offloads(port_offloads); @@ -11462,12 +11469,17 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result, struct cmd_config_per_port_tx_offload_result *res = parsed_result; portid_t port_id = res->port_id; struct rte_eth_dev_info dev_info; - struct rte_port *port = &ports[port_id]; + struct rte_port *port; uint64_t single_offload; uint16_t nb_tx_queues; 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", @@ -11573,10 +11585,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 single_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", @@ -11584,10 +11601,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.47.2 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2025-03-07 12:23:38.254811139 +0000 +++ 0006-app-testpmd-fix-out-of-bound-reference-in-offload-co.patch 2025-03-07 12:23:37.998838059 +0000 @@ -1 +1 @@ -From 8f847023dd16cb6e5858756d7ec16c940ac6eee9 Mon Sep 17 00:00:00 2001 +From 6737b184aac935441fad1750704cd8e4eb7eed29 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 8f847023dd16cb6e5858756d7ec16c940ac6eee9 ] + @@ -12 +13,0 @@ -Cc: stable@dpdk.org @@ -17,2 +18,2 @@ - app/test-pmd/cmdline.c | 67 +++++++++++++++++++++++------------------- - 1 file changed, 36 insertions(+), 31 deletions(-) + app/test-pmd/cmdline.c | 59 ++++++++++++++++++++++++++---------------- + 1 file changed, 36 insertions(+), 23 deletions(-) @@ -21 +22 @@ -index 6ca3eedb92..d4bb3ec998 100644 +index 90b501863c..b955803123 100644 @@ -24 +25 @@ -@@ -11633,7 +11633,7 @@ cmd_rx_offload_get_configuration_parsed( +@@ -10921,7 +10921,7 @@ cmd_rx_offload_get_configuration_parsed( @@ -33 +34 @@ -@@ -11641,12 +11641,13 @@ cmd_rx_offload_get_configuration_parsed( +@@ -10929,12 +10929,13 @@ cmd_rx_offload_get_configuration_parsed( @@ -51,3 +52,3 @@ -@@ -11747,12 +11748,17 @@ static void - config_port_rx_offload(portid_t port_id, char *name, bool on) - { +@@ -11039,12 +11040,17 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result, + struct cmd_config_per_port_rx_offload_result *res = parsed_result; + portid_t port_id = res->port_id; @@ -56,0 +58 @@ + uint64_t single_offload; @@ -58 +59,0 @@ - uint64_t offload; @@ -70,12 +71 @@ -@@ -11760,10 +11766,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 { -@@ -11949,10 +11951,15 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result, +@@ -11147,10 +11153,15 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result, @@ -87 +77 @@ - uint64_t offload; + uint64_t single_offload; @@ -98 +88 @@ -@@ -11960,10 +11967,6 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result, +@@ -11158,10 +11169,6 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result, @@ -109 +99 @@ -@@ -12151,7 +12154,7 @@ cmd_tx_offload_get_configuration_parsed( +@@ -11340,7 +11347,7 @@ cmd_tx_offload_get_configuration_parsed( @@ -118 +108 @@ -@@ -12159,12 +12162,12 @@ cmd_tx_offload_get_configuration_parsed( +@@ -11348,12 +11355,12 @@ cmd_tx_offload_get_configuration_parsed( @@ -136,3 +126,3 @@ -@@ -12269,12 +12272,17 @@ static void - config_port_tx_offload(portid_t port_id, char *name, bool on) - { +@@ -11462,12 +11469,17 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result, + struct cmd_config_per_port_tx_offload_result *res = parsed_result; + portid_t port_id = res->port_id; @@ -141,0 +132 @@ + uint64_t single_offload; @@ -143 +133,0 @@ - uint64_t offload; @@ -155,12 +145 @@ -@@ -12282,10 +12290,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 { -@@ -12475,10 +12479,15 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result, +@@ -11573,10 +11585,15 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result, @@ -172 +151 @@ - uint64_t offload; + uint64_t single_offload; @@ -183 +162 @@ -@@ -12486,10 +12495,6 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result, +@@ -11584,10 +11601,6 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,