Blame SOURCES/0002-libmultipath-fix-leak-in-foreign-code.patch

b6d9ac
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
b6d9ac
From: Benjamin Marzinski <bmarzins@redhat.com>
b6d9ac
Date: Mon, 7 Oct 2019 17:17:13 -0500
b6d9ac
Subject: [PATCH] libmultipath: fix leak in foreign code
b6d9ac
b6d9ac
If scandir fails or finds no foreign libraries, enable_re needs to be
b6d9ac
freed before exitting.
b6d9ac
b6d9ac
Fixes: 8d03eda4 'multipath.conf: add "enable_foreign" parameter'
b6d9ac
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
b6d9ac
---
b6d9ac
 libmultipath/foreign.c | 11 +++++++----
b6d9ac
 1 file changed, 7 insertions(+), 4 deletions(-)
b6d9ac
b6d9ac
diff --git a/libmultipath/foreign.c b/libmultipath/foreign.c
b6d9ac
index 4b34e141..68e9a9b8 100644
b6d9ac
--- a/libmultipath/foreign.c
b6d9ac
+++ b/libmultipath/foreign.c
b6d9ac
@@ -129,7 +129,7 @@ static int _init_foreign(const char *multipath_dir, const char *enable)
b6d9ac
 	char pathbuf[PATH_MAX];
b6d9ac
 	struct dirent **di;
b6d9ac
 	struct scandir_result sr;
b6d9ac
-	int r, i;
b6d9ac
+	int r, i, ret = 0;
b6d9ac
 	regex_t *enable_re = NULL;
b6d9ac
 
b6d9ac
 	foreigns = vector_alloc();
b6d9ac
@@ -157,13 +157,15 @@ static int _init_foreign(const char *multipath_dir, const char *enable)
b6d9ac
 	if (r == 0) {
b6d9ac
 		condlog(3, "%s: no foreign multipath libraries found",
b6d9ac
 			__func__);
b6d9ac
-		return 0;
b6d9ac
+		ret = 0;
b6d9ac
+		goto out;
b6d9ac
 	} else if (r < 0) {
b6d9ac
 		r = errno;
b6d9ac
 		condlog(1, "%s: error %d scanning foreign multipath libraries",
b6d9ac
 			__func__, r);
b6d9ac
 		_cleanup_foreign();
b6d9ac
-		return -r;
b6d9ac
+		ret = -r;
b6d9ac
+		goto out;
b6d9ac
 	}
b6d9ac
 
b6d9ac
 	sr.di = di;
b6d9ac
@@ -250,8 +252,9 @@ static int _init_foreign(const char *multipath_dir, const char *enable)
b6d9ac
 		free_foreign(fgn);
b6d9ac
 	}
b6d9ac
 	pthread_cleanup_pop(1); /* free_scandir_result */
b6d9ac
+out:
b6d9ac
 	pthread_cleanup_pop(1); /* free_pre */
b6d9ac
-	return 0;
b6d9ac
+	return ret;
b6d9ac
 }
b6d9ac
 
b6d9ac
 int init_foreign(const char *multipath_dir, const char *enable)
b6d9ac
-- 
b6d9ac
2.17.2
b6d9ac