size_t fi = 0, ai = 0, size = 0;
gid_t forbg = -1, allog = -1;
int ret;
- gid_t grp[NGROUPS_MAX+1];
+ gid_t *grp = static_cast<gid_t*>(malloc(sizeof(gid_t) * (NGROUPS_MAX + 1)));
- ret = getgroups(sizeof grp / sizeof *grp, grp);
+ if (!grp) {
+ LogError("Unable to allocate memory for supplementary groups");
+ return SECURITY_MANAGER_ERROR_MEMORY;
+ }
+
+ auto deleter = [&](gid_t* ptr){free(ptr);};
+ std::unique_ptr<gid_t, decltype(deleter)> scopedGidBuffer(grp, deleter);
+
+ ret = getgroups(NGROUPS_MAX + 1, grp);
if (ret < 0) {
LogError("Unable to get list of current supplementary groups: " <<
GetErrnoString(errno));