multipathd: crash in reconfigure CLI command
authorHannes Reinecke <hare@suse.de>
Tue, 8 Jan 2013 13:54:18 +0000 (14:54 +0100)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Tue, 8 Jan 2013 23:28:43 +0000 (00:28 +0100)
The 'reconfigure' CLI command doesn't take the vector lock,
so if multipathd is processing a table / udev event at the
same time it'll crash.

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

index f491a24..395307e 100644 (file)
@@ -1389,6 +1389,7 @@ reconfigure (struct vectors * vecs)
        struct config * old = conf;
        int retval = 1;
 
+       lock(vecs->lock);
        /*
         * free old map and path vectors ... they use old conf state
         */
@@ -1409,6 +1410,7 @@ reconfigure (struct vectors * vecs)
                retval = 0;
        }
 
+       unlock(vecs->lock);
        return retval;
 }
 
@@ -1466,9 +1468,7 @@ sighup (int sig)
        if (running_state != DAEMON_RUNNING)
                return;
 
-       lock(gvecs->lock);
        reconfigure(gvecs);
-       unlock(gvecs->lock);
 
 #ifdef _DEBUG_
        dbg_free_final(NULL);