580ca58
# using setresgid() for safely dropping utmp group membership.
580ca58
--- a/tmux.c
580ca58
+++ b/tmux.c
580ca58
@@ -236,9 +236,11 @@
580ca58
 {
580ca58
 	char		base[MAXPATHLEN], *path;
580ca58
 	struct stat	sb;
580ca58
-	u_int		uid;
580ca58
+	u_int		uid,gid;
580ca58
 
580ca58
 	uid = getuid();
580ca58
+	gid = getgid();
580ca58
+
580ca58
 	xsnprintf(base, MAXPATHLEN, "%s/%s/%s-%d", _PATH_VARRUN, __progname, __progname, uid);
580ca58
 
580ca58
 	if (mkdir(base, S_IRWXU) != 0 && errno != EEXIST)
580ca58
@@ -254,6 +256,9 @@
580ca58
 		errno = EACCES;
580ca58
 		return (NULL);
580ca58
 	}
580ca58
+	/* drop unnecessary privileges */
580ca58
+ 	if (setresgid(gid, gid, gid) != 0)
580ca58
+ 		return (NULL);
580ca58
 
580ca58
 	xasprintf(&path, "%s/%s", base, label);
580ca58
 	return (path);