summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--va/drm/va_drm_auth.c19
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;
}