net/bonding: fix port ID check

Port validation should be prior to getting device data
to avoid segment fault. This patch fixed the segment fault
caused by invalid port using.

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

Signed-off-by: Junyu Jiang <junyux.jiang@intel.com>
Acked-by: Chas Williams <chas3@att.com>
This commit is contained in:
Junyu Jiang 2019-10-29 02:23:41 +00:00 committed by Ferruh Yigit
parent 2eb5dce8c0
commit 588ae95e79

View File

@ -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;