]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - util.c
Fix a recently introduced bug, and make --assemble more resilient to it.
[thirdparty/mdadm.git] / util.c
diff --git a/util.c b/util.c
index 5b994d6ae726b64d4a46046a6c8bac8c8e070f1d..2cb6dd316f8e173ab913e54a778e96110a450524 100644 (file)
--- a/util.c
+++ b/util.c
@@ -416,10 +416,20 @@ char *map_dev(int major, int minor, int create)
        struct devmap *p;
        char *std = NULL, *nonstd=NULL;
        int did_check = 0;
+
+       if (major == 0 && minor == 0)
+                       return NULL;
+
  retry:
        if (!devlist_ready) {
                char *dev = "/dev";
                struct stat stb;
+               while(devlist) {
+                       struct devmap *d = devlist;
+                       devlist = d->next;
+                       free(d->name);
+                       free(d);
+               }
                if (lstat(dev, &stb)==0 &&
                    S_ISLNK(stb.st_mode))
                        dev = "/dev/.";
@@ -623,8 +633,12 @@ int dev_open(char *dev, int flags)
        char *e;
        int fd = -1;
        char devname[32];
-       int major = strtoul(dev, &e, 0);
+       int major;
        int minor;
+
+       if (!dev) return -1;
+
+       major = strtoul(dev, &e, 0);
        if (e > dev && *e == ':' && e[1] &&
            (minor = strtoul(e+1, &e, 0)) >= 0 &&
            *e == 0) {