osaf/libs/core/common/osaf_secutil.c | 14 ++++++++------
1 files changed, 8 insertions(+), 6 deletions(-)
The patch fixes a memory leak adding endgrent() in missed places in
osaf_get_group_list().
diff --git a/osaf/libs/core/common/osaf_secutil.c
b/osaf/libs/core/common/osaf_secutil.c
--- a/osaf/libs/core/common/osaf_secutil.c
+++ b/osaf/libs/core/common/osaf_secutil.c
@@ -327,7 +327,7 @@ done:
int osaf_get_group_list(const uid_t uid, const gid_t gid, gid_t *groups, int
*ngroups)
{
- int rc = 0;
+ int rc = -1; // Initially set to error
int size = 0;
int max_groups = sysconf(_SC_NGROUPS_MAX);
if (max_groups == -1){
@@ -370,7 +370,7 @@ int osaf_get_group_list(const uid_t uid,
struct group *gr = getgrent();
if (errno != 0) {
LOG_NO("setgrent failed: %s", strerror(errno));
- return -1;
+ goto done;
}
while (gr){
@@ -379,7 +379,7 @@ int osaf_get_group_list(const uid_t uid,
gr = getgrent();
if (errno != 0) {
LOG_NO("setgrent failed: %s", strerror(errno));
- return -1;
+ goto done;
}
continue;
}
@@ -399,12 +399,11 @@ int osaf_get_group_list(const uid_t uid,
gr = getgrent();
if (errno != 0) {
LOG_NO("setgrent failed: %s", strerror(errno));
- return -1;
+ goto done;
}
}
- endgrent();
-
+ // rc will be set to non-error value
if (groups){
*ngroups = (size < *ngroups)? size : *ngroups;
rc = size;
@@ -413,5 +412,8 @@ int osaf_get_group_list(const uid_t uid,
rc = 0;
}
+done:
+ endgrent();
+
return rc;
}
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel