Commit 7b7d7693 authored by Tvrtko Ursulin's avatar Tvrtko Ursulin Committed by Alex Deucher
Browse files

drm/amdgpu/userq: Do not allow userspace to trivially triger kernel warnings



Userspace can either deliberately pass in the too small num_fences, or the
required number can legitimately grow between the two calls to the userq
wait ioctl. In both cases we do not want the emit the kernel warning
backtrace since nothing is wrong with the kernel and userspace will simply
get an errno reported back. So lets simply drop the WARN_ONs.

Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@igalia.com>
Fixes: a292fdec ("drm/amdgpu: Implement userqueue signal/wait IOCTL")
Cc: Arunpravin Paneer Selvam <Arunpravin.PaneerSelvam@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 2c333ea5)
parent 49abfa81
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -833,7 +833,7 @@ int amdgpu_userq_wait_ioctl(struct drm_device *dev, void *data,

			dma_resv_for_each_fence(&resv_cursor, gobj_read[i]->resv,
						DMA_RESV_USAGE_READ, fence) {
				if (WARN_ON_ONCE(num_fences >= wait_info->num_fences)) {
				if (num_fences >= wait_info->num_fences) {
					r = -EINVAL;
					goto free_fences;
				}
@@ -850,7 +850,7 @@ int amdgpu_userq_wait_ioctl(struct drm_device *dev, void *data,

			dma_resv_for_each_fence(&resv_cursor, gobj_write[i]->resv,
						DMA_RESV_USAGE_WRITE, fence) {
				if (WARN_ON_ONCE(num_fences >= wait_info->num_fences)) {
				if (num_fences >= wait_info->num_fences) {
					r = -EINVAL;
					goto free_fences;
				}
@@ -874,7 +874,7 @@ int amdgpu_userq_wait_ioctl(struct drm_device *dev, void *data,
					goto free_fences;

				dma_fence_unwrap_for_each(f, &iter, fence) {
					if (WARN_ON_ONCE(num_fences >= wait_info->num_fences)) {
					if (num_fences >= wait_info->num_fences) {
						r = -EINVAL;
						dma_fence_put(fence);
						goto free_fences;
@@ -899,7 +899,7 @@ int amdgpu_userq_wait_ioctl(struct drm_device *dev, void *data,
			if (r)
				goto free_fences;

			if (WARN_ON_ONCE(num_fences >= wait_info->num_fences)) {
			if (num_fences >= wait_info->num_fences) {
				r = -EINVAL;
				dma_fence_put(fence);
				goto free_fences;