i40e: Fix virtchnl_queue_select bitmap validation
diff mbox series

Message ID 20191113192817.531297-1-jeffrey.t.kirsher@intel.com
State Under Review
Delegated to: Jeff Kirsher
Headers show
Series
  • i40e: Fix virtchnl_queue_select bitmap validation
Related show

Commit Message

Jeff Kirsher Nov. 13, 2019, 7:28 p.m. UTC
From: Brett Creeley <brett.creeley@intel.com>

Currently in i40e_vc_disable_queues_msg() we are incorrectly
validating the virtchnl queue select bitmaps. The
virtchnl_queue_select rx_queues and tx_queue bitmap is being
compared against ICE_MAX_VF_QUEUES, but the problem is that
these bitmaps can have a value greater than I40E_MAX_VF_QUEUES.
Fix this by comparing the bitmaps against BIT(I40E_MAX_VF_QUEUES).

Also, add the function i40e_vc_validate_vqs_bitmaps() that checks to see
if both virtchnl_queue_select bitmaps are empty along with checking that
the bitmaps only have valid bits set. This function can then be used in
both the queue enable and disable flows.

Suggested-by: Arkady Gilinksky <arkady.gilinsky@harmonicinc.com>
Signed-off-by: Brett Creeley <brett.creeley@intel.com>
---
 .../ethernet/intel/i40e/i40e_virtchnl_pf.c    | 22 +++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

Comments

Bowers, AndrewX Nov. 15, 2019, 1:17 a.m. UTC | #1
Comments inline

> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces@osuosl.org] On
> Behalf Of Jeff Kirsher
> Sent: Wednesday, November 13, 2019 11:28 AM
> To: intel-wired-lan@lists.osuosl.org
> Cc: Creeley, Brett <brett.creeley@intel.com>; Arkady Gilinksky
> <arkady.gilinsky@harmonicinc.com>
> Subject: [Intel-wired-lan] [PATCH] i40e: Fix virtchnl_queue_select bitmap
> validation
> 
> From: Brett Creeley <brett.creeley@intel.com>
> 
> Currently in i40e_vc_disable_queues_msg() we are incorrectly validating the
> virtchnl queue select bitmaps. The virtchnl_queue_select rx_queues and
> tx_queue bitmap is being compared against ICE_MAX_VF_QUEUES, but the
> problem is that these bitmaps can have a value greater than
> I40E_MAX_VF_QUEUES.
> Fix this by comparing the bitmaps against BIT(I40E_MAX_VF_QUEUES).
> 
> Also, add the function i40e_vc_validate_vqs_bitmaps() that checks to see if
> both virtchnl_queue_select bitmaps are empty along with checking that the
> bitmaps only have valid bits set. This function can then be used in both the
> queue enable and disable flows.
> 
> Suggested-by: Arkady Gilinksky <arkady.gilinsky@harmonicinc.com>
> Signed-off-by: Brett Creeley <brett.creeley@intel.com>
> ---
>  .../ethernet/intel/i40e/i40e_virtchnl_pf.c    | 22 +++++++++++++++----
>  1 file changed, 18 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
> b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
> index 6d75a35acb67..275702d8cf7a 100644
> --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
> +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
> @@ -2321,6 +2321,22 @@ static int i40e_ctrl_vf_rx_rings(struct i40e_vsi *vsi,
> unsigned long q_map,
>  	return ret;
>  }
> 
> +/**
> + * i40e_vc_validate_vqs_bitmaps - validate Rx/Tx queue bitmaps from
> +VIRTHCHNL
> + * @vqs: virtchnl_queue_select structure containing bitmaps to validate
> + *
> + * Returns true if validation was successful, else false.
> + */
> +static bool i40e_vc_validate_vqs_bitmaps(struct virtchnl_queue_select
> +*vqs) {
> +	if ((!vqs->rx_queues && !vqs->tx_queues) ||
> +	    vqs->rx_queue >= BIT(I40E_MAX_VF_QUEUES) ||
> +	    vqs->tx_queue >= BIT(I40E_MAX_VF_QUEUES))

Should these not be "rx_queues" and "tx_queues"? 

> +	       return false;
> +
> +	return true;
> +}
> +
>  /**
>   * i40e_vc_enable_queues_msg
>   * @vf: pointer to the VF info
> @@ -2346,7 +2362,7 @@ static int i40e_vc_enable_queues_msg(struct
> i40e_vf *vf, u8 *msg)
>  		goto error_param;
>  	}
> 
> -	if ((0 == vqs->rx_queues) && (0 == vqs->tx_queues)) {
> +	if (i40e_vc_validate_vqs_bitmaps(vqs)) {
>  		aq_ret = I40E_ERR_PARAM;
>  		goto error_param;
>  	}
> @@ -2408,9 +2424,7 @@ static int i40e_vc_disable_queues_msg(struct
> i40e_vf *vf, u8 *msg)
>  		goto error_param;
>  	}
> 
> -	if ((vqs->rx_queues == 0 && vqs->tx_queues == 0) ||
> -	    vqs->rx_queues > I40E_MAX_VF_QUEUES ||
> -	    vqs->tx_queues > I40E_MAX_VF_QUEUES) {
> +	if (i40e_vc_validate_vqs_bitmaps(vqs)) {
>  		aq_ret = I40E_ERR_PARAM;
>  		goto error_param;
>  	}
> --
> 2.23.0
> 
> _______________________________________________
> Intel-wired-lan mailing list
> Intel-wired-lan@osuosl.org
> https://lists.osuosl.org/mailman/listinfo/intel-wired-lan
Brown, Aaron F Nov. 15, 2019, 11:52 p.m. UTC | #2
This patch is causing a compile error for me.  If I pop revert it my compile error goes away:
---------------------------------------------------------------
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c: In function 'i40e_vc_validate_vqs_bitmaps':
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c:2333:9: error: 'struct virtchnl_queue_select' has no member named 'rx_queue'
      vqs->rx_queue >= BIT(I40E_MAX_VF_QUEUES) ||
         ^
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c:2334:9: error: 'struct virtchnl_queue_select' has no member named 'tx_queue'
      vqs->tx_queue >= BIT(I40E_MAX_VF_QUEUES))
         ^
make[6]: *** [drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.o] Error 1
make[6]: *** Waiting for unfinished jobs....
make[5]: *** [drivers/net/ethernet/intel/i40e] Error 2
make[4]: *** [drivers/net/ethernet/intel] Error 2
make[4]: *** Waiting for unfinished jobs....
make[3]: *** [drivers/net/ethernet] Error 2
make[2]: *** [drivers/net] Error 2
make[1]: *** [drivers] Error 2
make: *** [sub-make] Error 2

> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of
> Bowers, AndrewX
> Sent: Thursday, November 14, 2019 5:17 PM
> To: Kirsher, Jeffrey T <jeffrey.t.kirsher@intel.com>; intel-wired-
> lan@lists.osuosl.org
> Cc: Creeley, Brett <brett.creeley@intel.com>; Arkady Gilinksky
> <arkady.gilinsky@harmonicinc.com>
> Subject: Re: [Intel-wired-lan] [PATCH] i40e: Fix virtchnl_queue_select bitmap
> validation
> 
> Comments inline
> 
> > -----Original Message-----
> > From: Intel-wired-lan [mailto:intel-wired-lan-bounces@osuosl.org] On
> > Behalf Of Jeff Kirsher
> > Sent: Wednesday, November 13, 2019 11:28 AM
> > To: intel-wired-lan@lists.osuosl.org
> > Cc: Creeley, Brett <brett.creeley@intel.com>; Arkady Gilinksky
> > <arkady.gilinsky@harmonicinc.com>
> > Subject: [Intel-wired-lan] [PATCH] i40e: Fix virtchnl_queue_select bitmap
> > validation
> >
> > From: Brett Creeley <brett.creeley@intel.com>
> >
> > Currently in i40e_vc_disable_queues_msg() we are incorrectly validating
> the
> > virtchnl queue select bitmaps. The virtchnl_queue_select rx_queues and
> > tx_queue bitmap is being compared against ICE_MAX_VF_QUEUES, but
> the
> > problem is that these bitmaps can have a value greater than
> > I40E_MAX_VF_QUEUES.
> > Fix this by comparing the bitmaps against BIT(I40E_MAX_VF_QUEUES).
> >
> > Also, add the function i40e_vc_validate_vqs_bitmaps() that checks to see if
> > both virtchnl_queue_select bitmaps are empty along with checking that
> the
> > bitmaps only have valid bits set. This function can then be used in both the
> > queue enable and disable flows.
> >
> > Suggested-by: Arkady Gilinksky <arkady.gilinsky@harmonicinc.com>
> > Signed-off-by: Brett Creeley <brett.creeley@intel.com>
> > ---
> >  .../ethernet/intel/i40e/i40e_virtchnl_pf.c    | 22 +++++++++++++++----
> >  1 file changed, 18 insertions(+), 4 deletions(-)
> >
<snip>
Bowers, AndrewX Nov. 16, 2019, 12:08 a.m. UTC | #3
I was getting the same thing. Taking the compiler's suggestion and changing _queue to _queues and it compiles but nobody responded to my comments. 

> -----Original Message-----
> From: Brown, Aaron F
> Sent: Friday, November 15, 2019 3:53 PM
> To: Bowers, AndrewX <andrewx.bowers@intel.com>; Kirsher, Jeffrey T
> <jeffrey.t.kirsher@intel.com>; intel-wired-lan@lists.osuosl.org
> Cc: Creeley, Brett <brett.creeley@intel.com>; Arkady Gilinksky
> <arkady.gilinsky@harmonicinc.com>
> Subject: RE: [Intel-wired-lan] [PATCH] i40e: Fix virtchnl_queue_select bitmap
> validation
> 
> This patch is causing a compile error for me.  If I pop revert it my compile
> error goes away:
> ---------------------------------------------------------------
> drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c: In function
> 'i40e_vc_validate_vqs_bitmaps':
> drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c:2333:9: error: 'struct
> virtchnl_queue_select' has no member named 'rx_queue'
>       vqs->rx_queue >= BIT(I40E_MAX_VF_QUEUES) ||
>          ^
> drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c:2334:9: error: 'struct
> virtchnl_queue_select' has no member named 'tx_queue'
>       vqs->tx_queue >= BIT(I40E_MAX_VF_QUEUES))
>          ^
> make[6]: *** [drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.o] Error 1
> make[6]: *** Waiting for unfinished jobs....
> make[5]: *** [drivers/net/ethernet/intel/i40e] Error 2
> make[4]: *** [drivers/net/ethernet/intel] Error 2
> make[4]: *** Waiting for unfinished jobs....
> make[3]: *** [drivers/net/ethernet] Error 2
> make[2]: *** [drivers/net] Error 2
> make[1]: *** [drivers] Error 2
> make: *** [sub-make] Error 2
> 
> > -----Original Message-----
> > From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf
> > Of Bowers, AndrewX
> > Sent: Thursday, November 14, 2019 5:17 PM
> > To: Kirsher, Jeffrey T <jeffrey.t.kirsher@intel.com>; intel-wired-
> > lan@lists.osuosl.org
> > Cc: Creeley, Brett <brett.creeley@intel.com>; Arkady Gilinksky
> > <arkady.gilinsky@harmonicinc.com>
> > Subject: Re: [Intel-wired-lan] [PATCH] i40e: Fix virtchnl_queue_select
> > bitmap validation
> >
> > Comments inline
> >
> > > -----Original Message-----
> > > From: Intel-wired-lan [mailto:intel-wired-lan-bounces@osuosl.org] On
> > > Behalf Of Jeff Kirsher
> > > Sent: Wednesday, November 13, 2019 11:28 AM
> > > To: intel-wired-lan@lists.osuosl.org
> > > Cc: Creeley, Brett <brett.creeley@intel.com>; Arkady Gilinksky
> > > <arkady.gilinsky@harmonicinc.com>
> > > Subject: [Intel-wired-lan] [PATCH] i40e: Fix virtchnl_queue_select
> > > bitmap validation
> > >
> > > From: Brett Creeley <brett.creeley@intel.com>
> > >
> > > Currently in i40e_vc_disable_queues_msg() we are incorrectly
> > > validating
> > the
> > > virtchnl queue select bitmaps. The virtchnl_queue_select rx_queues
> > > and tx_queue bitmap is being compared against ICE_MAX_VF_QUEUES,
> but
> > the
> > > problem is that these bitmaps can have a value greater than
> > > I40E_MAX_VF_QUEUES.
> > > Fix this by comparing the bitmaps against BIT(I40E_MAX_VF_QUEUES).
> > >
> > > Also, add the function i40e_vc_validate_vqs_bitmaps() that checks to
> > > see if both virtchnl_queue_select bitmaps are empty along with
> > > checking that
> > the
> > > bitmaps only have valid bits set. This function can then be used in
> > > both the queue enable and disable flows.
> > >
> > > Suggested-by: Arkady Gilinksky <arkady.gilinsky@harmonicinc.com>
> > > Signed-off-by: Brett Creeley <brett.creeley@intel.com>
> > > ---
> > >  .../ethernet/intel/i40e/i40e_virtchnl_pf.c    | 22 +++++++++++++++----
> > >  1 file changed, 18 insertions(+), 4 deletions(-)
> > >
> <snip>
Brandeburg, Jesse Nov. 16, 2019, 2:43 a.m. UTC | #4
Brett is out on vacation but you’re right Andrew, the code should use plural variables. 

--
Jesse Brandeburg


> On Nov 15, 2019, at 16:08, Bowers, AndrewX <andrewx.bowers@intel.com> wrote:
> 
> I was getting the same thing. Taking the compiler's suggestion and changing _queue to _queues and it compiles but nobody responded to my comments. 
> 
>> -----Original Message-----
>> From: Brown, Aaron F
>> Sent: Friday, November 15, 2019 3:53 PM
>> To: Bowers, AndrewX <andrewx.bowers@intel.com>; Kirsher, Jeffrey T
>> <jeffrey.t.kirsher@intel.com>; intel-wired-lan@lists.osuosl.org
>> Cc: Creeley, Brett <brett.creeley@intel.com>; Arkady Gilinksky
>> <arkady.gilinsky@harmonicinc.com>
>> Subject: RE: [Intel-wired-lan] [PATCH] i40e: Fix virtchnl_queue_select bitmap
>> validation
>> 
>> This patch is causing a compile error for me.  If I pop revert it my compile
>> error goes away:
>> ---------------------------------------------------------------
>> drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c: In function
>> 'i40e_vc_validate_vqs_bitmaps':
>> drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c:2333:9: error: 'struct
>> virtchnl_queue_select' has no member named 'rx_queue'
>>      vqs->rx_queue >= BIT(I40E_MAX_VF_QUEUES) ||
>>         ^
>> drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c:2334:9: error: 'struct
>> virtchnl_queue_select' has no member named 'tx_queue'
>>      vqs->tx_queue >= BIT(I40E_MAX_VF_QUEUES))
>>         ^
>> make[6]: *** [drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.o] Error 1
>> make[6]: *** Waiting for unfinished jobs....
>> make[5]: *** [drivers/net/ethernet/intel/i40e] Error 2
>> make[4]: *** [drivers/net/ethernet/intel] Error 2
>> make[4]: *** Waiting for unfinished jobs....
>> make[3]: *** [drivers/net/ethernet] Error 2
>> make[2]: *** [drivers/net] Error 2
>> make[1]: *** [drivers] Error 2
>> make: *** [sub-make] Error 2
>> 
>>> -----Original Message-----
>>> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf
>>> Of Bowers, AndrewX
>>> Sent: Thursday, November 14, 2019 5:17 PM
>>> To: Kirsher, Jeffrey T <jeffrey.t.kirsher@intel.com>; intel-wired-
>>> lan@lists.osuosl.org
>>> Cc: Creeley, Brett <brett.creeley@intel.com>; Arkady Gilinksky
>>> <arkady.gilinsky@harmonicinc.com>
>>> Subject: Re: [Intel-wired-lan] [PATCH] i40e: Fix virtchnl_queue_select
>>> bitmap validation
>>> 
>>> Comments inline
>>> 
>>>> -----Original Message-----
>>>> From: Intel-wired-lan [mailto:intel-wired-lan-bounces@osuosl.org] On
>>>> Behalf Of Jeff Kirsher
>>>> Sent: Wednesday, November 13, 2019 11:28 AM
>>>> To: intel-wired-lan@lists.osuosl.org
>>>> Cc: Creeley, Brett <brett.creeley@intel.com>; Arkady Gilinksky
>>>> <arkady.gilinsky@harmonicinc.com>
>>>> Subject: [Intel-wired-lan] [PATCH] i40e: Fix virtchnl_queue_select
>>>> bitmap validation
>>>> 
>>>> From: Brett Creeley <brett.creeley@intel.com>
>>>> 
>>>> Currently in i40e_vc_disable_queues_msg() we are incorrectly
>>>> validating
>>> the
>>>> virtchnl queue select bitmaps. The virtchnl_queue_select rx_queues
>>>> and tx_queue bitmap is being compared against ICE_MAX_VF_QUEUES,
>> but
>>> the
>>>> problem is that these bitmaps can have a value greater than
>>>> I40E_MAX_VF_QUEUES.
>>>> Fix this by comparing the bitmaps against BIT(I40E_MAX_VF_QUEUES).
>>>> 
>>>> Also, add the function i40e_vc_validate_vqs_bitmaps() that checks to
>>>> see if both virtchnl_queue_select bitmaps are empty along with
>>>> checking that
>>> the
>>>> bitmaps only have valid bits set. This function can then be used in
>>>> both the queue enable and disable flows.
>>>> 
>>>> Suggested-by: Arkady Gilinksky <arkady.gilinsky@harmonicinc.com>
>>>> Signed-off-by: Brett Creeley <brett.creeley@intel.com>
>>>> ---
>>>> .../ethernet/intel/i40e/i40e_virtchnl_pf.c    | 22 +++++++++++++++----
>>>> 1 file changed, 18 insertions(+), 4 deletions(-)
>>>> 
>> <snip>
> _______________________________________________
> Intel-wired-lan mailing list
> Intel-wired-lan@osuosl.org
> https://lists.osuosl.org/mailman/listinfo/intel-wired-lan
Jeff Kirsher Nov. 18, 2019, 6:33 p.m. UTC | #5
On Fri, 2019-11-15 at 18:43 -0800, Brandeburg, Jesse wrote:
> Brett is out on vacation but you’re right Andrew, the code should use
> plural variables. 

Yep, it was my fault.  I fat fingered the typo when creating the patch.
I have fixed the patch on my tree, just have not sent an updated patch
to IWL yet, to properly reflect the change.

> 
> > On Nov 15, 2019, at 16:08, Bowers, AndrewX <
> > andrewx.bowers@intel.com> wrote:
> > 
> > I was getting the same thing. Taking the compiler's suggestion and
> > changing _queue to _queues and it compiles but nobody responded to
> > my comments. 
> > 
> > > -----Original Message-----
> > > From: Brown, Aaron F
> > > Sent: Friday, November 15, 2019 3:53 PM
> > > To: Bowers, AndrewX <andrewx.bowers@intel.com>; Kirsher, Jeffrey
> > > T
> > > <jeffrey.t.kirsher@intel.com>; intel-wired-lan@lists.osuosl.org
> > > Cc: Creeley, Brett <brett.creeley@intel.com>; Arkady Gilinksky
> > > <arkady.gilinsky@harmonicinc.com>
> > > Subject: RE: [Intel-wired-lan] [PATCH] i40e: Fix
> > > virtchnl_queue_select bitmap
> > > validation
> > > 
> > > This patch is causing a compile error for me.  If I pop revert it
> > > my compile
> > > error goes away:
> > > ---------------------------------------------------------------
> > > drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c: In function
> > > 'i40e_vc_validate_vqs_bitmaps':
> > > drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c:2333:9: error:
> > > 'struct
> > > virtchnl_queue_select' has no member named 'rx_queue'
> > >      vqs->rx_queue >= BIT(I40E_MAX_VF_QUEUES) ||
> > >         ^
> > > drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c:2334:9: error:
> > > 'struct
> > > virtchnl_queue_select' has no member named 'tx_queue'
> > >      vqs->tx_queue >= BIT(I40E_MAX_VF_QUEUES))
> > >         ^
> > > make[6]: *** [drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.o]
> > > Error 1
> > > make[6]: *** Waiting for unfinished jobs....
> > > make[5]: *** [drivers/net/ethernet/intel/i40e] Error 2
> > > make[4]: *** [drivers/net/ethernet/intel] Error 2
> > > make[4]: *** Waiting for unfinished jobs....
> > > make[3]: *** [drivers/net/ethernet] Error 2
> > > make[2]: *** [drivers/net] Error 2
> > > make[1]: *** [drivers] Error 2
> > > make: *** [sub-make] Error 2
> > > 
> > > > -----Original Message-----
> > > > From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On
> > > > Behalf
> > > > Of Bowers, AndrewX
> > > > Sent: Thursday, November 14, 2019 5:17 PM
> > > > To: Kirsher, Jeffrey T <jeffrey.t.kirsher@intel.com>; intel-
> > > > wired-
> > > > lan@lists.osuosl.org
> > > > Cc: Creeley, Brett <brett.creeley@intel.com>; Arkady Gilinksky
> > > > <arkady.gilinsky@harmonicinc.com>
> > > > Subject: Re: [Intel-wired-lan] [PATCH] i40e: Fix
> > > > virtchnl_queue_select
> > > > bitmap validation
> > > > 
> > > > Comments inline
> > > > 
> > > > > -----Original Message-----
> > > > > From: Intel-wired-lan [mailto:
> > > > > intel-wired-lan-bounces@osuosl.org] On
> > > > > Behalf Of Jeff Kirsher
> > > > > Sent: Wednesday, November 13, 2019 11:28 AM
> > > > > To: intel-wired-lan@lists.osuosl.org
> > > > > Cc: Creeley, Brett <brett.creeley@intel.com>; Arkady
> > > > > Gilinksky
> > > > > <arkady.gilinsky@harmonicinc.com>
> > > > > Subject: [Intel-wired-lan] [PATCH] i40e: Fix
> > > > > virtchnl_queue_select
> > > > > bitmap validation
> > > > > 
> > > > > From: Brett Creeley <brett.creeley@intel.com>
> > > > > 
> > > > > Currently in i40e_vc_disable_queues_msg() we are incorrectly
> > > > > validating
> > > > the
> > > > > virtchnl queue select bitmaps. The virtchnl_queue_select
> > > > > rx_queues
> > > > > and tx_queue bitmap is being compared against
> > > > > ICE_MAX_VF_QUEUES,
> > > but
> > > > the
> > > > > problem is that these bitmaps can have a value greater than
> > > > > I40E_MAX_VF_QUEUES.
> > > > > Fix this by comparing the bitmaps against
> > > > > BIT(I40E_MAX_VF_QUEUES).
> > > > > 
> > > > > Also, add the function i40e_vc_validate_vqs_bitmaps() that
> > > > > checks to
> > > > > see if both virtchnl_queue_select bitmaps are empty along
> > > > > with
> > > > > checking that
> > > > the
> > > > > bitmaps only have valid bits set. This function can then be
> > > > > used in
> > > > > both the queue enable and disable flows.
> > > > > 
> > > > > Suggested-by: Arkady Gilinksky <
> > > > > arkady.gilinsky@harmonicinc.com>
> > > > > Signed-off-by: Brett Creeley <brett.creeley@intel.com>
> > > > > ---
> > > > > .../ethernet/intel/i40e/i40e_virtchnl_pf.c    | 22
> > > > > +++++++++++++++----
> > > > > 1 file changed, 18 insertions(+), 4 deletions(-)
> > > > > 
> > > <snip>
> > _______________________________________________
> > Intel-wired-lan mailing list
> > Intel-wired-lan@osuosl.org
> > https://lists.osuosl.org/mailman/listinfo/intel-wired-lan
Bowers, AndrewX Nov. 19, 2019, 7:27 p.m. UTC | #6
> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces@osuosl.org] On
> Behalf Of Jeff Kirsher
> Sent: Wednesday, November 13, 2019 11:28 AM
> To: intel-wired-lan@lists.osuosl.org
> Cc: Creeley, Brett <brett.creeley@intel.com>; Arkady Gilinksky
> <arkady.gilinsky@harmonicinc.com>
> Subject: [Intel-wired-lan] [PATCH] i40e: Fix virtchnl_queue_select bitmap
> validation
> 
> From: Brett Creeley <brett.creeley@intel.com>
> 
> Currently in i40e_vc_disable_queues_msg() we are incorrectly validating the
> virtchnl queue select bitmaps. The virtchnl_queue_select rx_queues and
> tx_queue bitmap is being compared against ICE_MAX_VF_QUEUES, but the
> problem is that these bitmaps can have a value greater than
> I40E_MAX_VF_QUEUES.
> Fix this by comparing the bitmaps against BIT(I40E_MAX_VF_QUEUES).
> 
> Also, add the function i40e_vc_validate_vqs_bitmaps() that checks to see if
> both virtchnl_queue_select bitmaps are empty along with checking that the
> bitmaps only have valid bits set. This function can then be used in both the
> queue enable and disable flows.
> 
> Suggested-by: Arkady Gilinksky <arkady.gilinsky@harmonicinc.com>
> Signed-off-by: Brett Creeley <brett.creeley@intel.com>
> ---
>  .../ethernet/intel/i40e/i40e_virtchnl_pf.c    | 22 +++++++++++++++----
>  1 file changed, 18 insertions(+), 4 deletions(-)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>

Patch
diff mbox series

diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
index 6d75a35acb67..275702d8cf7a 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
@@ -2321,6 +2321,22 @@  static int i40e_ctrl_vf_rx_rings(struct i40e_vsi *vsi, unsigned long q_map,
 	return ret;
 }
 
+/**
+ * i40e_vc_validate_vqs_bitmaps - validate Rx/Tx queue bitmaps from VIRTHCHNL
+ * @vqs: virtchnl_queue_select structure containing bitmaps to validate
+ *
+ * Returns true if validation was successful, else false.
+ */
+static bool i40e_vc_validate_vqs_bitmaps(struct virtchnl_queue_select *vqs)
+{
+	if ((!vqs->rx_queues && !vqs->tx_queues) ||
+	    vqs->rx_queue >= BIT(I40E_MAX_VF_QUEUES) ||
+	    vqs->tx_queue >= BIT(I40E_MAX_VF_QUEUES))
+	       return false;
+
+	return true;
+}
+
 /**
  * i40e_vc_enable_queues_msg
  * @vf: pointer to the VF info
@@ -2346,7 +2362,7 @@  static int i40e_vc_enable_queues_msg(struct i40e_vf *vf, u8 *msg)
 		goto error_param;
 	}
 
-	if ((0 == vqs->rx_queues) && (0 == vqs->tx_queues)) {
+	if (i40e_vc_validate_vqs_bitmaps(vqs)) {
 		aq_ret = I40E_ERR_PARAM;
 		goto error_param;
 	}
@@ -2408,9 +2424,7 @@  static int i40e_vc_disable_queues_msg(struct i40e_vf *vf, u8 *msg)
 		goto error_param;
 	}
 
-	if ((vqs->rx_queues == 0 && vqs->tx_queues == 0) ||
-	    vqs->rx_queues > I40E_MAX_VF_QUEUES ||
-	    vqs->tx_queues > I40E_MAX_VF_QUEUES) {
+	if (i40e_vc_validate_vqs_bitmaps(vqs)) {
 		aq_ret = I40E_ERR_PARAM;
 		goto error_param;
 	}