From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 2B428A04C0;
	Fri, 25 Sep 2020 14:47:46 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id D39001C22D;
	Fri, 25 Sep 2020 14:47:45 +0200 (CEST)
Received: from incedge.chinasoftinc.com (unknown [114.113.233.8])
 by dpdk.org (Postfix) with ESMTP id E27E11C227
 for <dev@dpdk.org>; Fri, 25 Sep 2020 14:47:43 +0200 (CEST)
X-ASG-Debug-ID: 1601038061-149d11049ad1bf0001-TfluYd
Received: from mail.chinasoftinc.com ([10.168.0.51]) by
 incedge.chinasoftinc.com with ESMTP id 54FiU58AKejCL9m5 (version=TLSv1
 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO);
 Fri, 25 Sep 2020 20:47:41 +0800 (CST)
X-Barracuda-Envelope-From: huwei013@chinasoftinc.com
X-Barracuda-RBL-Trusted-Forwarder: 10.168.0.51
X-ASG-Whitelist: Client
Received: from localhost.localdomain (65.49.108.226) by INCCAS001.ito.icss
 (10.168.0.60) with Microsoft SMTP Server id 14.3.487.0; Fri, 25 Sep 2020
 20:47:40 +0800
From: "Wei Hu (Xavier)" <huwei013@chinasoftinc.com>
X-Barracuda-RBL-Trusted-Forwarder: 10.168.0.60
To: <dev@dpdk.org>
CC: <xavier.huwei@huawei.com>
Date: Fri, 25 Sep 2020 20:47:14 +0800
X-ASG-Orig-Subj: [PATCH v4 1/6] app/testpmd: fix missing verification of port
 id
Message-ID: <20200925124719.26001-2-huwei013@chinasoftinc.com>
X-Mailer: git-send-email 2.9.5
In-Reply-To: <20200925124719.26001-1-huwei013@chinasoftinc.com>
References: <20200818120254.72792-1-huwei013@chinasoftinc.com>
 <20200925124719.26001-1-huwei013@chinasoftinc.com>
MIME-Version: 1.0
Content-Type: text/plain
X-Originating-IP: [65.49.108.226]
X-Barracuda-Connect: UNKNOWN[10.168.0.51]
X-Barracuda-Start-Time: 1601038061
X-Barracuda-Encrypted: ECDHE-RSA-AES256-SHA
X-Barracuda-URL: https://incspam.chinasofti.com:443/cgi-mod/mark.cgi
X-Virus-Scanned: by bsmtpd at chinasoftinc.com
X-Barracuda-Scan-Msg-Size: 2960
Subject: [dpdk-dev] [PATCH v4 1/6] app/testpmd: fix missing verification of
	port id
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

From: Chengchang Tang <tangchengchang@huawei.com>

To set Tx vlan offloads, it is required to stop port firstly. But before
checking whether the port is stopped, the port id entered by the user
is not checked for validity. When the port id is illegal, it would lead
to a segmentation fault since it attempts to access a member of
non-existent port.

This patch adds verification of port id in tx vlan offloads and remove
duplicated check.

Fixes: 597f9fafe13b ("app/testpmd: convert to new Tx offloads API")
Cc: stable@dpdk.org

Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
Signed-off-by: Wei Hu (Xavier) <xavier.huwei@huawei.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
 app/test-pmd/cmdline.c | 9 +++++++++
 app/test-pmd/config.c  | 6 ------
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 5f93409..43b7c2f 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -4291,6 +4291,9 @@ cmd_tx_vlan_set_parsed(void *parsed_result,
 {
 	struct cmd_tx_vlan_set_result *res = parsed_result;
 
+	if (port_id_is_invalid(res->port_id, ENABLED_WARN))
+		return;
+
 	if (!port_is_stopped(res->port_id)) {
 		printf("Please stop port %d first\n", res->port_id);
 		return;
@@ -4345,6 +4348,9 @@ cmd_tx_vlan_set_qinq_parsed(void *parsed_result,
 {
 	struct cmd_tx_vlan_set_qinq_result *res = parsed_result;
 
+	if (port_id_is_invalid(res->port_id, ENABLED_WARN))
+		return;
+
 	if (!port_is_stopped(res->port_id)) {
 		printf("Please stop port %d first\n", res->port_id);
 		return;
@@ -4458,6 +4464,9 @@ cmd_tx_vlan_reset_parsed(void *parsed_result,
 {
 	struct cmd_tx_vlan_reset_result *res = parsed_result;
 
+	if (port_id_is_invalid(res->port_id, ENABLED_WARN))
+		return;
+
 	if (!port_is_stopped(res->port_id)) {
 		printf("Please stop port %d first\n", res->port_id);
 		return;
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index 2d9a456..2ee40df 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -3547,8 +3547,6 @@ tx_vlan_set(portid_t port_id, uint16_t vlan_id)
 	struct rte_eth_dev_info dev_info;
 	int ret;
 
-	if (port_id_is_invalid(port_id, ENABLED_WARN))
-		return;
 	if (vlan_id_is_invalid(vlan_id))
 		return;
 
@@ -3579,8 +3577,6 @@ tx_qinq_set(portid_t port_id, uint16_t vlan_id, uint16_t vlan_id_outer)
 	struct rte_eth_dev_info dev_info;
 	int ret;
 
-	if (port_id_is_invalid(port_id, ENABLED_WARN))
-		return;
 	if (vlan_id_is_invalid(vlan_id))
 		return;
 	if (vlan_id_is_invalid(vlan_id_outer))
@@ -3606,8 +3602,6 @@ tx_qinq_set(portid_t port_id, uint16_t vlan_id, uint16_t vlan_id_outer)
 void
 tx_vlan_reset(portid_t port_id)
 {
-	if (port_id_is_invalid(port_id, ENABLED_WARN))
-		return;
 	ports[port_id].dev_conf.txmode.offloads &=
 				~(DEV_TX_OFFLOAD_VLAN_INSERT |
 				  DEV_TX_OFFLOAD_QINQ_INSERT);
-- 
2.9.5