Hi Zoran,

Ack from me, code reviewed only.

BR,
Tai Dinh

DEK Technologies Vietnam
121/137 Le Loi Street, Ben Thanh Ward,
District 1, HCM City, Vietnam
Mobile: +84 9 33 37 82 90

-----Original Message-----
From: Zoran Milinkovic [mailto:[email protected]] 
Sent: Wednesday, August 26, 2015 10:22 PM
To: [email protected]
Cc: [email protected]
Subject: [PATCH 1 of 1] osaf: fix memory leak in daemonize [#1461]

 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

Reply via email to