Fix doublee free of alias after map add failure
authorBenjamin Marzinski <bmarzins@redhat.com>
Sun, 8 Mar 2015 03:31:45 +0000 (21:31 -0600)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Sun, 8 Mar 2015 09:48:00 +0000 (10:48 +0100)
In ev_add_map(), if add_map_without_path() fails, the alias will have
been freed by free_multipath(), so you can't access it anymore. Also,
if the multipath device already exists, but you fail to register it,
there's no point in trying to create the device. It will fail.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
multipathd/main.c

index aac8a19..62339ae 100644 (file)
@@ -314,10 +314,15 @@ ev_add_map (char * dev, char * alias, struct vectors * vecs)
        /*
         * now we can register the map
         */
-       if (map_present && (mpp = add_map_without_path(vecs, alias))) {
-               sync_map_state(mpp);
-               condlog(2, "%s: devmap %s registered", alias, dev);
-               return 0;
+       if (map_present) {
+               if ((mpp = add_map_without_path(vecs, alias))) {
+                       sync_map_state(mpp);
+                       condlog(2, "%s: devmap %s registered", alias, dev);
+                       return 0;
+               } else {
+                       condlog(2, "%s: uev_add_map failed", dev);
+                       return 1;
+               }
        }
        r = get_refwwid(dev, DEV_DEVMAP, vecs->pathvec, &refwwid);