summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordjm@openbsd.org <djm@openbsd.org>2021-09-26 14:01:03 +0000
committerDamien Miller <djm@mindrot.org>2021-09-27 00:02:42 +1000
commitf3cbe43e28fe71427d41cfe3a17125b972710455 (patch)
treef69859cafa775fab31eaa03c88789aac50a0f5aa
parent8acaff41f7518be40774c626334157b1b1c5583c (diff)
upstream: need initgroups() before setresgid(); reported by anton@,
ok deraadt@ OpenBSD-Commit-ID: 6aa003ee658b316960d94078f2a16edbc25087ce
-rw-r--r--misc.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/misc.c b/misc.c
index b8d1040d..d94438da 100644
--- a/misc.c
+++ b/misc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: misc.c,v 1.169 2021/08/09 23:47:44 djm Exp $ */
+/* $OpenBSD: misc.c,v 1.170 2021/09/26 14:01:03 djm Exp $ */
/*
* Copyright (c) 2000 Markus Friedl. All rights reserved.
* Copyright (c) 2005-2020 Damien Miller. All rights reserved.
@@ -2695,6 +2695,12 @@ subprocess(const char *tag, const char *command,
}
closefrom(STDERR_FILENO + 1);
+ if (geteuid() == 0 &&
+ initgroups(pw->pw_name, pw->pw_gid) == -1) {
+ error("%s: initgroups(%s, %u): %s", tag,
+ pw->pw_name, (u_int)pw->pw_gid, strerror(errno));
+ _exit(1);
+ }
if (setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) == -1) {
error("%s: setresgid %u: %s", tag, (u_int)pw->pw_gid,
strerror(errno));