drm: Reshuffle getfb error returns
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
This commit is contained in:
parent
83fd26c3f3
commit
487da6172f
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue