[dpdk-dev] bonding: fix segfault when primary slave set

Message ID 20170726155048.10648-1-tomaszx.kulasek@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Tomasz Kulasek July 26, 2017, 3:50 p.m. UTC
  rte_eth_bond_primary_set segfaults for invalid port. This patch moves
devices check before use of internal data.

Fixes: 4c42498d916d ("net/bonding: allow slaves to also be bonded devices")

Signed-off-by: Tomasz Kulasek <tomaszx.kulasek@intel.com>
---
 drivers/net/bonding/rte_eth_bond_api.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
  

Comments

Doherty, Declan July 26, 2017, 5:06 p.m. UTC | #1
On 26/07/2017 4:50 PM, Tomasz Kulasek wrote:
> rte_eth_bond_primary_set segfaults for invalid port. This patch moves
> devices check before use of internal data.
>
> Fixes: 4c42498d916d ("net/bonding: allow slaves to also be bonded devices")
>
> Signed-off-by: Tomasz Kulasek <tomaszx.kulasek@intel.com>
> ---
>  drivers/net/bonding/rte_eth_bond_api.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c
> index 824ab4f..de1d9e0 100644
> --- a/drivers/net/bonding/rte_eth_bond_api.c
> +++ b/drivers/net/bonding/rte_eth_bond_api.c
> @@ -514,15 +514,14 @@
>  {
>  	struct bond_dev_private *internals;
>
> -	internals =  rte_eth_devices[bonded_port_id].data->dev_private;
> -
>  	if (valid_bonded_port_id(bonded_port_id) != 0)
>  		return -1;
>
> +	internals = rte_eth_devices[bonded_port_id].data->dev_private;
> +
>  	if (valid_slave_port_id(slave_port_id, internals->mode) != 0)
>  		return -1;
>
> -
>  	internals->user_defined_primary_port = 1;
>  	internals->primary_port = slave_port_id;
>
>

Acked-by: Declan Doherty <declan.doherty@intel.com>
  
Thomas Monjalon July 30, 2017, 9:43 p.m. UTC | #2
26/07/2017 19:06, Declan Doherty:
> On 26/07/2017 4:50 PM, Tomasz Kulasek wrote:
> > rte_eth_bond_primary_set segfaults for invalid port. This patch moves
> > devices check before use of internal data.
> >
> > Fixes: 4c42498d916d ("net/bonding: allow slaves to also be bonded devices")
> >
> > Signed-off-by: Tomasz Kulasek <tomaszx.kulasek@intel.com>
> 
> Acked-by: Declan Doherty <declan.doherty@intel.com>

Please Declan, review patches from other contributors, thanks
  
Ferruh Yigit July 31, 2017, 12:49 p.m. UTC | #3
On 7/26/2017 6:06 PM, Declan Doherty wrote:
> On 26/07/2017 4:50 PM, Tomasz Kulasek wrote:
>> rte_eth_bond_primary_set segfaults for invalid port. This patch moves
>> devices check before use of internal data.
>>
>> Fixes: 4c42498d916d ("net/bonding: allow slaves to also be bonded devices")
>>
>> Signed-off-by: Tomasz Kulasek <tomaszx.kulasek@intel.com>

> Acked-by: Declan Doherty <declan.doherty@intel.com>

Applied to dpdk-next-net/master, thanks.
  

Patch

diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c
index 824ab4f..de1d9e0 100644
--- a/drivers/net/bonding/rte_eth_bond_api.c
+++ b/drivers/net/bonding/rte_eth_bond_api.c
@@ -514,15 +514,14 @@ 
 {
 	struct bond_dev_private *internals;
 
-	internals =  rte_eth_devices[bonded_port_id].data->dev_private;
-
 	if (valid_bonded_port_id(bonded_port_id) != 0)
 		return -1;
 
+	internals = rte_eth_devices[bonded_port_id].data->dev_private;
+
 	if (valid_slave_port_id(slave_port_id, internals->mode) != 0)
 		return -1;
 
-
 	internals->user_defined_primary_port = 1;
 	internals->primary_port = slave_port_id;