cluster: STABLE32 - rgmanager: Fix memory leaks reported by static analyzer

Fabio M. Di Nitto fabbione at fedoraproject.org
Wed Aug 15 13:07:32 UTC 2012


Gitweb:        http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=cb7848612a50a06ab981b687ecdc31e455fe2cd9
Commit:        cb7848612a50a06ab981b687ecdc31e455fe2cd9
Parent:        13bea41ade9dd03a7e34b76a1b88e27b17962320
Author:        Lon Hohberger <lhh at redhat.com>
AuthorDate:    Fri Sep 16 15:05:24 2011 -0400
Committer:     Fabio M. Di Nitto <fdinitto at redhat.com>
CommitterDate: Wed Aug 15 11:04:38 2012 +0200

rgmanager: Fix memory leaks reported by static analyzer

Signed-off-by: Lon Hohberger <lhh at redhat.com>
---
 rgmanager/src/daemons/fo_domain.c |    4 +++-
 rgmanager/src/daemons/resrules.c  |    4 +++-
 rgmanager/src/daemons/restree.c   |    4 ++++
 rgmanager/src/daemons/rg_state.c  |    4 +++-
 4 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/rgmanager/src/daemons/fo_domain.c b/rgmanager/src/daemons/fo_domain.c
index 382301f..0ae1344 100644
--- a/rgmanager/src/daemons/fo_domain.c
+++ b/rgmanager/src/daemons/fo_domain.c
@@ -131,8 +131,10 @@ fod_get_domain(int ccsfd, char *base, int idx, fod_t **domains)
 	} while (!list_done(domains, fod));
 
 	fod = malloc(sizeof(*fod));
-	if (!fod)
+	if (!fod) {
+		free(ret);
 		return NULL;
+	}
 	memset(fod, 0, sizeof(*fod));
 	fod->fd_name = ret;
 	fod->fd_nodes = 0;
diff --git a/rgmanager/src/daemons/resrules.c b/rgmanager/src/daemons/resrules.c
index 873488e..c2cfdfa 100644
--- a/rgmanager/src/daemons/resrules.c
+++ b/rgmanager/src/daemons/resrules.c
@@ -1009,8 +1009,10 @@ read_resource_agent_metadata(char *filename)
 	waitpid(pid, NULL, 0);
 	close(_pipe[0]);
 
-	if (!size)
+	if (!size) {
+		free(data);
 		return NULL;
+	}
 
 	doc = xmlParseMemory(data, size);
 	free(data);
diff --git a/rgmanager/src/daemons/restree.c b/rgmanager/src/daemons/restree.c
index 9b70334..82f8f29 100644
--- a/rgmanager/src/daemons/restree.c
+++ b/rgmanager/src/daemons/restree.c
@@ -409,6 +409,10 @@ res_exec(resource_node_t *node, int op, const char *arg, int depth)
 			execle(fullpath, fullpath, op_str, arg, NULL, env);
 		else
 			execle(fullpath, fullpath, op_str, NULL, env);
+
+		/* Should not happen */
+		free(env);
+		exit(1);
 	}
 
 #ifdef DEBUG
diff --git a/rgmanager/src/daemons/rg_state.c b/rgmanager/src/daemons/rg_state.c
index 463e12f..30470ac 100644
--- a/rgmanager/src/daemons/rg_state.c
+++ b/rgmanager/src/daemons/rg_state.c
@@ -1945,8 +1945,10 @@ handle_relocate_req(char *svcName, int orig_request, int preferred_target,
 
 	while (memb_count(allowed_nodes)) {
 		target = best_target_node(allowed_nodes, me, svcName, 1);
-		if (target == me)
+		if (target == me) {
+			free_member_list(allowed_nodes);
 			goto exhausted;
+		}
 
 		retries = 0;
 retry:


More information about the cluster-commits mailing list