Index: /trunk/src/VBox/Additions/x11/VBoxClient/display-drm.cpp
===================================================================
--- /trunk/src/VBox/Additions/x11/VBoxClient/display-drm.cpp	(revision 84592)
+++ /trunk/src/VBox/Additions/x11/VBoxClient/display-drm.cpp	(revision 84593)
@@ -106,4 +106,9 @@
 static void drmConnect(struct DRMCONTEXT *pContext)
 {
+    uid_t guid = getuid();
+    if (setreuid(0, 0) == -1)
+    {
+        perror("setuid failed drm device open.");
+    }
     unsigned i;
     RTFILE hDevice;
@@ -145,4 +150,5 @@
     }
     pContext->hDevice = hDevice;
+    setreuid(guid, 0);
 }
 
@@ -163,7 +169,7 @@
 {
     uid_t guid = getuid();
-    if (setuid(0) == -1)
-    {
-        perror("setuid failed during drm ioctl.");
+    if (setreuid(0, 0) == -1)
+    {
+        perror("setuid failed drm device open.");
     }
 
@@ -179,15 +185,9 @@
     if (RT_FAILURE(rc) && rc != VERR_INVALID_PARAMETER)
         VBClLogFatalError("Failure updating layout, rc=%Rrc\n", rc);
-    setuid(guid);
+    setreuid(guid, 0);
 }
 
 int main(int argc, char *argv[])
 {
-    uid_t guid = getuid();
-    if (setuid(0) == -1)
-    {
-        perror("setuid failed during init.");
-    }
-
     int rc = RTR3InitExe(argc, &argv, 0);
     if (RT_FAILURE(rc))
@@ -223,5 +223,5 @@
         return VERR_INVALID_HANDLE;
     }
-    setuid(guid);
+
     for (;;)
     {
