diff options
author | Amar Tumballi <amarts@redhat.com> | 2012-05-03 16:39:55 +0530 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2012-05-09 00:41:28 -0700 |
commit | 17b0814243b4ccd56c0ce570b7f42d5e572e1e71 (patch) | |
tree | c0fc4f62e4b518ac2c751a95e660e41444f91ea3 /xlators/features/marker/utils/src/gsyncd.c | |
parent | 53a09f49abb291625c96409627cba348f0c35e55 (diff) |
geo-replication: coverity resource leak fixes
Change-Id: I5739e9c9ae6fe78a6defb640d630e5f918ac1295
Signed-off-by: Amar Tumballi <amarts@redhat.com>
BUG: 789278
Reviewed-on: http://review.gluster.com/3266
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'xlators/features/marker/utils/src/gsyncd.c')
-rw-r--r-- | xlators/features/marker/utils/src/gsyncd.c | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/xlators/features/marker/utils/src/gsyncd.c b/xlators/features/marker/utils/src/gsyncd.c index d554e562b..24de4096f 100644 --- a/xlators/features/marker/utils/src/gsyncd.c +++ b/xlators/features/marker/utils/src/gsyncd.c @@ -166,21 +166,28 @@ find_gsyncd (pid_t pid, pid_t ppid, char *name, void *data) pid_t *pida = (pid_t *)data; if (ppid != pida[0]) - return 0; + goto out; ret = gf_asprintf (&p, PROC"/%d/cmdline", pid); if (ret == -1) { fprintf (stderr, "out of memory\n"); - return -1; + goto out; } + ret = 0; + fd = open (p, O_RDONLY); if (fd == -1) - return 0; + goto out; + ret = read (fd, buf, sizeof (buf)); close (fd); - if (ret == -1) - return 0; + + if (ret == -1) { + ret = 0; + goto out; + } + for (zeros = 0, p = buf; zeros < 2 && p < buf + ret; p++) zeros += !*p; @@ -201,12 +208,18 @@ find_gsyncd (pid_t pid, pid_t ppid, char *name, void *data) if (ret == 1) { if (pida[1] != -1) { fprintf (stderr, GSYNCD_PY" sibling is not unique"); - return -1; + ret = -1; + goto out; } pida[1] = pid; } - return 0; + ret = 0; +out: + if (p) + GF_FREE (p); + + return ret; } static int @@ -242,6 +255,8 @@ invoke_rsync (int argc, char **argv) } if (strcmp (name, "sshd") == 0) break; + GF_FREE (name); + name = NULL; } /* look up "ssh-sibling" gsyncd */ pida[0] = pid; @@ -269,10 +284,22 @@ invoke_rsync (int argc, char **argv) execvp (RSYNC, argv); + if (p) + GF_FREE (p); + + if (name) + GF_FREE (name); + fprintf (stderr, "exec of "RSYNC" failed\n"); return 127; error: + if (p) + GF_FREE (p); + + if (name) + GF_FREE (name); + fprintf (stderr, "disallowed "RSYNC" invocation\n"); return 1; } |