diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | stdlib/tst-secure-getenv.c | 19 |
2 files changed, 20 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog index aaa413df67..a23bdf29bd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2019-04-17 Mike Gerow <gerow@google.com> + + * stdlib/tst-secure-getenv.c (choose_gid): Remove 64 supplemental + groups limit. + 2019-04-11 Florian Weimer <fweimer@redhat.com> * resolv/nss_dns/dns-network.c (getanswer_r): Do not replace root diff --git a/stdlib/tst-secure-getenv.c b/stdlib/tst-secure-getenv.c index 74580b889a..94de199530 100644 --- a/stdlib/tst-secure-getenv.c +++ b/stdlib/tst-secure-getenv.c @@ -41,8 +41,14 @@ static char MAGIC_ARGUMENT[] = "run-actual-test"; static gid_t choose_gid (void) { - const int count = 64; - gid_t groups[count]; + int count = getgroups (0, NULL); + if (count < 0) + { + printf ("getgroups: %m\n"); + exit (1); + } + gid_t *groups; + groups = xcalloc (count, sizeof (*groups)); int ret = getgroups (count, groups); if (ret < 0) { @@ -50,12 +56,17 @@ choose_gid (void) exit (1); } gid_t current = getgid (); + gid_t not_current = 0; for (int i = 0; i < ret; ++i) { if (groups[i] != current) - return groups[i]; + { + not_current = groups[i]; + break; + } } - return 0; + free (groups); + return not_current; } |