aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/drm_crtc.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 5ebc972c0b6d..bff2fa941f60 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -2641,10 +2641,22 @@ int drm_mode_getfb(struct drm_device *dev,
2641 r->depth = fb->depth; 2641 r->depth = fb->depth;
2642 r->bpp = fb->bits_per_pixel; 2642 r->bpp = fb->bits_per_pixel;
2643 r->pitch = fb->pitches[0]; 2643 r->pitch = fb->pitches[0];
2644 if (fb->funcs->create_handle) 2644 if (fb->funcs->create_handle) {
2645 ret = fb->funcs->create_handle(fb, file_priv, &r->handle); 2645 if (file_priv->is_master || capable(CAP_SYS_ADMIN)) {
2646 else 2646 ret = fb->funcs->create_handle(fb, file_priv,
2647 &r->handle);
2648 } else {
2649 /* GET_FB() is an unprivileged ioctl so we must not
2650 * return a buffer-handle to non-master processes! For
2651 * backwards-compatibility reasons, we cannot make
2652 * GET_FB() privileged, so just return an invalid handle
2653 * for non-masters. */
2654 r->handle = 0;
2655 ret = 0;
2656 }
2657 } else {
2647 ret = -ENODEV; 2658 ret = -ENODEV;
2659 }
2648 2660
2649 drm_framebuffer_unreference(fb); 2661 drm_framebuffer_unreference(fb);
2650 2662