On 9/30/26 10:30, Jesse Zhang wrote:
> mes_userq_mqd_create() returns -ENOMEM when copying the user MQD fails,
> even though memdup_user() returns -EFAULT for a bad pointer. Return
> PTR_ERR() instead.
>
> Fixes: 2c695d7c0720 ("drm/amdgpu: enable compute/gfx usermode queue")
> Fixes: 543b61453774 ("drm/amdgpu: enable SDMA usermode queues")
> Signed-off-by: Jesse Zhang <[email protected]>
> ---
> drivers/gpu/drm/amd/amdgpu/mes_userqueue.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
> b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
> index e6c167a39d44..fee00a8c08e7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
> @@ -408,7 +408,7 @@ static int mes_userq_mqd_create(struct
> amdgpu_usermode_queue *queue,
> compute_mqd = memdup_user(u64_to_user_ptr(mqd_user->mqd),
> mqd_user->mqd_size);
> if (IS_ERR(compute_mqd)) {
> DRM_ERROR("Failed to read user MQD\n");
While at it please drop all those error message.
First of all memdup_user() can be interrupted by a signal and that isn't really
an error, it just aborts the operation.
And then second spamming the logs with error messages on invalid IOCTL
parameters is usually seen as really bad idea.
Regards,
Christian.
> - r = -ENOMEM;
> + r = PTR_ERR(compute_mqd);
> goto free_mqd;
> }
>
> @@ -453,7 +453,7 @@ static int mes_userq_mqd_create(struct
> amdgpu_usermode_queue *queue,
> mqd_gfx_v11 = memdup_user(u64_to_user_ptr(mqd_user->mqd),
> mqd_user->mqd_size);
> if (IS_ERR(mqd_gfx_v11)) {
> DRM_ERROR("Failed to read user MQD\n");
> - r = -ENOMEM;
> + r = PTR_ERR(mqd_gfx_v11);
> goto free_mqd;
> }
>
> @@ -498,7 +498,7 @@ static int mes_userq_mqd_create(struct
> amdgpu_usermode_queue *queue,
> mqd_sdma_v11 = memdup_user(u64_to_user_ptr(mqd_user->mqd),
> mqd_user->mqd_size);
> if (IS_ERR(mqd_sdma_v11)) {
> DRM_ERROR("Failed to read sdma user MQD\n");
> - r = -ENOMEM;
> + r = PTR_ERR(mqd_sdma_v11);
> goto free_mqd;
> }
>