On Fri, Mar 23, 2018 at 01:45:51PM +0000, Daniel Stone wrote:
> Make it a little more clear what's going on inside of getfb, and also
> make it easier to add alternate paths to get a handle in future.
> 
> Signed-off-by: Daniel Stone <dani...@collabora.com>

Much better.
Reviewed-by: Ville Syrjälä <ville.syrj...@linux.intel.com>

> ---
>  drivers/gpu/drm/drm_framebuffer.c | 33 +++++++++++++++++----------------
>  1 file changed, 17 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_framebuffer.c 
> b/drivers/gpu/drm/drm_framebuffer.c
> index ad67203de715..6d5ff541225a 100644
> --- a/drivers/gpu/drm/drm_framebuffer.c
> +++ b/drivers/gpu/drm/drm_framebuffer.c
> @@ -468,29 +468,30 @@ int drm_mode_getfb(struct drm_device *dev,
>               goto out;
>       }
>  
> +     if (!fb->funcs->create_handle) {
> +             ret = -ENODEV;
> +             goto out;
> +     }
> +
>       r->height = fb->height;
>       r->width = fb->width;
>       r->depth = fb->format->depth;
>       r->bpp = fb->format->cpp[0] * 8;
>       r->pitch = fb->pitches[0];
> -     if (fb->funcs->create_handle) {
> -             if (drm_is_current_master(file_priv) || capable(CAP_SYS_ADMIN) 
> ||
> -                 drm_is_control_client(file_priv)) {
> -                     ret = fb->funcs->create_handle(fb, file_priv,
> -                                                    &r->handle);
> -             } else {
> -                     /* GET_FB() is an unprivileged ioctl so we must not
> -                      * return a buffer-handle to non-master processes! For
> -                      * backwards-compatibility reasons, we cannot make
> -                      * GET_FB() privileged, so just return an invalid handle
> -                      * for non-masters. */
> -                     r->handle = 0;
> -                     ret = 0;
> -             }
> -     } else {
> -             ret = -ENODEV;
> +
> +     /* GET_FB() is an unprivileged ioctl so we must not return a
> +      * buffer-handle to non-master processes! For
> +      * backwards-compatibility reasons, we cannot make GET_FB() privileged,
> +      * so just return an invalid handle for non-masters. */
> +     if (!drm_is_current_master(file_priv) && !capable(CAP_SYS_ADMIN) &&
> +         !drm_is_control_client(file_priv)) {
> +             r->handle = 0;
> +             ret = 0;
> +             goto out;
>       }
>  
> +     ret = fb->funcs->create_handle(fb, file_priv, &r->handle);
> +
>  out:
>       drm_framebuffer_put(fb);
>  
> -- 
> 2.16.2
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to