diff options
| -rw-r--r-- | drivers/gpu/drm/drm_crtc.c | 18 |
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 | ||
