diff mbox series

[v3,17/19] multipathd: fix memory leak on error in configure

Message ID 1537571127-10143-18-git-send-email-bmarzins@redhat.com (mailing list archive)
State Not Applicable, archived
Delegated to: christophe varoqui
Headers show
Series Misc Multipath patches | expand

Commit Message

Benjamin Marzinski Sept. 21, 2018, 11:05 p.m. UTC
If configure fails after allocing mpvec, it must free it. Found by
coverity.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
---
 multipathd/main.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

Comments

Martin Wilck Oct. 1, 2018, 9:42 p.m. UTC | #1
On Fri, 2018-09-21 at 18:05 -0500, Benjamin Marzinski wrote:
> If configure fails after allocing mpvec, it must free it. Found by
> coverity.
> 
> Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>

Reviewed-by: Martin Wilck <mwilck@suse.com>

> ---
>  multipathd/main.c | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/multipathd/main.c b/multipathd/main.c
> index 3c2fe7b..61ca455 100644
> --- a/multipathd/main.c
> +++ b/multipathd/main.c
> @@ -2277,7 +2277,7 @@ configure (struct vectors * vecs)
>  	ret = path_discovery(vecs->pathvec, DI_ALL);
>  	if (ret < 0) {
>  		condlog(0, "configure failed at path discovery");
> -		return 1;
> +		goto fail;
>  	}
>  
>  	vector_foreach_slot (vecs->pathvec, pp, i){
> @@ -2294,7 +2294,7 @@ configure (struct vectors * vecs)
>  	}
>  	if (map_discovery(vecs)) {
>  		condlog(0, "configure failed at map discovery");
> -		return 1;
> +		goto fail;
>  	}
>  
>  	/*
> @@ -2308,7 +2308,7 @@ configure (struct vectors * vecs)
>  		force_reload = FORCE_RELOAD_YES;
>  	if (ret) {
>  		condlog(0, "configure failed while coalescing paths");
> -		return 1;
> +		goto fail;
>  	}
>  
>  	/*
> @@ -2317,7 +2317,7 @@ configure (struct vectors * vecs)
>  	 */
>  	if (coalesce_maps(vecs, mpvec)) {
>  		condlog(0, "configure failed while coalescing maps");
> -		return 1;
> +		goto fail;
>  	}
>  
>  	dm_lib_release();
> @@ -2353,6 +2353,10 @@ configure (struct vectors * vecs)
>  			i--;
>  	}
>  	return 0;
> +
> +fail:
> +	vector_free(mpvec);
> +	return 1;
>  }
>  
>  int
diff mbox series

Patch

diff --git a/multipathd/main.c b/multipathd/main.c
index 3c2fe7b..61ca455 100644
--- a/multipathd/main.c
+++ b/multipathd/main.c
@@ -2277,7 +2277,7 @@  configure (struct vectors * vecs)
 	ret = path_discovery(vecs->pathvec, DI_ALL);
 	if (ret < 0) {
 		condlog(0, "configure failed at path discovery");
-		return 1;
+		goto fail;
 	}
 
 	vector_foreach_slot (vecs->pathvec, pp, i){
@@ -2294,7 +2294,7 @@  configure (struct vectors * vecs)
 	}
 	if (map_discovery(vecs)) {
 		condlog(0, "configure failed at map discovery");
-		return 1;
+		goto fail;
 	}
 
 	/*
@@ -2308,7 +2308,7 @@  configure (struct vectors * vecs)
 		force_reload = FORCE_RELOAD_YES;
 	if (ret) {
 		condlog(0, "configure failed while coalescing paths");
-		return 1;
+		goto fail;
 	}
 
 	/*
@@ -2317,7 +2317,7 @@  configure (struct vectors * vecs)
 	 */
 	if (coalesce_maps(vecs, mpvec)) {
 		condlog(0, "configure failed while coalescing maps");
-		return 1;
+		goto fail;
 	}
 
 	dm_lib_release();
@@ -2353,6 +2353,10 @@  configure (struct vectors * vecs)
 			i--;
 	}
 	return 0;
+
+fail:
+	vector_free(mpvec);
+	return 1;
 }
 
 int