psss / rpms / libsemanage

Forked from rpms/libsemanage 5 years ago
Clone
Blob Blame History Raw
diff --git a/libsemanage/src/genhomedircon.c b/libsemanage/src/genhomedircon.c
index f3b9b5c..1aea839 100644
--- a/libsemanage/src/genhomedircon.c
+++ b/libsemanage/src/genhomedircon.c
@@ -1070,8 +1070,10 @@ int semanage_genhomedircon(semanage_handle_t * sh,
 	s.fallback_user = strdup(FALLBACK_USER);
 	s.fallback_user_prefix = strdup(FALLBACK_USER_PREFIX);
 	s.fallback_user_level = strdup(FALLBACK_USER_LEVEL);
-	if (s.fallback_user == NULL || s.fallback_user_prefix == NULL || s.fallback_user_level == NULL)
-		return STATUS_ERR;
+	if (s.fallback_user == NULL || s.fallback_user_prefix == NULL || s.fallback_user_level == NULL) {
+		retval = STATUS_ERR;
+		goto done;
+	}
 
 	if (ignoredirs) ignore_setup(ignoredirs);
 
@@ -1082,15 +1084,19 @@ int semanage_genhomedircon(semanage_handle_t * sh,
 	if (!(out = fopen(s.fcfilepath, "w"))) {
 		/* couldn't open output file */
 		ERR(sh, "Could not open the file_context file for writing");
-		return STATUS_ERR;
+		retval = STATUS_ERR;
+		goto done;
 	}
 
 	retval = write_context_file(&s, out);
 
-	fclose(out);
+done:
+	if (out != NULL)
+		fclose(out);
 
 	free(s.fallback_user);
 	free(s.fallback_user_prefix);
+	free(s.fallback_user_level);
 	ignore_free();
 
 	return retval;