Skip to content

Commit

Permalink
drm: Reshuffle getfb error returns
Browse files Browse the repository at this point in the history
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 <daniels@collabora.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180323134553.15993-3-daniels@collabora.com
  • Loading branch information
Daniel Stone committed Mar 30, 2018
1 parent 83fd26c commit 487da61
Showing 1 changed file with 18 additions and 16 deletions.
34 changes: 18 additions & 16 deletions drivers/gpu/drm/drm_framebuffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -468,29 +468,31 @@ 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);

Expand Down

0 comments on commit 487da61

Please sign in to comment.