Index: /trunk/src/VBox/Runtime/r3/posix/process-posix.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r3/posix/process-posix.cpp	(revision 29635)
+++ /trunk/src/VBox/Runtime/r3/posix/process-posix.cpp	(revision 29636)
@@ -64,4 +64,5 @@
 #include <iprt/socket.h>
 #include <iprt/string.h>
+#include <iprt/mem.h>
 #include "internal/process.h"
 
@@ -94,12 +95,15 @@
         pw->pw_passwd = spwd->sp_pwdp;
 
-    struct crypt_data data;
-    char *pszEncPasswd = crypt_r(pszPasswd, pw->pw_passwd, &data);
+    /* be reentrant */
+    struct crypt_data *data = (struct crypt_data*)RTMemTmpAllocZ(sizeof(*data));
+    char *pszEncPasswd = crypt_r(pszPasswd, pw->pw_passwd, data);
     if (strcmp(pszEncPasswd, pw->pw_passwd))
         return VERR_PERMISSION_DENIED;
+    RTMemTmpFree(data);
 
     *gid = pw->pw_gid;
     *uid = pw->pw_uid;
     return VINF_SUCCESS;
+
 #elif defined(RT_OS_SOLARIS)
     struct passwd *ppw, pw;
@@ -125,4 +129,5 @@
     *uid = ppw->pw_uid;
     return VINF_SUCCESS;
+
 #else
     return VERR_PERMISSION_DENIED;
