diff options
-rw-r--r-- | va/drm/va_drm_auth.c | 19 |
1 files changed, 18 insertions, 1 deletions
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; } |