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

Gwenole Beauchesne gb.devel at gmail.com
Mon Jul 15 09:30:11 PDT 2013


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>
---
 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



More information about the Libva mailing list