diff options
author | Daniel Stone <daniels@collabora.com> | 2018-03-20 18:58:39 -0400 |
---|---|---|
committer | Daniel Stone <daniels@collabora.com> | 2018-03-21 05:43:21 -0400 |
commit | b24791fe00f8b089d5b10cb7bcc4e1ae88b4831b (patch) | |
tree | 063efcf042652b4cfd76fdfe63994c39087130ff | |
parent | 1bc659eb2369ab795a401ff82f7e3a87a46bc864 (diff) |
drm: Reject getfb for multi-plane framebuffers
getfb can only return a single plane, so reject attempts to use it with
multi-plane framebuffers.
Signed-off-by: Daniel Stone <daniels@collabora.com>
Reported-by: Daniel van Vugt <daniel.van.vugt@canonical.com>
Reviewed-by: Rob Clark <robdclark@gmail.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Fixes: 308e5bcbdb10 ("drm: add an fb creation ioctl that takes a pixel format v5")
Cc: stable@vger.kernel.org # v3.3+
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105518
Link: https://patchwork.freedesktop.org/patch/msgid/20180320225839.30905-1-daniels@collabora.com
-rw-r--r-- | drivers/gpu/drm/drm_framebuffer.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c index c0530a1af5e3..2dc5e8bed172 100644 --- a/drivers/gpu/drm/drm_framebuffer.c +++ b/drivers/gpu/drm/drm_framebuffer.c | |||
@@ -461,6 +461,12 @@ int drm_mode_getfb(struct drm_device *dev, | |||
461 | if (!fb) | 461 | if (!fb) |
462 | return -ENOENT; | 462 | return -ENOENT; |
463 | 463 | ||
464 | /* Multi-planar framebuffers need getfb2. */ | ||
465 | if (fb->format->num_planes > 1) { | ||
466 | ret = -EINVAL; | ||
467 | goto out; | ||
468 | } | ||
469 | |||
464 | r->height = fb->height; | 470 | r->height = fb->height; |
465 | r->width = fb->width; | 471 | r->width = fb->width; |
466 | r->depth = fb->format->depth; | 472 | r->depth = fb->format->depth; |
@@ -484,6 +490,7 @@ int drm_mode_getfb(struct drm_device *dev, | |||
484 | ret = -ENODEV; | 490 | ret = -ENODEV; |
485 | } | 491 | } |
486 | 492 | ||
493 | out: | ||
487 | drm_framebuffer_put(fb); | 494 | drm_framebuffer_put(fb); |
488 | 495 | ||
489 | return ret; | 496 | return ret; |