[dpdk-dev] i40e: dereference before null check

Message ID 1460998153-187871-1-git-send-email-danielx.t.mrzyglod@intel.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

Daniel Mrzyglod April 18, 2016, 4:49 p.m. UTC
  Fix issue reported by Coverity.
Coverity ID 13302:
There may be a null pointer dereference, or else the comparison against
null is unnecessary.

In i40evf_config_vlan_pvid: All paths that lead to this null pointer
comparison already dereference the pointer earlier

Fixes: 2b12431b5369 ("i40e: add vlan stripping and insertion to VF")

Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com>
---
 drivers/net/i40e/i40e_ethdev_vf.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
  

Comments

Zhang, Helin April 18, 2016, 3:55 p.m. UTC | #1
> -----Original Message-----
> From: Mrzyglod, DanielX T
> Sent: Tuesday, April 19, 2016 12:49 AM
> To: Chen, Jing D <jing.d.chen@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>;
> Zhang, Helin <helin.zhang@intel.com>
> Cc: dev@dpdk.org; Mrzyglod, DanielX T <danielx.t.mrzyglod@intel.com>
> Subject: [PATCH] i40e: dereference before null check
> 
> Fix issue reported by Coverity.
> Coverity ID 13302:
> There may be a null pointer dereference, or else the comparison against null is
> unnecessary.
Does that really happen? I guess not.
If I am correct, I'd suggest to just remove the check of if (dev == NULL) as not needed.

/Helin

> 
> In i40evf_config_vlan_pvid: All paths that lead to this null pointer comparison
> already dereference the pointer earlier
> 
> Fixes: 2b12431b5369 ("i40e: add vlan stripping and insertion to VF")
> 
> Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com>
> ---
>  drivers/net/i40e/i40e_ethdev_vf.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/i40e/i40e_ethdev_vf.c
> b/drivers/net/i40e/i40e_ethdev_vf.c
> index 2bce69b..0d69322 100644
> --- a/drivers/net/i40e/i40e_ethdev_vf.c
> +++ b/drivers/net/i40e/i40e_ethdev_vf.c
> @@ -533,7 +533,7 @@ static int
>  i40evf_config_vlan_pvid(struct rte_eth_dev *dev,
>  				struct i40e_vsi_vlan_pvid_info *info)  {
> -	struct i40e_vf *vf =
> I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
> +	struct i40e_vf *vf = NULL;
>  	int err;
>  	struct vf_cmd_info args;
>  	struct i40e_virtchnl_pvid_info tpid_info; @@ -542,6 +542,7 @@
> i40evf_config_vlan_pvid(struct rte_eth_dev *dev,
>  		PMD_DRV_LOG(ERR, "invalid parameters");
>  		return I40E_ERR_PARAM;
>  	}
> +	vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
> 
>  	memset(&tpid_info, 0, sizeof(tpid_info));
>  	tpid_info.vsi_id = vf->vsi_res->vsi_id;
> --
> 2.5.5
  

Patch

diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c
index 2bce69b..0d69322 100644
--- a/drivers/net/i40e/i40e_ethdev_vf.c
+++ b/drivers/net/i40e/i40e_ethdev_vf.c
@@ -533,7 +533,7 @@  static int
 i40evf_config_vlan_pvid(struct rte_eth_dev *dev,
 				struct i40e_vsi_vlan_pvid_info *info)
 {
-	struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
+	struct i40e_vf *vf = NULL;
 	int err;
 	struct vf_cmd_info args;
 	struct i40e_virtchnl_pvid_info tpid_info;
@@ -542,6 +542,7 @@  i40evf_config_vlan_pvid(struct rte_eth_dev *dev,
 		PMD_DRV_LOG(ERR, "invalid parameters");
 		return I40E_ERR_PARAM;
 	}
+	vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
 
 	memset(&tpid_info, 0, sizeof(tpid_info));
 	tpid_info.vsi_id = vf->vsi_res->vsi_id;