[dpdk-dev] net/i40e: fix param check to avoid division by 0

Message ID 1497258420-11814-1-git-send-email-wang.yong19@zte.com.cn (mailing list archive)
State Changes Requested, archived
Delegated to: Ferruh Yigit
Headers

Checks

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

Commit Message

Yong Wang June 12, 2017, 9:07 a.m. UTC
  In function i40e_vsi_config_tc_queue_mapping(), if 'enabled_tcmap' is
0, 'total_tc' might be 0. Then 'total_tc' might be used in a division
by 0 in "qpnum_per_tc = i40e_align_floor(vsi->nb_qps / total_tc)". Fix
it by adding a check to parameter 'enabled_tcmap'.

Signed-off-by: Yong Wang <wang.yong19@zte.com.cn>
---
 drivers/net/i40e/i40e_ethdev.c | 5 +++++
 1 file changed, 5 insertions(+)
  

Comments

Jingjing Wu June 20, 2017, 2:44 a.m. UTC | #1
> -----Original Message-----
> From: Yong Wang [mailto:wang.yong19@zte.com.cn]
> Sent: Monday, June 12, 2017 5:07 PM
> To: Zhang, Helin <helin.zhang@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>
> Cc: dev@dpdk.org; Yong Wang <wang.yong19@zte.com.cn>
> Subject: [PATCH] net/i40e: fix param check to avoid division by 0
> 
> In function i40e_vsi_config_tc_queue_mapping(), if 'enabled_tcmap' is
> 0, 'total_tc' might be 0. Then 'total_tc' might be used in a division
> by 0 in "qpnum_per_tc = i40e_align_floor(vsi->nb_qps / total_tc)". Fix
> it by adding a check to parameter 'enabled_tcmap'.
> 
> Signed-off-by: Yong Wang <wang.yong19@zte.com.cn>
> ---
>  drivers/net/i40e/i40e_ethdev.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
> index c18a93b..d41b213 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -4257,6 +4257,11 @@ enum i40e_status_code
>  	int i, total_tc = 0;
>  	uint16_t qpnum_per_tc, bsf, qp_idx;
> 
> +	if (enabled_tcmap == 0) {
> +		PMD_DRV_LOG(ERR, "Error! enabled tcmap shouldn't be 0");
> +		return I40E_ERR_PARAM;
> +	}
> +
>  	ret = validate_tcmap_parameter(vsi, enabled_tcmap);
>  	if (ret != I40E_SUCCESS)
>  		return ret;
> --
Thanks for the fix.

Could you add the check in func validate_tcmap_parameter?

Thanks
Jingjing
  
Yong Wang June 20, 2017, 7:48 a.m. UTC | #2
> RE: [PATCH] net/i40e: fix param check to avoid division by 0
> 
> 
> 
> > -----Original Message-----
> > From: Yong Wang [mailto:wang.yong19@zte.com.cn]
> > Sent: Monday, June 12, 2017 5:07 PM
> > To: Zhang, Helin <helin.zhang@intel.com>; Wu, Jingjing 
> <jingjing.wu@intel.com>
> > Cc: dev@dpdk.org; Yong Wang <wang.yong19@zte.com.cn>
> > Subject: [PATCH] net/i40e: fix param check to avoid division by 0
> > 
> > In function i40e_vsi_config_tc_queue_mapping(), if 'enabled_tcmap' is
> > 0, 'total_tc' might be 0. Then 'total_tc' might be used in a division
> > by 0 in "qpnum_per_tc = i40e_align_floor(vsi->nb_qps / total_tc)". Fix
> > it by adding a check to parameter 'enabled_tcmap'.
> > 
> > Signed-off-by: Yong Wang <wang.yong19@zte.com.cn>
> > ---
> >  drivers/net/i40e/i40e_ethdev.c | 5 +++++
> >  1 file changed, 5 insertions(+)
> > 
> > diff --git a/drivers/net/i40e/i40e_ethdev.c 
b/drivers/net/i40e/i40e_ethdev.c
> > index c18a93b..d41b213 100644
> > --- a/drivers/net/i40e/i40e_ethdev.c
> > +++ b/drivers/net/i40e/i40e_ethdev.c
> > @@ -4257,6 +4257,11 @@ enum i40e_status_code
> >     int i, total_tc = 0;
> >     uint16_t qpnum_per_tc, bsf, qp_idx;
> > 
> > +   if (enabled_tcmap == 0) {
> > +      PMD_DRV_LOG(ERR, "Error! enabled tcmap shouldn't be 0");
> > +      return I40E_ERR_PARAM;
> > +   }
> > +
> >     ret = validate_tcmap_parameter(vsi, enabled_tcmap);
> >     if (ret != I40E_SUCCESS)
> >        return ret;
> > --
> Thanks for the fix.
> 
> Could you add the check in func validate_tcmap_parameter?
> 
> Thanks
> Jingjing
> 
> 
  Since func validate_tcmap_parameter() was called by 3 func, if I add 
the check to func validate_tcmap_parameter(), I am not sure whether it 
will impact the other two callers who didn't meet division by 0.
  Or should I fix it by changing 'total_tc' from 0 to 1 just as func 
i40e_vsi_update_queue_mapping() does?

Thanks
Yong
  
Jingjing Wu June 23, 2017, 10:02 a.m. UTC | #3
From: wang.yong19@zte.com.cn [mailto:wang.yong19@zte.com.cn] 
Sent: Tuesday, June 20, 2017 3:48 PM
To: Wu, Jingjing <jingjing.wu@intel.com>
Cc: dev@dpdk.org; Zhang, Helin <helin.zhang@intel.com>
Subject: RE: [PATCH] net/i40e: fix param check to avoid division by 0

 
> RE: [PATCH] net/i40e: fix param check to avoid division by 0 
> 
> 
> 
> > -----Original Message-----
> > From: Yong Wang [mailto:wang.yong19@zte.com.cn]
> > Sent: Monday, June 12, 2017 5:07 PM
> > To: Zhang, Helin <helin.zhang@intel.com>; Wu, Jingjing 
> <jingjing.wu@intel.com>
> > Cc: dev@dpdk.org; Yong Wang <wang.yong19@zte.com.cn>
> > Subject: [PATCH] net/i40e: fix param check to avoid division by 0
> > 
> > In function i40e_vsi_config_tc_queue_mapping(), if 'enabled_tcmap' is
> > 0, 'total_tc' might be 0. Then 'total_tc' might be used in a division
> > by 0 in "qpnum_per_tc = i40e_align_floor(vsi->nb_qps / total_tc)". Fix
> > it by adding a check to parameter 'enabled_tcmap'.
> > 
> > Signed-off-by: Yong Wang <wang.yong19@zte.com.cn>
> > ---
> >  drivers/net/i40e/i40e_ethdev.c | 5 +++++
> >  1 file changed, 5 insertions(+)
> > 
> > diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
> > index c18a93b..d41b213 100644
> > --- a/drivers/net/i40e/i40e_ethdev.c
> > +++ b/drivers/net/i40e/i40e_ethdev.c
> > @@ -4257,6 +4257,11 @@ enum i40e_status_code
> >     int i, total_tc = 0;
> >     uint16_t qpnum_per_tc, bsf, qp_idx;
> > 
> > +   if (enabled_tcmap == 0) {
> > +      PMD_DRV_LOG(ERR, "Error! enabled tcmap shouldn't be 0");
> > +      return I40E_ERR_PARAM;
> > +   }
> > +
> >     ret = validate_tcmap_parameter(vsi, enabled_tcmap);
> >     if (ret != I40E_SUCCESS)
> >        return ret;
> > --
> Thanks for the fix.
> 
> Could you add the check in func validate_tcmap_parameter?
> 
> Thanks
> Jingjing
> 
> 
 Since func validate_tcmap_parameter() was called by 3 func, if I add 
the check to func validate_tcmap_parameter(), I am not sure whether it 
will impact the other two callers who didn't meet division by 0. 
  Or should I fix it by changing 'total_tc' from 0 to 1 just as func 
i40e_vsi_update_queue_mapping() does? 

Thanks, that would be better. Because other caller is used for default
TC map, which is 1.

Thanks
Jingjing
  

Patch

diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index c18a93b..d41b213 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -4257,6 +4257,11 @@  enum i40e_status_code
 	int i, total_tc = 0;
 	uint16_t qpnum_per_tc, bsf, qp_idx;
 
+	if (enabled_tcmap == 0) {
+		PMD_DRV_LOG(ERR, "Error! enabled tcmap shouldn't be 0");
+		return I40E_ERR_PARAM;
+	}
+
 	ret = validate_tcmap_parameter(vsi, enabled_tcmap);
 	if (ret != I40E_SUCCESS)
 		return ret;