diff options
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 8 |
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); |