]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Call getgroups() to know size of supplementary groups array to allocate
authorRenaud Métrich <rmetrich@redhat.com>
Fri, 13 Sep 2019 09:18:18 +0000 (11:18 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 16 Sep 2019 06:51:36 +0000 (08:51 +0200)
Resolves RHBZ #1743230 - journalctl dumps core when stack limit is reduced to 256 KB

src/basic/user-util.c

index 3b253bc264dd368120b4845e91750135a2f1c8b2..957285c091417968cace4c99f6bafaec7777e894 100644 (file)
@@ -410,9 +410,8 @@ char* gid_to_name(gid_t gid) {
 }
 
 int in_gid(gid_t gid) {
-        long ngroups_max;
         gid_t *gids;
-        int r, i;
+        int ngroups, r, i;
 
         if (getgid() == gid)
                 return 1;
@@ -423,12 +422,15 @@ int in_gid(gid_t gid) {
         if (!gid_is_valid(gid))
                 return -EINVAL;
 
-        ngroups_max = sysconf(_SC_NGROUPS_MAX);
-        assert(ngroups_max > 0);
+        ngroups = getgroups(0, NULL);
+        if (ngroups < 0)
+                return -errno;
+        if (ngroups == 0)
+                return 0;
 
-        gids = newa(gid_t, ngroups_max);
+        gids = newa(gid_t, ngroups);
 
-        r = getgroups(ngroups_max, gids);
+        r = getgroups(ngroups, gids);
         if (r < 0)
                 return -errno;