> This is more of a question than a patch...
>
> 1) Is DRM_CONTROL_ALLOW still relevant? If yes, does it make sense to add a
> check for it in drm_ioctl as per the patch below?
It's relevant but not really used properly yet, I think that may be a
missing patch from kms port.
> 2) Is it really necessary to have DRM_MASTER set on the "getter" ioctl's or
> can they be removed as per the patch below?
Thats a good question, I think the main problem is for example the
getconnector can cause side effects, I'm not really sure what use these
ioctls are to non-master apps except for test apps in which case they
should be master.
Dave.
>
> I found the the modetest application in libdrm fails to work because it is not
> 'master' and the getter-ioctls require that. By loosening this restriction,
> the modetest applications works better.
> ---
> drivers/gpu/drm/drm_drv.c | 19 ++++++++++---------
> 1 files changed, 10 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
> index c4ada8b..ffaf0b4 100644
> --- a/drivers/gpu/drm/drm_drv.c
> +++ b/drivers/gpu/drm/drm_drv.c
> @@ -129,20 +129,20 @@ static struct drm_ioctl_desc drm_ioctls[] = {
> DRM_IOCTL_DEF(DRM_IOCTL_GEM_FLINK, drm_gem_flink_ioctl, DRM_AUTH),
> DRM_IOCTL_DEF(DRM_IOCTL_GEM_OPEN, drm_gem_open_ioctl, DRM_AUTH),
>
> - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETRESOURCES, drm_mode_getresources,
> DRM_MASTER|DRM_CONTROL_ALLOW),
> - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCRTC, drm_mode_getcrtc,
> DRM_MASTER|DRM_CONTROL_ALLOW),
> + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETRESOURCES,
> drm_mode_getresources,DRM_CONTROL_ALLOW),
> + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCRTC, drm_mode_getcrtc,
> DRM_CONTROL_ALLOW),
> DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETCRTC, drm_mode_setcrtc,
> DRM_MASTER|DRM_CONTROL_ALLOW),
> DRM_IOCTL_DEF(DRM_IOCTL_MODE_CURSOR, drm_mode_cursor_ioctl,
> DRM_MASTER|DRM_CONTROL_ALLOW),
> - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETGAMMA, drm_mode_gamma_get_ioctl,
> DRM_MASTER),
> + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETGAMMA, drm_mode_gamma_get_ioctl, 0),
> DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETGAMMA, drm_mode_gamma_set_ioctl,
> DRM_MASTER),
> - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETENCODER, drm_mode_getencoder,
> DRM_MASTER|DRM_CONTROL_ALLOW),
> - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCONNECTOR, drm_mode_getconnector,
> DRM_MASTER|DRM_CONTROL_ALLOW),
> + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETENCODER, drm_mode_getencoder,
> DRM_CONTROL_ALLOW),
> + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCONNECTOR, drm_mode_getconnector,
> DRM_CONTROL_ALLOW),
> DRM_IOCTL_DEF(DRM_IOCTL_MODE_ATTACHMODE, drm_mode_attachmode_ioctl,
> DRM_MASTER|DRM_CONTROL_ALLOW),
> DRM_IOCTL_DEF(DRM_IOCTL_MODE_DETACHMODE, drm_mode_detachmode_ioctl,
> DRM_MASTER|DRM_CONTROL_ALLOW),
> - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPERTY, drm_mode_getproperty_ioctl,
> DRM_MASTER | DRM_CONTROL_ALLOW),
> + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPERTY, drm_mode_getproperty_ioctl,
> DRM_CONTROL_ALLOW),
> DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETPROPERTY,
> drm_mode_connector_property_set_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW),
> - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPBLOB, drm_mode_getblob_ioctl,
> DRM_MASTER|DRM_CONTROL_ALLOW),
> - DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB, drm_mode_getfb,
> DRM_MASTER|DRM_CONTROL_ALLOW),
> + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPBLOB, drm_mode_getblob_ioctl,
> DRM_CONTROL_ALLOW),
> + DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB, drm_mode_getfb, DRM_CONTROL_ALLOW),
> DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB, drm_mode_addfb,
> DRM_MASTER|DRM_CONTROL_ALLOW),
> DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb,
> DRM_MASTER|DRM_CONTROL_ALLOW),
> };
> @@ -456,7 +456,8 @@ int drm_ioctl(struct inode *inode, struct file *filp,
> retcode = -EINVAL;
> } else if (((ioctl->flags & DRM_ROOT_ONLY) && !capable(CAP_SYS_ADMIN))
> ||
> ((ioctl->flags & DRM_AUTH) && !file_priv->authenticated) ||
> - ((ioctl->flags & DRM_MASTER) && !file_priv->is_master)) {
> + ((ioctl->flags & DRM_MASTER) && !file_priv->is_master) ||
> + ((!(ioctl->flags & DRM_CONTROL_ALLOW)) &&
> (file_priv->minor->type == DRM_MINOR_CONTROL))) {
> retcode = -EACCES;
> } else {
> if (cmd & (IOC_IN | IOC_OUT)) {
>
------------------------------------------------------------------------------
Stay on top of everything new and different, both inside and
around Java (TM) technology - register by April 22, and save
$200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco.
300 plus technical and hands-on sessions. Register today.
Use priority code J9JMT32. http://p.sf.net/sfu/p
--
_______________________________________________
Dri-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dri-devel