aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0554-drm-amdgpu-make-UVD-handle-checking-more-strict.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0554-drm-amdgpu-make-UVD-handle-checking-more-strict.patch')
-rw-r--r--common/recipes-kernel/linux/files/0554-drm-amdgpu-make-UVD-handle-checking-more-strict.patch114
1 files changed, 0 insertions, 114 deletions
diff --git a/common/recipes-kernel/linux/files/0554-drm-amdgpu-make-UVD-handle-checking-more-strict.patch b/common/recipes-kernel/linux/files/0554-drm-amdgpu-make-UVD-handle-checking-more-strict.patch
deleted file mode 100644
index 006d5fe2..00000000
--- a/common/recipes-kernel/linux/files/0554-drm-amdgpu-make-UVD-handle-checking-more-strict.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From 5146419e6feb99cfbc8dbf005dd2f62603e15efb Mon Sep 17 00:00:00 2001
-From: Leo Liu <leo.liu@amd.com>
-Date: Tue, 15 Sep 2015 10:38:38 -0400
-Subject: [PATCH 0554/1050] drm/amdgpu: make UVD handle checking more strict
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Invalid messages can crash the hw otherwise
-
-Ported from radeon commit a1b403da70e038ca6c6c6fe434d1d873546873a3
-
-Signed-off-by: Leo Liu <leo.liu@amd.com>
-Reviewed-by: Christian König <christian.koenig@amd.com>
-Cc: stable@vger.kernel.org
----
- drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 68 ++++++++++++++++++++-------------
- 1 file changed, 41 insertions(+), 27 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
-index 1a8e43b..d0312364 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
-@@ -543,46 +543,60 @@ static int amdgpu_uvd_cs_msg(struct amdgpu_uvd_cs_ctx *ctx,
- return -EINVAL;
- }
-
-- if (msg_type == 1) {
-+ switch (msg_type) {
-+ case 0:
-+ /* it's a create msg, calc image size (width * height) */
-+ amdgpu_bo_kunmap(bo);
-+
-+ /* try to alloc a new handle */
-+ for (i = 0; i < AMDGPU_MAX_UVD_HANDLES; ++i) {
-+ if (atomic_read(&adev->uvd.handles[i]) == handle) {
-+ DRM_ERROR("Handle 0x%x already in use!\n", handle);
-+ return -EINVAL;
-+ }
-+
-+ if (!atomic_cmpxchg(&adev->uvd.handles[i], 0, handle)) {
-+ adev->uvd.filp[i] = ctx->parser->filp;
-+ return 0;
-+ }
-+ }
-+
-+ DRM_ERROR("No more free UVD handles!\n");
-+ return -EINVAL;
-+
-+ case 1:
- /* it's a decode msg, calc buffer sizes */
- r = amdgpu_uvd_cs_msg_decode(msg, ctx->buf_sizes);
- amdgpu_bo_kunmap(bo);
- if (r)
- return r;
-
-- } else if (msg_type == 2) {
-+ /* validate the handle */
-+ for (i = 0; i < AMDGPU_MAX_UVD_HANDLES; ++i) {
-+ if (atomic_read(&adev->uvd.handles[i]) == handle) {
-+ if (adev->uvd.filp[i] != ctx->parser->filp) {
-+ DRM_ERROR("UVD handle collision detected!\n");
-+ return -EINVAL;
-+ }
-+ return 0;
-+ }
-+ }
-+
-+ DRM_ERROR("Invalid UVD handle 0x%x!\n", handle);
-+ return -ENOENT;
-+
-+ case 2:
- /* it's a destroy msg, free the handle */
- for (i = 0; i < AMDGPU_MAX_UVD_HANDLES; ++i)
- atomic_cmpxchg(&adev->uvd.handles[i], handle, 0);
- amdgpu_bo_kunmap(bo);
- return 0;
-- } else {
-- /* it's a create msg */
-- amdgpu_bo_kunmap(bo);
--
-- if (msg_type != 0) {
-- DRM_ERROR("Illegal UVD message type (%d)!\n", msg_type);
-- return -EINVAL;
-- }
--
-- /* it's a create msg, no special handling needed */
-- }
--
-- /* create or decode, validate the handle */
-- for (i = 0; i < AMDGPU_MAX_UVD_HANDLES; ++i) {
-- if (atomic_read(&adev->uvd.handles[i]) == handle)
-- return 0;
-- }
-
-- /* handle not found try to alloc a new one */
-- for (i = 0; i < AMDGPU_MAX_UVD_HANDLES; ++i) {
-- if (!atomic_cmpxchg(&adev->uvd.handles[i], 0, handle)) {
-- adev->uvd.filp[i] = ctx->parser->filp;
-- return 0;
-- }
-+ default:
-+ DRM_ERROR("Illegal UVD message type (%d)!\n", msg_type);
-+ return -EINVAL;
- }
--
-- DRM_ERROR("No more free UVD handles!\n");
-+ BUG();
- return -EINVAL;
- }
-
---
-1.9.1
-