Patchwork ethernet: neterion: vxge: vxge-traffic.c: fix for a potential NULL pointer dereference

login
register
mail settings
Submitter Kumar Amit Mehta
Date Feb. 16, 2013, 5:56 p.m.
Message ID <1361037394-14731-1-git-send-email-gmate.amit@gmail.com>
Download mbox | patch
Permalink /patch/221020/
State Changes Requested
Delegated to: David Miller
Headers show

Comments

Kumar Amit Mehta - Feb. 16, 2013, 5:56 p.m.
fix for a potential NULL pointer dereference and removal of a redundant
assignment operation. Found using smatch.

Signed-off-by: Kumar Amit Mehta <gmate.amit@gmail.com>
---
 drivers/net/ethernet/neterion/vxge/vxge-traffic.c |    8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)
walter harms - Feb. 17, 2013, 2:49 p.m.
Am 16.02.2013 18:56, schrieb Kumar Amit Mehta:
> fix for a potential NULL pointer dereference and removal of a redundant
> assignment operation. Found using smatch.
> 
> Signed-off-by: Kumar Amit Mehta <gmate.amit@gmail.com>
> ---
>  drivers/net/ethernet/neterion/vxge/vxge-traffic.c |    8 ++------
>  1 file changed, 2 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/net/ethernet/neterion/vxge/vxge-traffic.c b/drivers/net/ethernet/neterion/vxge/vxge-traffic.c
> index 99749bd..adb05a8 100644
> --- a/drivers/net/ethernet/neterion/vxge/vxge-traffic.c
> +++ b/drivers/net/ethernet/neterion/vxge/vxge-traffic.c
> @@ -611,11 +611,8 @@ __vxge_hw_vpath_alarm_process(struct __vxge_hw_virtualpath *vpath,
>  	struct vxge_hw_vpath_stats_sw_info *sw_stats;
>  	struct vxge_hw_vpath_reg __iomem *vp_reg;
>  
> -	if (vpath == NULL) {
> -		alarm_event = VXGE_HW_SET_LEVEL(VXGE_HW_EVENT_UNKNOWN,
> -			alarm_event);
> +	if (vpath == NULL)
>  		goto out2;
> -	}
>  
>  	hldev = vpath->hldev;
>  	vp_reg = vpath->vp_reg;
> @@ -852,13 +849,12 @@ __vxge_hw_vpath_alarm_process(struct __vxge_hw_virtualpath *vpath,
>  	}
>  out:
>  	hldev->stats.sw_dev_err_stats.vpath_alarms++;
> +	__vxge_hw_device_handle_error(hldev, vpath->vp_id, alarm_event);
>  out2:
>  	if ((alarm_event == VXGE_HW_EVENT_ALARM_CLEARED) ||
>  		(alarm_event == VXGE_HW_EVENT_UNKNOWN))
>  		return VXGE_HW_OK;
>  
> -	__vxge_hw_device_handle_error(hldev, vpath->vp_id, alarm_event);
> -
>  	if (alarm_event == VXGE_HW_EVENT_SERR)
>  		return VXGE_HW_ERR_CRITICAL;
>  

the patch looks ok.
it would be nice if someone would rewrite the if (alarm_event == x ) stuff
using switch or more if()'s it is hardly readable this way.

just my 2 cents,
re,
 wh
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller - Feb. 18, 2013, 7:45 p.m.
From: Kumar Amit Mehta <gmate.amit@gmail.com>
Date: Sat, 16 Feb 2013 09:56:34 -0800

> fix for a potential NULL pointer dereference and removal of a redundant
> assignment operation. Found using smatch.
> 
> Signed-off-by: Kumar Amit Mehta <gmate.amit@gmail.com>

Obviously whoever wrote this code intended for ALARM_CLEARED
and EVENT_UNKNOWN events to not be logged.

But you're changing that.

I'm not applying this patch, sorry.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/net/ethernet/neterion/vxge/vxge-traffic.c b/drivers/net/ethernet/neterion/vxge/vxge-traffic.c
index 99749bd..adb05a8 100644
--- a/drivers/net/ethernet/neterion/vxge/vxge-traffic.c
+++ b/drivers/net/ethernet/neterion/vxge/vxge-traffic.c
@@ -611,11 +611,8 @@  __vxge_hw_vpath_alarm_process(struct __vxge_hw_virtualpath *vpath,
 	struct vxge_hw_vpath_stats_sw_info *sw_stats;
 	struct vxge_hw_vpath_reg __iomem *vp_reg;
 
-	if (vpath == NULL) {
-		alarm_event = VXGE_HW_SET_LEVEL(VXGE_HW_EVENT_UNKNOWN,
-			alarm_event);
+	if (vpath == NULL)
 		goto out2;
-	}
 
 	hldev = vpath->hldev;
 	vp_reg = vpath->vp_reg;
@@ -852,13 +849,12 @@  __vxge_hw_vpath_alarm_process(struct __vxge_hw_virtualpath *vpath,
 	}
 out:
 	hldev->stats.sw_dev_err_stats.vpath_alarms++;
+	__vxge_hw_device_handle_error(hldev, vpath->vp_id, alarm_event);
 out2:
 	if ((alarm_event == VXGE_HW_EVENT_ALARM_CLEARED) ||
 		(alarm_event == VXGE_HW_EVENT_UNKNOWN))
 		return VXGE_HW_OK;
 
-	__vxge_hw_device_handle_error(hldev, vpath->vp_id, alarm_event);
-
 	if (alarm_event == VXGE_HW_EVENT_SERR)
 		return VXGE_HW_ERR_CRITICAL;