[dpdk-dev,23/39] net/ixgbe/base: add bound check in LED functions

Message ID 1472312902-16963-24-git-send-email-xiao.w.wang@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Bruce Richardson
Headers

Commit Message

Xiao Wang Aug. 27, 2016, 3:48 p.m. UTC
  Do parameter check to prevent exceptional value being written into
register.

Signed-off-by: Xiao Wang <xiao.w.wang@intel.com>
---
 drivers/net/ixgbe/base/ixgbe_common.c | 15 ++++++++++++++-
 drivers/net/ixgbe/base/ixgbe_x540.c   |  6 ++++++
 2 files changed, 20 insertions(+), 1 deletion(-)
  

Comments

Ferruh Yigit Sept. 19, 2016, 5:06 p.m. UTC | #1
On 8/27/2016 4:48 PM, Xiao Wang wrote:
> Do parameter check to prevent exceptional value being written into
> register.
> 
> Signed-off-by: Xiao Wang <xiao.w.wang@intel.com>
> ---
>  drivers/net/ixgbe/base/ixgbe_common.c | 15 ++++++++++++++-
>  drivers/net/ixgbe/base/ixgbe_x540.c   |  6 ++++++
>  2 files changed, 20 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ixgbe/base/ixgbe_common.c b/drivers/net/ixgbe/base/ixgbe_common.c
> index 1c7263d..3c3272e 100644
> --- a/drivers/net/ixgbe/base/ixgbe_common.c
> +++ b/drivers/net/ixgbe/base/ixgbe_common.c
> @@ -1133,6 +1133,9 @@ s32 ixgbe_led_on_generic(struct ixgbe_hw *hw, u32 index)
>  
>  	DEBUGFUNC("ixgbe_led_on_generic");
>  
> +	if (index > 3)

What about using macro for hardcoded value 3.

> +		return IXGBE_ERR_PARAM;
> +
>  	/* To turn on the LED, set mode to ON. */
>  	led_reg &= ~IXGBE_LED_MODE_MASK(index);
>  	led_reg |= IXGBE_LED_ON << IXGBE_LED_MODE_SHIFT(index);
> @@ -1153,6 +1156,9 @@ s32 ixgbe_led_off_generic(struct ixgbe_hw *hw, u32 index)
>  
>  	DEBUGFUNC("ixgbe_led_off_generic");
>  
> +	if (index > 3)
> +		return IXGBE_ERR_PARAM;
> +
>  	/* To turn off the LED, set mode to OFF. */
>  	led_reg &= ~IXGBE_LED_MODE_MASK(index);
>  	led_reg |= IXGBE_LED_OFF << IXGBE_LED_MODE_SHIFT(index);
> @@ -3341,7 +3347,7 @@ s32 prot_autoc_write_generic(struct ixgbe_hw *hw, u32 reg_val, bool locked)
>   **/
>  s32 ixgbe_enable_sec_rx_path_generic(struct ixgbe_hw *hw)
>  {
> -	int secrxreg;
> +	u32 secrxreg;

This modification seems unrelated with the patch.

>
  
Xiao Wang Sept. 22, 2016, 4:08 p.m. UTC | #2
Hi Ferruh,

> -----Original Message-----
> From: Yigit, Ferruh
> Sent: Tuesday, September 20, 2016 1:07 AM
> To: Wang, Xiao W <xiao.w.wang@intel.com>; Lu, Wenzhuo
> <wenzhuo.lu@intel.com>
> Cc: dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH 23/39] net/ixgbe/base: add bound check in LED
> functions
> 
> On 8/27/2016 4:48 PM, Xiao Wang wrote:
> > Do parameter check to prevent exceptional value being written into
> > register.
> >
> > Signed-off-by: Xiao Wang <xiao.w.wang@intel.com>
> > ---
> >  drivers/net/ixgbe/base/ixgbe_common.c | 15 ++++++++++++++-
> >  drivers/net/ixgbe/base/ixgbe_x540.c   |  6 ++++++
> >  2 files changed, 20 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/net/ixgbe/base/ixgbe_common.c
> b/drivers/net/ixgbe/base/ixgbe_common.c
> > index 1c7263d..3c3272e 100644
> > --- a/drivers/net/ixgbe/base/ixgbe_common.c
> > +++ b/drivers/net/ixgbe/base/ixgbe_common.c
> > @@ -1133,6 +1133,9 @@ s32 ixgbe_led_on_generic(struct ixgbe_hw *hw,
> u32 index)
> >
> >  	DEBUGFUNC("ixgbe_led_on_generic");
> >
> > +	if (index > 3)
> 
> What about using macro for hardcoded value 3.

For the base (shared) code update, we'd better to keep DPDK in consistency
with kernel driver.

> 
> > +		return IXGBE_ERR_PARAM;
> > +
> >  	/* To turn on the LED, set mode to ON. */
> >  	led_reg &= ~IXGBE_LED_MODE_MASK(index);
> >  	led_reg |= IXGBE_LED_ON << IXGBE_LED_MODE_SHIFT(index);
> > @@ -1153,6 +1156,9 @@ s32 ixgbe_led_off_generic(struct ixgbe_hw *hw,
> u32 index)
> >
> >  	DEBUGFUNC("ixgbe_led_off_generic");
> >
> > +	if (index > 3)
> > +		return IXGBE_ERR_PARAM;
> > +
> >  	/* To turn off the LED, set mode to OFF. */
> >  	led_reg &= ~IXGBE_LED_MODE_MASK(index);
> >  	led_reg |= IXGBE_LED_OFF << IXGBE_LED_MODE_SHIFT(index);
> > @@ -3341,7 +3347,7 @@ s32 prot_autoc_write_generic(struct ixgbe_hw
> *hw, u32 reg_val, bool locked)
> >   **/
> >  s32 ixgbe_enable_sec_rx_path_generic(struct ixgbe_hw *hw)
> >  {
> > -	int secrxreg;
> > +	u32 secrxreg;
> 
> This modification seems unrelated with the patch.

Will put such minor change into a cleanup patch.

> 
> >
>
  

Patch

diff --git a/drivers/net/ixgbe/base/ixgbe_common.c b/drivers/net/ixgbe/base/ixgbe_common.c
index 1c7263d..3c3272e 100644
--- a/drivers/net/ixgbe/base/ixgbe_common.c
+++ b/drivers/net/ixgbe/base/ixgbe_common.c
@@ -1133,6 +1133,9 @@  s32 ixgbe_led_on_generic(struct ixgbe_hw *hw, u32 index)
 
 	DEBUGFUNC("ixgbe_led_on_generic");
 
+	if (index > 3)
+		return IXGBE_ERR_PARAM;
+
 	/* To turn on the LED, set mode to ON. */
 	led_reg &= ~IXGBE_LED_MODE_MASK(index);
 	led_reg |= IXGBE_LED_ON << IXGBE_LED_MODE_SHIFT(index);
@@ -1153,6 +1156,9 @@  s32 ixgbe_led_off_generic(struct ixgbe_hw *hw, u32 index)
 
 	DEBUGFUNC("ixgbe_led_off_generic");
 
+	if (index > 3)
+		return IXGBE_ERR_PARAM;
+
 	/* To turn off the LED, set mode to OFF. */
 	led_reg &= ~IXGBE_LED_MODE_MASK(index);
 	led_reg |= IXGBE_LED_OFF << IXGBE_LED_MODE_SHIFT(index);
@@ -3341,7 +3347,7 @@  s32 prot_autoc_write_generic(struct ixgbe_hw *hw, u32 reg_val, bool locked)
  **/
 s32 ixgbe_enable_sec_rx_path_generic(struct ixgbe_hw *hw)
 {
-	int secrxreg;
+	u32 secrxreg;
 
 	DEBUGFUNC("ixgbe_enable_sec_rx_path_generic");
 
@@ -3388,6 +3394,9 @@  s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index)
 
 	DEBUGFUNC("ixgbe_blink_led_start_generic");
 
+	if (index > 3)
+		return IXGBE_ERR_PARAM;
+
 	/*
 	 * Link must be up to auto-blink the LEDs;
 	 * Force it if link is down.
@@ -3433,6 +3442,10 @@  s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index)
 
 	DEBUGFUNC("ixgbe_blink_led_stop_generic");
 
+	if (index > 3)
+		return IXGBE_ERR_PARAM;
+
+
 	ret_val = hw->mac.ops.prot_autoc_read(hw, &locked, &autoc_reg);
 	if (ret_val != IXGBE_SUCCESS)
 		goto out;
diff --git a/drivers/net/ixgbe/base/ixgbe_x540.c b/drivers/net/ixgbe/base/ixgbe_x540.c
index 31dead0..24e9c93 100644
--- a/drivers/net/ixgbe/base/ixgbe_x540.c
+++ b/drivers/net/ixgbe/base/ixgbe_x540.c
@@ -982,6 +982,9 @@  s32 ixgbe_blink_led_start_X540(struct ixgbe_hw *hw, u32 index)
 
 	DEBUGFUNC("ixgbe_blink_led_start_X540");
 
+	if (index > 3)
+		return IXGBE_ERR_PARAM;
+
 	/*
 	 * Link should be up in order for the blink bit in the LED control
 	 * register to work. Force link and speed in the MAC if link is down.
@@ -1016,6 +1019,9 @@  s32 ixgbe_blink_led_stop_X540(struct ixgbe_hw *hw, u32 index)
 	u32 macc_reg;
 	u32 ledctl_reg;
 
+	if (index > 3)
+		return IXGBE_ERR_PARAM;
+
 	DEBUGFUNC("ixgbe_blink_led_stop_X540");
 
 	/* Restore the LED to its default value. */