47 lines
1.4 KiB
Diff
47 lines
1.4 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
From: Benjamin Marzinski <bmarzins@redhat.com>
|
||
|
Date: Tue, 11 May 2021 15:25:21 -0500
|
||
|
Subject: [PATCH] multipath: free vectors in configure
|
||
|
|
||
|
configure() can retry multiple times, each time reallocing a maps and
|
||
|
paths vector, and leaking the previous ones. Fix this by always freeing
|
||
|
the vectors before configure() exits. Found by coverity.
|
||
|
|
||
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
||
|
---
|
||
|
multipath/main.c | 7 ++++++-
|
||
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/multipath/main.c b/multipath/main.c
|
||
|
index f618550d..9fe53dcd 100644
|
||
|
--- a/multipath/main.c
|
||
|
+++ b/multipath/main.c
|
||
|
@@ -512,7 +512,6 @@ configure (struct config *conf, enum mpath_cmds cmd,
|
||
|
*/
|
||
|
curmp = vector_alloc();
|
||
|
pathvec = vector_alloc();
|
||
|
- atexit(cleanup_vecs);
|
||
|
|
||
|
if (!curmp || !pathvec) {
|
||
|
condlog(0, "can not allocate memory");
|
||
|
@@ -624,6 +623,11 @@ out:
|
||
|
if (refwwid)
|
||
|
FREE(refwwid);
|
||
|
|
||
|
+ free_multipathvec(curmp, KEEP_PATHS);
|
||
|
+ vecs.mpvec = NULL;
|
||
|
+ free_pathvec(pathvec, FREE_PATHS);
|
||
|
+ vecs.pathvec = NULL;
|
||
|
+
|
||
|
return r;
|
||
|
}
|
||
|
|
||
|
@@ -869,6 +873,7 @@ main (int argc, char *argv[])
|
||
|
conf = get_multipath_config();
|
||
|
conf->retrigger_tries = 0;
|
||
|
conf->force_sync = 1;
|
||
|
+ atexit(cleanup_vecs);
|
||
|
while ((arg = getopt(argc, argv, ":aAdDcChl::eFfM:v:p:b:BrR:itTquUwW")) != EOF ) {
|
||
|
switch(arg) {
|
||
|
case 1: printf("optarg : %s\n",optarg);
|