summaryrefslogtreecommitdiff
path: root/src/nss/nss_securitymanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/nss/nss_securitymanager.cpp')
-rw-r--r--src/nss/nss_securitymanager.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/nss/nss_securitymanager.cpp b/src/nss/nss_securitymanager.cpp
index 0e2ae5e6..2a975e69 100644
--- a/src/nss/nss_securitymanager.cpp
+++ b/src/nss/nss_securitymanager.cpp
@@ -106,7 +106,7 @@ enum nss_status _nss_securitymanager_initgroups_dyn(const char *user, gid_t grou
return NSS_STATUS_NOTFOUND;
}
- gid_t *groups;
+ gid_t *groups = NULL;
size_t groupsCount;
ret = security_manager_groups_get_for_user(pwnam->pw_uid, &groups, &groupsCount);
@@ -114,7 +114,6 @@ enum nss_status _nss_securitymanager_initgroups_dyn(const char *user, gid_t grou
// If user is not managed by Security Manager, we want to apply all the groups
ret = security_manager_groups_get(&groups, &groupsCount);
}
- auto groupsGuard = SecurityManager::makeUnique(groups, free);
if (ret == SECURITY_MANAGER_ERROR_MEMORY) {
*errnop = ENOMEM;
@@ -131,6 +130,8 @@ enum nss_status _nss_securitymanager_initgroups_dyn(const char *user, gid_t grou
return NSS_STATUS_UNAVAIL;
}
+ auto groupsGuard = SecurityManager::makeUnique(groups, free);
+
if (((*size) - (*start)) < static_cast<long int>(groupsCount)) {
long int required = (*start) + groupsCount;
// value bigger is the lowest power of 2 that is bigger than required value