[Libva] [PATCH] drm: improve check for authentication.

Daniel Vetter daniel at ffwll.ch
Tue Jul 16 05:27:40 PDT 2013


On Mon, Jul 15, 2013 at 6:30 PM, Gwenole Beauchesne <gb.devel at gmail.com> wrote:
> Hi,
>
> I will push the following patch tomorrow.
>
> On Linux systems, the drmGetClient() function would return the thread ID
> instead of the actual process ID.
>
> Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne at intel.com>

Oh dear, why is it always libva. I've prepared a patch to kill this
ioctl (almost) completely since it's imo rather pointless. Now I've
just discovered that libva uses it and will make it much harder to
fake things in the kernel! Or have I just misread the code and it's
actually possible to return -EINVAL for this ioctl and libva will
transparently fall back to doing the X11 auth stuff? Any reason we
can't just rip this out?

http://www.spinics.net/lists/dri-devel/msg41204.html

Cheers, Daniel

> ---
>  va/drm/va_drm_auth.c |   19 ++++++++++++++++++-
>  1 file changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/va/drm/va_drm_auth.c b/va/drm/va_drm_auth.c
> index 59aecaf..53794d3 100644
> --- a/va/drm/va_drm_auth.c
> +++ b/va/drm/va_drm_auth.c
> @@ -28,6 +28,23 @@
>  #include "va_drm_auth.h"
>  #include "va_drm_auth_x11.h"
>
> +#if defined __linux__
> +# include <sys/syscall.h>
> +#endif
> +
> +/* Checks whether the thread id is the current thread */
> +static bool
> +is_local_tid(pid_t tid)
> +{
> +#if defined __linux__
> +    /* On Linux systems, drmGetClient() would return the thread ID
> +       instead of the actual process ID */
> +    return syscall(SYS_gettid) == tid;
> +#else
> +    return false;
> +#endif
> +}
> +
>  /* Checks whether DRM connection is authenticated */
>  bool
>  va_drm_is_authenticated(int fd)
> @@ -41,7 +58,7 @@ va_drm_is_authenticated(int fd)
>      for (i = 0; !is_authenticated; i++) {
>          if (drmGetClient(fd, i, &auth, &pid, &uid, &magic, &iocs) != 0)
>              break;
> -        is_authenticated = auth && pid == client_pid;
> +        is_authenticated = auth && (pid == client_pid || is_local_tid(pid));
>      }
>      return is_authenticated;
>  }
> --
> 1.7.9.5
>
> _______________________________________________
> Libva mailing list
> Libva at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/libva



--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch


More information about the Libva mailing list