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 2E13746282 for ; Thu, 20 Feb 2025 21:44:40 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 10CA64026D; Thu, 20 Feb 2025 21:44:40 +0100 (CET) Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) by mails.dpdk.org (Postfix) with ESMTP id 0F2434026D for ; Thu, 20 Feb 2025 21:44:38 +0100 (CET) Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-220c8cf98bbso29461915ad.1 for ; Thu, 20 Feb 2025 12:44:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1740084277; x=1740689077; darn=dpdk.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=UYusXE9dpEWZcjIOQ8x3Q2vSBjCOKwR+13Cos13irXI=; b=EM2oBo91dfGuHf2YMy/V+ADxtrZaOG4CXDWFRaZs8HNot4yAAMsaYGF59JC5whKCaq 35V+ryu7sLssbjAD55RLqTPtITskLv0u/PeJFHbE54Nxgv40T38k8Od/pt93oYbe3Dgo dpmw8u6Bp7d2mNv7O7iRvWE3Ae7K7EjvE3MzQIZ6EuQpRkCauXp03cTg5IHWNMtJdBmx y0NZXe1oeGZ3vN6YwpB7l1fTrqkEzJadiH7NDUsqQQBGpmtDGCdUQSMtWrXmYmlNVhII jOSuyqU7GwrWFV633z60IWyL6AvWQ7tVbkraXrzI9jftLCQl8oxEnZ4ewRoWqi0G/YPH 9IzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740084277; x=1740689077; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=UYusXE9dpEWZcjIOQ8x3Q2vSBjCOKwR+13Cos13irXI=; b=Nx5U0Mrjp8K1uZLU2YY9r7TA43XYnvHPaBJp0H+VSInJiLQGAdcfWrBJZ3JCfWgxic i8j7gv3OMSNC/D+4+sTCgNsv2J3iJnD9ED/9yYoRiio9l53waxk5jPpba5e6/uV/bFLY b93e948fslj94EphwBw+zGck+lA+u65/KjL0Y6qfRBL0q47W5yujw/2CDaiH9pRBlu2t MP4zDv3TzQ9h6BTjzI54JbRCmWWbP09+o7N7iLlUiURwKsiWVG+1n1kEA8wyRYhAiEl1 TG8GH7/RKgw/v96FFC/x/bqCF63DidzFyIv2MHVjh/D0zEDOeFmDB0MjJhdjv5RK5+HH OkBA== X-Forwarded-Encrypted: i=1; AJvYcCVh6mJkLJOrrDXFlBtk/aHKp/msH50xUsrpMKm8cQtjrmRfgLP2H2zzWKtl3bWr/SiTaM5iu+g=@dpdk.org X-Gm-Message-State: AOJu0YwLP8OJMj6cNU+Wpd7wsClP7B56lHWOXGHwBwnEgvmec6zGERnK Vrtc37Xsl3S0DMe67IaRLKyaHdOyORKhM+R6ximrNR4RbP3k8BoqM7zqQcN1tZQ= X-Gm-Gg: ASbGncu08OZlv2ifYlmtEx0Ap1gbgU6oKvNvTyZnMx3ZCdD+48WEbaWDGeMk8mM3g+9 5M/ELmwQYHRbq0h6PBEt5ko557Jej4uwd48iDBWHPiaKud0MkmW34ErtEkluloPJ8lnpmXD+sQi 3zyf8wHhzcXCxv80SojX+ktt+KKRgtIi6FVmOhAwxlq23XDablfFB6hgfPrtHZb02QoeLTGRDAy 5E+o4QDQ8e7GY7aM213XdrSElYjUSvtjfoowrVMi4AndRf/R008hlsZbZpQq68v7VV4DwpNd+jQ 22Tjc2P/bbh3HQnw+SeutzUyeLuxNrJFldV5sCpMf0O0PYYe38AktPVmdaRekkMqxe38 X-Google-Smtp-Source: AGHT+IGqUSfc78qu+rV2Ezcs1dwvQi/rY9w2UUVaHDwclm4WVYh1tX1xvkddJOL8KAgTyyAiRFP9Ww== X-Received: by 2002:a17:902:cecc:b0:210:f706:dc4b with SMTP id d9443c01a7336-221a0ed71c5mr1674735ad.13.1740084277032; Thu, 20 Feb 2025 12:44:37 -0800 (PST) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-220d5364385sm125182195ad.63.2025.02.20.12.44.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Feb 2025 12:44:36 -0800 (PST) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , stable@dpdk.org, Aman Singh , Jingjing Wu , Wei Dai Subject: [PATCH] app/testpmd: fix out-of-bound reference in offload config Date: Thu, 20 Feb 2025 12:44:26 -0800 Message-ID: <20250220204427.213965-1-stephen@networkplumber.org> X-Mailer: git-send-email 2.47.2 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 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") Cc: stable@dpdk.org Signed-off-by: Stephen Hemminger --- 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 86d763b66a..d059b65003 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -11627,7 +11627,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; @@ -11635,12 +11635,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); @@ -11741,12 +11742,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", @@ -11754,10 +11760,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 { @@ -11943,10 +11945,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", @@ -11954,10 +11961,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", @@ -12145,7 +12148,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; @@ -12153,12 +12156,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); @@ -12263,12 +12266,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", @@ -12276,10 +12284,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 { @@ -12469,10 +12473,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", @@ -12480,10 +12489,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