diff mbox

vfio: Fix handling of error returned by 'vfio_group_get_from_dev()'

Message ID 20161130070612.16073-1-christophe.jaillet@wanadoo.fr (mailing list archive)
State New, archived
Headers show

Commit Message

Christophe JAILLET Nov. 30, 2016, 7:06 a.m. UTC
'vfio_group_get_from_dev()' seems to return only NULL on error, not an error
pointer.

Fixes: 2169037dc322 ("vfio iommu: Added pin and unpin callback functions to vfio_iommu_driver_ops")
Fixes: c086de818dd8 ("vfio iommu: Add blocking notifier to notify DMA_UNMAP")

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
---
This could be split in 2 patches in order to have only one Fixes tag in
each
---
 drivers/vfio/vfio.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

Comments

Alex Williamson Nov. 30, 2016, 4:36 p.m. UTC | #1
On Wed, 30 Nov 2016 08:06:12 +0100
Christophe JAILLET <christophe.jaillet@wanadoo.fr> wrote:

> 'vfio_group_get_from_dev()' seems to return only NULL on error, not an error
> pointer.
> 
> Fixes: 2169037dc322 ("vfio iommu: Added pin and unpin callback functions to vfio_iommu_driver_ops")
> Fixes: c086de818dd8 ("vfio iommu: Add blocking notifier to notify DMA_UNMAP")
> 
> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
> ---

Dan Carpenter proposed a nearly identical patch:

http://www.spinics.net/lists/kvm/msg141468.html

The difference is you return -ENODEV while Dan returns -EINVAL.  I tend
to prefer -ENODEV to distinguish this error case versus validation of
the other parameters.  This patch also identifies both commits
introducing these, so I'm inclined to take this one rather than Dan's
version.  Dan & Kirti, I welcome any credits you'd like to apply to
this patch for identifying and reviewing the same issue.  Thanks,

Alex

> This could be split in 2 patches in order to have only one Fixes tag in
> each
> ---
>  drivers/vfio/vfio.c | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c
> index 0aac3ca54a53..7b39313abf0d 100644
> --- a/drivers/vfio/vfio.c
> +++ b/drivers/vfio/vfio.c
> @@ -1933,8 +1933,8 @@ int vfio_pin_pages(struct device *dev, unsigned long *user_pfn, int npage,
>  		return -E2BIG;
>  
>  	group = vfio_group_get_from_dev(dev);
> -	if (IS_ERR(group))
> -		return PTR_ERR(group);
> +	if (!group)
> +		return -ENODEV;
>  
>  	ret = vfio_group_add_container_user(group);
>  	if (ret)
> @@ -1982,8 +1982,8 @@ int vfio_unpin_pages(struct device *dev, unsigned long *user_pfn, int npage)
>  		return -E2BIG;
>  
>  	group = vfio_group_get_from_dev(dev);
> -	if (IS_ERR(group))
> -		return PTR_ERR(group);
> +	if (!group)
> +		return -ENODEV;
>  
>  	ret = vfio_group_add_container_user(group);
>  	if (ret)
> @@ -2019,8 +2019,8 @@ int vfio_register_notifier(struct device *dev, struct notifier_block *nb)
>  		return -EINVAL;
>  
>  	group = vfio_group_get_from_dev(dev);
> -	if (IS_ERR(group))
> -		return PTR_ERR(group);
> +	if (!group)
> +		return -ENODEV;
>  
>  	ret = vfio_group_add_container_user(group);
>  	if (ret)
> @@ -2055,8 +2055,8 @@ int vfio_unregister_notifier(struct device *dev, struct notifier_block *nb)
>  		return -EINVAL;
>  
>  	group = vfio_group_get_from_dev(dev);
> -	if (IS_ERR(group))
> -		return PTR_ERR(group);
> +	if (!group)
> +		return -ENODEV;
>  
>  	ret = vfio_group_add_container_user(group);
>  	if (ret)

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Dan Carpenter Nov. 30, 2016, 6:27 p.m. UTC | #2
On Wed, Nov 30, 2016 at 09:36:46AM -0700, Alex Williamson wrote:
> On Wed, 30 Nov 2016 08:06:12 +0100
> Christophe JAILLET <christophe.jaillet@wanadoo.fr> wrote:
> 
> > 'vfio_group_get_from_dev()' seems to return only NULL on error, not an error
> > pointer.
> > 
> > Fixes: 2169037dc322 ("vfio iommu: Added pin and unpin callback functions to vfio_iommu_driver_ops")
> > Fixes: c086de818dd8 ("vfio iommu: Add blocking notifier to notify DMA_UNMAP")
> > 
> > Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
> > ---
> 
> Dan Carpenter proposed a nearly identical patch:
> 
> http://www.spinics.net/lists/kvm/msg141468.html
> 
> The difference is you return -ENODEV while Dan returns -EINVAL.  I tend
> to prefer -ENODEV to distinguish this error case versus validation of
> the other parameters.  This patch also identifies both commits
> introducing these, so I'm inclined to take this one rather than Dan's
> version.  Dan & Kirti, I welcome any credits you'd like to apply to
> this patch for identifying and reviewing the same issue.  Thanks,
> 

Could I get a Reported-by?

thanks,
dan carpenter

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Alex Williamson Nov. 30, 2016, 6:39 p.m. UTC | #3
On Wed, 30 Nov 2016 21:27:07 +0300
Dan Carpenter <dan.carpenter@oracle.com> wrote:

> On Wed, Nov 30, 2016 at 09:36:46AM -0700, Alex Williamson wrote:
> > On Wed, 30 Nov 2016 08:06:12 +0100
> > Christophe JAILLET <christophe.jaillet@wanadoo.fr> wrote:
> >   
> > > 'vfio_group_get_from_dev()' seems to return only NULL on error, not an error
> > > pointer.
> > > 
> > > Fixes: 2169037dc322 ("vfio iommu: Added pin and unpin callback functions to vfio_iommu_driver_ops")
> > > Fixes: c086de818dd8 ("vfio iommu: Add blocking notifier to notify DMA_UNMAP")
> > > 
> > > Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
> > > ---  
> > 
> > Dan Carpenter proposed a nearly identical patch:
> > 
> > http://www.spinics.net/lists/kvm/msg141468.html
> > 
> > The difference is you return -ENODEV while Dan returns -EINVAL.  I tend
> > to prefer -ENODEV to distinguish this error case versus validation of
> > the other parameters.  This patch also identifies both commits
> > introducing these, so I'm inclined to take this one rather than Dan's
> > version.  Dan & Kirti, I welcome any credits you'd like to apply to
> > this patch for identifying and reviewing the same issue.  Thanks,
> >   
> 
> Could I get a Reported-by?

Sure thing, thanks,

Alex
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Kirti Wankhede Dec. 1, 2016, 4:48 a.m. UTC | #4
On 12/1/2016 12:09 AM, Alex Williamson wrote:
> On Wed, 30 Nov 2016 21:27:07 +0300
> Dan Carpenter <dan.carpenter@oracle.com> wrote:
> 
>> On Wed, Nov 30, 2016 at 09:36:46AM -0700, Alex Williamson wrote:
>>> On Wed, 30 Nov 2016 08:06:12 +0100
>>> Christophe JAILLET <christophe.jaillet@wanadoo.fr> wrote:
>>>   
>>>> 'vfio_group_get_from_dev()' seems to return only NULL on error, not an error
>>>> pointer.
>>>>
>>>> Fixes: 2169037dc322 ("vfio iommu: Added pin and unpin callback functions to vfio_iommu_driver_ops")
>>>> Fixes: c086de818dd8 ("vfio iommu: Add blocking notifier to notify DMA_UNMAP")
>>>>
>>>> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
>>>> ---  
>>>
>>> Dan Carpenter proposed a nearly identical patch:
>>>
>>> http://www.spinics.net/lists/kvm/msg141468.html
>>>
>>> The difference is you return -ENODEV while Dan returns -EINVAL.  I tend
>>> to prefer -ENODEV to distinguish this error case versus validation of
>>> the other parameters.  This patch also identifies both commits
>>> introducing these, so I'm inclined to take this one rather than Dan's
>>> version. 

Agree with you Alex. This version looks better.

Thanks,
Kirti


>>> Dan & Kirti, I welcome any credits you'd like to apply to
>>> this patch for identifying and reviewing the same issue.  Thanks,
>>>   
>>
>> Could I get a Reported-by?
> 
> Sure thing, thanks,
> 
> Alex
> 
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c
index 0aac3ca54a53..7b39313abf0d 100644
--- a/drivers/vfio/vfio.c
+++ b/drivers/vfio/vfio.c
@@ -1933,8 +1933,8 @@  int vfio_pin_pages(struct device *dev, unsigned long *user_pfn, int npage,
 		return -E2BIG;
 
 	group = vfio_group_get_from_dev(dev);
-	if (IS_ERR(group))
-		return PTR_ERR(group);
+	if (!group)
+		return -ENODEV;
 
 	ret = vfio_group_add_container_user(group);
 	if (ret)
@@ -1982,8 +1982,8 @@  int vfio_unpin_pages(struct device *dev, unsigned long *user_pfn, int npage)
 		return -E2BIG;
 
 	group = vfio_group_get_from_dev(dev);
-	if (IS_ERR(group))
-		return PTR_ERR(group);
+	if (!group)
+		return -ENODEV;
 
 	ret = vfio_group_add_container_user(group);
 	if (ret)
@@ -2019,8 +2019,8 @@  int vfio_register_notifier(struct device *dev, struct notifier_block *nb)
 		return -EINVAL;
 
 	group = vfio_group_get_from_dev(dev);
-	if (IS_ERR(group))
-		return PTR_ERR(group);
+	if (!group)
+		return -ENODEV;
 
 	ret = vfio_group_add_container_user(group);
 	if (ret)
@@ -2055,8 +2055,8 @@  int vfio_unregister_notifier(struct device *dev, struct notifier_block *nb)
 		return -EINVAL;
 
 	group = vfio_group_get_from_dev(dev);
-	if (IS_ERR(group))
-		return PTR_ERR(group);
+	if (!group)
+		return -ENODEV;
 
 	ret = vfio_group_add_container_user(group);
 	if (ret)