aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_display.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
index cb72d9675ab1..dafc645b2e4e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
@@ -531,6 +531,7 @@ amdgpu_display_user_framebuffer_create(struct drm_device *dev,
531 struct drm_gem_object *obj; 531 struct drm_gem_object *obj;
532 struct amdgpu_framebuffer *amdgpu_fb; 532 struct amdgpu_framebuffer *amdgpu_fb;
533 int ret; 533 int ret;
534 int height;
534 struct amdgpu_device *adev = dev->dev_private; 535 struct amdgpu_device *adev = dev->dev_private;
535 int cpp = drm_format_plane_cpp(mode_cmd->pixel_format, 0); 536 int cpp = drm_format_plane_cpp(mode_cmd->pixel_format, 0);
536 int pitch = mode_cmd->pitches[0] / cpp; 537 int pitch = mode_cmd->pitches[0] / cpp;
@@ -555,6 +556,13 @@ amdgpu_display_user_framebuffer_create(struct drm_device *dev,
555 return ERR_PTR(-EINVAL); 556 return ERR_PTR(-EINVAL);
556 } 557 }
557 558
559 height = ALIGN(mode_cmd->height, 8);
560 if (obj->size < pitch * height) {
561 DRM_DEBUG_KMS("Invalid GEM size: expecting >= %d but got %zu\n",
562 pitch * height, obj->size);
563 return ERR_PTR(-EINVAL);
564 }
565
558 amdgpu_fb = kzalloc(sizeof(*amdgpu_fb), GFP_KERNEL); 566 amdgpu_fb = kzalloc(sizeof(*amdgpu_fb), GFP_KERNEL);
559 if (amdgpu_fb == NULL) { 567 if (amdgpu_fb == NULL) {
560 drm_gem_object_put_unlocked(obj); 568 drm_gem_object_put_unlocked(obj);