Blame SOURCES/nfs-utils-2.5.4-general-memory-fixes.patch

d13089
diff --git a/support/nfsidmap/nss.c b/support/nfsidmap/nss.c
d13089
index 669760b7..0f43076e 100644
d13089
--- a/support/nfsidmap/nss.c
d13089
+++ b/support/nfsidmap/nss.c
d13089
@@ -365,10 +365,8 @@ static int _nss_name_to_gid(char *name, gid_t *gid, int dostrip)
d13089
 out_buf:
d13089
 	free(buf);
d13089
 out_name:
d13089
-	if (dostrip)
d13089
-		free(localname);
d13089
-	if (get_reformat_group())
d13089
-		free(ref_name);
d13089
+	free(localname);
d13089
+	free(ref_name);
d13089
 out:
d13089
 	return err;
d13089
 }
d13089
diff --git a/support/nfsidmap/regex.c b/support/nfsidmap/regex.c
d13089
index fdbb2e2f..958b4ac8 100644
d13089
--- a/support/nfsidmap/regex.c
d13089
+++ b/support/nfsidmap/regex.c
d13089
@@ -157,6 +157,7 @@ again:
d13089
 	IDMAP_LOG(4, ("regexp_getpwnam: name '%s' mapped to '%s'",
d13089
 		  name, localname));
d13089
 
d13089
+	free(localname);
d13089
 	*err_p = 0;
d13089
 	return pw;
d13089
 
d13089
diff --git a/utils/gssd/gssd.c b/utils/gssd/gssd.c
d13089
index 4113cbab..833d8e01 100644
d13089
--- a/utils/gssd/gssd.c
d13089
+++ b/utils/gssd/gssd.c
d13089
@@ -1016,7 +1016,7 @@ read_gss_conf(void)
d13089
 		keytabfile = s;
d13089
 	s = conf_get_str("gssd", "cred-cache-directory");
d13089
 	if (s)
d13089
-		ccachedir = s;
d13089
+		ccachedir = strdup(s);
d13089
 	s = conf_get_str("gssd", "preferred-realm");
d13089
 	if (s)
d13089
 		preferred_realm = s;
d13089
@@ -1070,7 +1070,8 @@ main(int argc, char *argv[])
d13089
 				keytabfile = optarg;
d13089
 				break;
d13089
 			case 'd':
d13089
-				ccachedir = optarg;
d13089
+				free(ccachedir);
d13089
+				ccachedir = strdup(optarg);
d13089
 				break;
d13089
 			case 't':
d13089
 				context_timeout = atoi(optarg);
d13089
@@ -1133,7 +1134,6 @@ main(int argc, char *argv[])
d13089
 	}
d13089
 
d13089
 	if (ccachedir) {
d13089
-		char *ccachedir_copy;
d13089
 		char *ptr;
d13089
 
d13089
 		for (ptr = ccachedir, i = 2; *ptr; ptr++)
d13089
@@ -1141,8 +1141,7 @@ main(int argc, char *argv[])
d13089
 				i++;
d13089
 
d13089
 		ccachesearch = malloc(i * sizeof(char *));
d13089
-	       	ccachedir_copy = strdup(ccachedir);
d13089
-		if (!ccachedir_copy || !ccachesearch) {
d13089
+		if (!ccachesearch) {
d13089
 			printerr(0, "malloc failure\n");
d13089
 			exit(EXIT_FAILURE);
d13089
 		}
d13089
@@ -1274,6 +1273,7 @@ main(int argc, char *argv[])
d13089
 
d13089
 	free(preferred_realm);
d13089
 	free(ccachesearch);
d13089
+	free(ccachedir);
d13089
 
d13089
 	return rc < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
d13089
 }
d13089
diff --git a/utils/gssd/krb5_util.c b/utils/gssd/krb5_util.c
d13089
index c5f1152e..6d059f33 100644
d13089
--- a/utils/gssd/krb5_util.c
d13089
+++ b/utils/gssd/krb5_util.c
d13089
@@ -1129,6 +1129,12 @@ query_krb5_ccache(const char* cred_cache, char **ret_princname,
d13089
 			    *str = '\0';
d13089
 			    *ret_princname = strdup(princstring);
d13089
 			    *ret_realm = strdup(str+1);
d13089
+			    if (!*ret_princname || !*ret_realm) {
d13089
+				    free(*ret_princname);
d13089
+				    free(*ret_realm);
d13089
+				    *ret_princname = NULL;
d13089
+				    *ret_realm = NULL;
d13089
+			    }
d13089
 		    }
d13089
 		    k5_free_unparsed_name(context, princstring);
d13089
 		}
d13089
@@ -1350,15 +1356,19 @@ gssd_get_krb5_machine_cred_list(char ***list)
d13089
 		if (retval)
d13089
 			continue;
d13089
 		if (i + 1 > listsize) {
d13089
+			char **tmplist;
d13089
 			listsize += listinc;
d13089
-			l = (char **)
d13089
+			tmplist = (char **)
d13089
 				realloc(l, listsize * sizeof(char *));
d13089
-			if (l == NULL) {
d13089
+			if (tmplist == NULL) {
d13089
+				gssd_free_krb5_machine_cred_list(l);
d13089
 				retval = ENOMEM;
d13089
 				goto out_lock;
d13089
 			}
d13089
+			l = tmplist;
d13089
 		}
d13089
 		if ((l[i++] = strdup(ple->ccname)) == NULL) {
d13089
+			gssd_free_krb5_machine_cred_list(l);
d13089
 			retval = ENOMEM;
d13089
 			goto out_lock;
d13089
 		}
d13089
diff --git a/utils/mountd/rmtab.c b/utils/mountd/rmtab.c
d13089
index 2da97615..752fdb66 100644
d13089
--- a/utils/mountd/rmtab.c
d13089
+++ b/utils/mountd/rmtab.c
d13089
@@ -233,6 +233,9 @@ mountlist_list(void)
d13089
 			m->ml_directory = strdup(rep->r_path);
d13089
 
d13089
 			if (m->ml_hostname == NULL || m->ml_directory == NULL) {
d13089
+				free(m->ml_hostname);
d13089
+				free(m->ml_directory);
d13089
+				free(m);
d13089
 				mountlist_freeall(mlist);
d13089
 				mlist = NULL;
d13089
 				xlog(L_ERROR, "%s: memory allocation failed",