Hi Ferruh, > -----Original Message----- > From: Yigit, Ferruh > Sent: Friday, March 4, 2016 5:14 PM > To: Iremonger, Bernard <bernard.iremonger at intel.com>; dev at dpdk.org > Subject: Re: [dpdk-dev] [PATCH] bonding: fix crash when no slave devices > > On 2/23/2016 12:13 PM, Bernard Iremonger wrote: > > If a bonded device is created when there are no slave devices there is > > loop in bond_ethdev_promiscous_enable() which results in a > > segmentation fault. > > I have applied a similar fix to bond_ethdev_promiscous_disable() where > > a similar loop could occur. > > > > Fixes: 2efb58cbab6e ("bond: new link bonding library") > > Signed-off-by: Bernard Iremonger <bernard.iremonger at intel.com> > > --- > > drivers/net/bonding/rte_eth_bond_pmd.c | 6 ++++-- > > 1 file changed, 4 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c > > b/drivers/net/bonding/rte_eth_bond_pmd.c > > index b63c886..78972fc 100644 > > --- a/drivers/net/bonding/rte_eth_bond_pmd.c > > +++ b/drivers/net/bonding/rte_eth_bond_pmd.c > > @@ -1870,7 +1870,8 @@ bond_ethdev_promiscuous_enable(struct > rte_eth_dev *eth_dev) > > case BONDING_MODE_TLB: > > case BONDING_MODE_ALB: > > default: > > - rte_eth_promiscuous_enable(internals- > >current_primary_port); > > + if (internals->slave_count > 0) > > + rte_eth_promiscuous_enable(internals- > >current_primary_port); > > } > > } > > > > @@ -1898,7 +1899,8 @@ bond_ethdev_promiscuous_disable(struct > rte_eth_dev *dev) > > case BONDING_MODE_TLB: > > case BONDING_MODE_ALB: > > default: > > - rte_eth_promiscuous_disable(internals- > >current_primary_port); > > + if (internals->slave_count > 0) > > + rte_eth_promiscuous_disable(internals- > >current_primary_port); > > } > > } > > > > > Hi Bernard, > > The reason of this crash is when there is no slave, the value of > current_primary_port is 0, which is valid port_id, is this correct?
Yes. > Does it make sense, instead of slave_count check, to make default > current_primary_port value a non valid port_id, like -1, so > is_valid_port() check catches it to prevents crash? For this and any other > cases. > > Thanks, > Ferruh I will try initializing current_primary_port to -1 and see if this helps. Thanks for reviewing. Regards, Bernard.