diff options
Diffstat (limited to 'src/nss/nss_securitymanager.cpp')
-rw-r--r-- | src/nss/nss_securitymanager.cpp | 5 |
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 |