[dm-devel] [PATCH 4/5] multipath: free vectors in configure

Martin Wilck martin.wilck at suse.com
Wed May 12 12:36:42 UTC 2021


On Tue, 2021-05-11 at 18:22 -0500, Benjamin Marzinski wrote:
> 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 at redhat.com>
> ---
>  multipath/main.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/multipath/main.c b/multipath/main.c
> index ef89c7cf..25c5dbfd 100644
> --- a/multipath/main.c
> +++ b/multipath/main.c
> @@ -466,7 +466,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");
> @@ -578,6 +577,11 @@ out:
>         if (refwwid)
>                 FREE(refwwid);
>  
> +       free_multipathvec(curmp, KEEP_PATHS);
> +       vecs.mpvec = NULL;
> +       free_pathvec(pathvec, FREE_PATHS);
> +       vecs.pathvec = NULL;
> +
>         return r;
>  }
>  
> @@ -1053,6 +1057,7 @@ main (int argc, char *argv[])
>                 r = dm_flush_maps(1, retries) ? RTVL_FAIL : RTVL_OK;
>                 goto out;
>         }
> +       atexit(cleanup_vecs);
>         while ((r = configure(conf, cmd, dev_type, dev)) ==
> RTVL_RETRY)
>                 condlog(3, "restart multipath configuration
> process");
>  


Nit: I'd rather move this atexit() call towards the beginning of
main(), after the other atexit() calls.

Apart from that, ACK.

Martin





More information about the dm-devel mailing list