diff options
Diffstat (limited to 'libselinux/src/seusers.c')
-rw-r--r-- | libselinux/src/seusers.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/libselinux/src/seusers.c b/libselinux/src/seusers.c index cfea186a..09e704be 100644 --- a/libselinux/src/seusers.c +++ b/libselinux/src/seusers.c @@ -141,9 +141,16 @@ static int check_group(const char *group, const char *name, const gid_t gid) { } if (getgrouplist(name, gid, NULL, &ng) < 0) { - groups = (gid_t *) malloc(sizeof (gid_t) * ng); - if (!groups) goto done; - if (getgrouplist(name, gid, groups, &ng) < 0) goto done; + if (ng == 0) + goto done; + groups = calloc(ng, sizeof(*groups)); + if (!groups) + goto done; + if (getgrouplist(name, gid, groups, &ng) < 0) + goto done; + } else { + /* WTF? ng was 0 and we didn't fail? Are we in 0 groups? */ + goto done; } for (i = 0; i < ng; i++) { |