From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 7B9402B9E for ; Fri, 4 Mar 2016 18:13:35 +0100 (CET) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga103.fm.intel.com with ESMTP; 04 Mar 2016 09:13:35 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.22,536,1449561600"; d="scan'208";a="663904637" Received: from fyigit-mobl1.ger.corp.intel.com (HELO [10.237.221.54]) ([10.237.221.54]) by FMSMGA003.fm.intel.com with ESMTP; 04 Mar 2016 09:13:32 -0800 To: Bernard Iremonger , dev@dpdk.org References: <1456229580-25009-1-git-send-email-bernard.iremonger@intel.com> From: Ferruh Yigit Message-ID: <56D9C23B.8000508@intel.com> Date: Fri, 4 Mar 2016 17:13:31 +0000 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <1456229580-25009-1-git-send-email-bernard.iremonger@intel.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit Subject: Re: [dpdk-dev] [PATCH] bonding: fix crash when no slave devices X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Mar 2016 17:13:36 -0000 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 > --- > 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? 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