diff mbox series

vfio/pci: Fix handling of pci use accessor return codes

Message ID 3d14987b-278c-be28-be7b-8f3c733fc4e9@gmail.com (mailing list archive)
State New, archived
Headers show
Series vfio/pci: Fix handling of pci use accessor return codes | expand

Commit Message

Heiner Kallweit Jan. 24, 2021, 3:35 p.m. UTC
The pci user accessors return negative errno's on error.

Fixes: f572a960a15e ("vfio/pci: Intel IGD host and LCP bridge config space access")
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/vfio/pci/vfio_pci_igd.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Comments

Cornelia Huck Jan. 25, 2021, 6:11 p.m. UTC | #1
On Sun, 24 Jan 2021 16:35:41 +0100
Heiner Kallweit <hkallweit1@gmail.com> wrote:

> The pci user accessors return negative errno's on error.
> 
> Fixes: f572a960a15e ("vfio/pci: Intel IGD host and LCP bridge config space access")
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
> ---
>  drivers/vfio/pci/vfio_pci_igd.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/vfio/pci/vfio_pci_igd.c b/drivers/vfio/pci/vfio_pci_igd.c
> index 53d97f459..e66dfb017 100644
> --- a/drivers/vfio/pci/vfio_pci_igd.c
> +++ b/drivers/vfio/pci/vfio_pci_igd.c
> @@ -127,7 +127,7 @@ static size_t vfio_pci_igd_cfg_rw(struct vfio_pci_device *vdev,
>  
>  		ret = pci_user_read_config_byte(pdev, pos, &val);
>  		if (ret)
> -			return pcibios_err_to_errno(ret);
> +			return ret;

This is actually not strictly needed, as pcibios_err_to_errno() already
keeps errors <= 0 unchanged, so more a cleanup than a fix?

Anyway,

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

>  
>  		if (copy_to_user(buf + count - size, &val, 1))
>  			return -EFAULT;
Heiner Kallweit Jan. 25, 2021, 8:06 p.m. UTC | #2
On 25.01.2021 19:11, Cornelia Huck wrote:
> On Sun, 24 Jan 2021 16:35:41 +0100
> Heiner Kallweit <hkallweit1@gmail.com> wrote:
> 
>> The pci user accessors return negative errno's on error.
>>
>> Fixes: f572a960a15e ("vfio/pci: Intel IGD host and LCP bridge config space access")
>> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
>> ---
>>  drivers/vfio/pci/vfio_pci_igd.c | 10 +++++-----
>>  1 file changed, 5 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/vfio/pci/vfio_pci_igd.c b/drivers/vfio/pci/vfio_pci_igd.c
>> index 53d97f459..e66dfb017 100644
>> --- a/drivers/vfio/pci/vfio_pci_igd.c
>> +++ b/drivers/vfio/pci/vfio_pci_igd.c
>> @@ -127,7 +127,7 @@ static size_t vfio_pci_igd_cfg_rw(struct vfio_pci_device *vdev,
>>  
>>  		ret = pci_user_read_config_byte(pdev, pos, &val);
>>  		if (ret)
>> -			return pcibios_err_to_errno(ret);
>> +			return ret;
> 
> This is actually not strictly needed, as pcibios_err_to_errno() already
> keeps errors <= 0 unchanged, so more a cleanup than a fix?
> 
I agree. Although I'd argue that the author of the original commit missed
the fact the the user accessors return errno's, and the code just works
by chance, because of the "good will" of pcibios_err_to_errno().
So up to you whether it's worth it to apply this change also to stable.

> Anyway,
> 
> Reviewed-by: Cornelia Huck <cohuck@redhat.com>
> 
>>  
>>  		if (copy_to_user(buf + count - size, &val, 1))
>>  			return -EFAULT;
>
Alex Williamson Feb. 2, 2021, 5:22 p.m. UTC | #3
On Sun, 24 Jan 2021 16:35:41 +0100
Heiner Kallweit <hkallweit1@gmail.com> wrote:

> The pci user accessors return negative errno's on error.
> 
> Fixes: f572a960a15e ("vfio/pci: Intel IGD host and LCP bridge config space access")
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
> ---
>  drivers/vfio/pci/vfio_pci_igd.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)

Applied to vfio next branch for v5.12 w/ Connie's R-b.  I did drop the
fixes tag since pcibios_err_to_errno() has always handled -errno
correctly to avoid the unnecessary churn.  Thanks,

Alex

> 
> diff --git a/drivers/vfio/pci/vfio_pci_igd.c b/drivers/vfio/pci/vfio_pci_igd.c
> index 53d97f459..e66dfb017 100644
> --- a/drivers/vfio/pci/vfio_pci_igd.c
> +++ b/drivers/vfio/pci/vfio_pci_igd.c
> @@ -127,7 +127,7 @@ static size_t vfio_pci_igd_cfg_rw(struct vfio_pci_device *vdev,
>  
>  		ret = pci_user_read_config_byte(pdev, pos, &val);
>  		if (ret)
> -			return pcibios_err_to_errno(ret);
> +			return ret;
>  
>  		if (copy_to_user(buf + count - size, &val, 1))
>  			return -EFAULT;
> @@ -141,7 +141,7 @@ static size_t vfio_pci_igd_cfg_rw(struct vfio_pci_device *vdev,
>  
>  		ret = pci_user_read_config_word(pdev, pos, &val);
>  		if (ret)
> -			return pcibios_err_to_errno(ret);
> +			return ret;
>  
>  		val = cpu_to_le16(val);
>  		if (copy_to_user(buf + count - size, &val, 2))
> @@ -156,7 +156,7 @@ static size_t vfio_pci_igd_cfg_rw(struct vfio_pci_device *vdev,
>  
>  		ret = pci_user_read_config_dword(pdev, pos, &val);
>  		if (ret)
> -			return pcibios_err_to_errno(ret);
> +			return ret;
>  
>  		val = cpu_to_le32(val);
>  		if (copy_to_user(buf + count - size, &val, 4))
> @@ -171,7 +171,7 @@ static size_t vfio_pci_igd_cfg_rw(struct vfio_pci_device *vdev,
>  
>  		ret = pci_user_read_config_word(pdev, pos, &val);
>  		if (ret)
> -			return pcibios_err_to_errno(ret);
> +			return ret;
>  
>  		val = cpu_to_le16(val);
>  		if (copy_to_user(buf + count - size, &val, 2))
> @@ -186,7 +186,7 @@ static size_t vfio_pci_igd_cfg_rw(struct vfio_pci_device *vdev,
>  
>  		ret = pci_user_read_config_byte(pdev, pos, &val);
>  		if (ret)
> -			return pcibios_err_to_errno(ret);
> +			return ret;
>  
>  		if (copy_to_user(buf + count - size, &val, 1))
>  			return -EFAULT;
diff mbox series

Patch

diff --git a/drivers/vfio/pci/vfio_pci_igd.c b/drivers/vfio/pci/vfio_pci_igd.c
index 53d97f459..e66dfb017 100644
--- a/drivers/vfio/pci/vfio_pci_igd.c
+++ b/drivers/vfio/pci/vfio_pci_igd.c
@@ -127,7 +127,7 @@  static size_t vfio_pci_igd_cfg_rw(struct vfio_pci_device *vdev,
 
 		ret = pci_user_read_config_byte(pdev, pos, &val);
 		if (ret)
-			return pcibios_err_to_errno(ret);
+			return ret;
 
 		if (copy_to_user(buf + count - size, &val, 1))
 			return -EFAULT;
@@ -141,7 +141,7 @@  static size_t vfio_pci_igd_cfg_rw(struct vfio_pci_device *vdev,
 
 		ret = pci_user_read_config_word(pdev, pos, &val);
 		if (ret)
-			return pcibios_err_to_errno(ret);
+			return ret;
 
 		val = cpu_to_le16(val);
 		if (copy_to_user(buf + count - size, &val, 2))
@@ -156,7 +156,7 @@  static size_t vfio_pci_igd_cfg_rw(struct vfio_pci_device *vdev,
 
 		ret = pci_user_read_config_dword(pdev, pos, &val);
 		if (ret)
-			return pcibios_err_to_errno(ret);
+			return ret;
 
 		val = cpu_to_le32(val);
 		if (copy_to_user(buf + count - size, &val, 4))
@@ -171,7 +171,7 @@  static size_t vfio_pci_igd_cfg_rw(struct vfio_pci_device *vdev,
 
 		ret = pci_user_read_config_word(pdev, pos, &val);
 		if (ret)
-			return pcibios_err_to_errno(ret);
+			return ret;
 
 		val = cpu_to_le16(val);
 		if (copy_to_user(buf + count - size, &val, 2))
@@ -186,7 +186,7 @@  static size_t vfio_pci_igd_cfg_rw(struct vfio_pci_device *vdev,
 
 		ret = pci_user_read_config_byte(pdev, pos, &val);
 		if (ret)
-			return pcibios_err_to_errno(ret);
+			return ret;
 
 		if (copy_to_user(buf + count - size, &val, 1))
 			return -EFAULT;