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

Benjamin Marzinski bmarzins at redhat.com
Wed May 12 19:53:44 UTC 2021


On Wed, May 12, 2021 at 12:36:42PM +0000, Martin Wilck wrote:
> 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.

Sure.

-Ben

> 
> Apart from that, ACK.
> 
> Martin




More information about the dm-devel mailing list