All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiang JunyuX <junyux.jiang@intel.com>
To: dev@dpdk.org
Cc: Chas Williams <chas3@att.com>,
	Yang Qiming <qiming.yang@intel.com>,
	Jiang JunyuX <junyux.jiang@intel.com>,
	stable@dpdk.org
Subject: [dpdk-dev] [PATCH] net/bonding: fix segfault using invalid port
Date: Thu, 24 Oct 2019 20:55:51 +0000	[thread overview]
Message-ID: <20191024205551.26273-1-junyux.jiang@intel.com> (raw)

Port validation should be prior to getting dev data
to avoid segmentation fault. This patch fixed the issue.

Fixes: 6d72657ce379 ("net/bonding: add other aggregator modes")
Fixes: 112891cd27e5 ("net/bonding: add dedicated HW queues for LACP control")
Cc: stable@dpdk.org

Signed-off-by: Jiang JunyuX <junyux.jiang@intel.com>
---
 drivers/net/bonding/rte_eth_bond_8023ad.c | 32 ++++++++++++++++-------
 1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c
index 7d8da2b31..682854e39 100644
--- a/drivers/net/bonding/rte_eth_bond_8023ad.c
+++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
@@ -1387,11 +1387,12 @@ rte_eth_bond_8023ad_agg_selection_set(uint16_t port_id,
 	struct bond_dev_private *internals;
 	struct mode8023ad_private *mode4;
 
+	if (valid_bonded_port_id(port_id) != 0)
+		return -EINVAL;
+
 	bond_dev = &rte_eth_devices[port_id];
 	internals = bond_dev->data->dev_private;
 
-	if (valid_bonded_port_id(port_id) != 0)
-		return -EINVAL;
 	if (internals->mode != 4)
 		return -EINVAL;
 
@@ -1408,11 +1409,12 @@ int rte_eth_bond_8023ad_agg_selection_get(uint16_t port_id)
 	struct bond_dev_private *internals;
 	struct mode8023ad_private *mode4;
 
+	if (valid_bonded_port_id(port_id) != 0)
+		return -EINVAL;
+
 	bond_dev = &rte_eth_devices[port_id];
 	internals = bond_dev->data->dev_private;
 
-	if (valid_bonded_port_id(port_id) != 0)
-		return -EINVAL;
 	if (internals->mode != 4)
 		return -EINVAL;
 	mode4 = &internals->mode4;
@@ -1665,9 +1667,14 @@ int
 rte_eth_bond_8023ad_dedicated_queues_enable(uint16_t port)
 {
 	int retval = 0;
-	struct rte_eth_dev *dev = &rte_eth_devices[port];
-	struct bond_dev_private *internals = (struct bond_dev_private *)
-		dev->data->dev_private;
+	struct rte_eth_dev *dev;
+	struct bond_dev_private *internals;
+
+	if (valid_bonded_port_id(port) != 0)
+		return -EINVAL;
+
+	dev = &rte_eth_devices[port];
+	internals = dev->data->dev_private;
 
 	if (check_for_bonded_ethdev(dev) != 0)
 		return -1;
@@ -1689,9 +1696,14 @@ int
 rte_eth_bond_8023ad_dedicated_queues_disable(uint16_t port)
 {
 	int retval = 0;
-	struct rte_eth_dev *dev = &rte_eth_devices[port];
-	struct bond_dev_private *internals = (struct bond_dev_private *)
-		dev->data->dev_private;
+	struct rte_eth_dev *dev;
+	struct bond_dev_private *internals;
+
+	if (valid_bonded_port_id(port) != 0)
+		return -EINVAL;
+
+	dev = &rte_eth_devices[port];
+	internals = dev->data->dev_private;
 
 	if (check_for_bonded_ethdev(dev) != 0)
 		return -1;
-- 
2.17.1


             reply	other threads:[~2019-10-25  3:32 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-24 20:55 Jiang JunyuX [this message]
2019-10-28  5:42 ` [dpdk-dev] [PATCH] net/bonding: fix segfault using invalid port Yang, Qiming
2019-10-29  3:04   ` Ye Xiaolong
2019-10-29  6:15     ` Yang, Qiming
2019-10-29  6:25       ` Ye Xiaolong
2019-10-29  8:32         ` Yang, Qiming
2019-10-28 20:19 ` [dpdk-dev] [PATCH v2] " Jiang JunyuX
2019-10-28 20:48   ` [dpdk-dev] [PATCH v3] net/bonding: fix invalid port using Jiang JunyuX
2019-10-29  2:23     ` [dpdk-dev] [PATCH v4] " Jiang JunyuX
2019-10-29 15:59       ` Chas Williams
2019-10-30  8:48         ` [dpdk-dev] [dpdk-stable] " Ferruh Yigit
2019-10-30  2:24       ` [dpdk-dev] " Yang, Qiming

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191024205551.26273-1-junyux.jiang@intel.com \
    --to=junyux.jiang@intel.com \
    --cc=chas3@att.com \
    --cc=dev@dpdk.org \
    --cc=qiming.yang@intel.com \
    --cc=stable@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.