Fixup pathgroup allocation in disassemble_map()
authorHannes Reinecke <hare@suse.de>
Tue, 8 Jan 2013 13:53:41 +0000 (14:53 +0100)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Tue, 8 Jan 2013 22:18:28 +0000 (23:18 +0100)
The check for empty path groups in disassemble_map() is not quite
correct; we might end up removing the pathgroup vector even though
there are some entries in it.

Signed-off-by: Hannes Reinecke <hare@suse.de>
libmultipath/dmparser.c

index b3c52fc..a45854d 100644 (file)
@@ -232,13 +232,16 @@ disassemble_map (vector pathvec, char * params, struct multipath * mpp)
        num_pg = atoi(word);
        FREE(word);
 
-       if (num_pg > 0 && !mpp->pg) {
-               mpp->pg = vector_alloc();
-
-               if (!mpp->pg)
-                       return 1;
-       } else
+       if (num_pg > 0) {
+               if (!mpp->pg) {
+                       mpp->pg = vector_alloc();
+                       if (!mpp->pg)
+                               return 1;
+               }
+       } else {
+               free_pgvec(mpp->pg, KEEP_PATHS);
                mpp->pg = NULL;
+       }
 
        /*
         * first pg to try