On Fri, Oct 9, 2026 at 5:56 AM Jesse Zhang <[email protected]> wrote:
>
> The UQ_FW_AREAS query computes the copy_to_user() result into ret and
> then returns 0 anyway, so userspace never learns that the metadata was
> not written. With an invalid return pointer all three IP types (GFX,
> COMPUTE, DMA) report success on Navi31.
>
> Return the copy_to_user() result like the other INFO queries do.
>
> Fixes: 44b69cf1d35c ("drm/amdgpu: Update AMDGPU_INFO_UQ_FW_AREAS query for 
> compute")
> Signed-off-by: Jesse Zhang <[email protected]>

Reviewed-by: Alex Deucher <[email protected]>

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 15 ++++++---------
>  1 file changed, 6 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> index 1589b6a6575f..b98091f31dda 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> @@ -1430,25 +1430,22 @@ int amdgpu_info_ioctl(struct drm_device *dev, void 
> *data, struct drm_file *filp)
>                         if (ret)
>                                 return ret;
>
> -                       ret = copy_to_user(out, &meta_info,
> -                                               min((size_t)size, 
> sizeof(meta_info))) ? -EFAULT : 0;
> -                       return 0;
> +                       return copy_to_user(out, &meta_info,
> +                                           min((size_t)size, 
> sizeof(meta_info))) ? -EFAULT : 0;
>                 case AMDGPU_HW_IP_COMPUTE:
>                         ret = amdgpu_userq_metadata_info_compute(adev, info, 
> &meta_info.compute);
>                         if (ret)
>                                 return ret;
>
> -                       ret = copy_to_user(out, &meta_info,
> -                                               min((size_t)size, 
> sizeof(meta_info))) ? -EFAULT : 0;
> -                       return 0;
> +                       return copy_to_user(out, &meta_info,
> +                                           min((size_t)size, 
> sizeof(meta_info))) ? -EFAULT : 0;
>                 case AMDGPU_HW_IP_DMA:
>                         ret = amdgpu_userq_metadata_info_sdma(adev, info, 
> &meta_info.sdma);
>                         if (ret)
>                                 return ret;
>
> -                       ret = copy_to_user(out, &meta_info,
> -                                               min((size_t)size, 
> sizeof(meta_info))) ? -EFAULT : 0;
> -                       return 0;
> +                       return copy_to_user(out, &meta_info,
> +                                           min((size_t)size, 
> sizeof(meta_info))) ? -EFAULT : 0;
>                 default:
>                         return -EINVAL;
>                 }
> --
> 2.50.1
>

Reply via email to