]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
FIX: Verify if array name doesn't exist already
authorAdam Kwolek <adam.kwolek@intel.com>
Thu, 22 Dec 2011 20:13:55 +0000 (07:13 +1100)
committerNeilBrown <neilb@suse.de>
Thu, 22 Dec 2011 20:13:55 +0000 (07:13 +1100)
When e.g. array name (an) is correct and it is the same as container name (cn),
file element creation /dev/md/an will replace /dev/md/cn.
This can cause that user cannot access container using /dev/md/cn.

Verify during array creation if chosen name is not already existing
one.

[Changed to use map_by_name() rather than stat() to determine prior
 existence - NeilBrown]

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Create.c

index 5d1548b20329f3f434ca04661fa19a777e81eb32..90ff3edd8dcc61c04081287f6a4891b0184653e2 100644 (file)
--- a/Create.c
+++ b/Create.c
@@ -558,6 +558,18 @@ int Create(struct supertype *st, char *mddev,
                map_unlock(&map);
                return 1;
        }
+       /* verify if chosen_name is not in use,
+        * it could be in conflict with already existing device
+        * e.g. container, array
+        */
+       if (strncmp(chosen_name, "/dev/md/", 8) == 0
+           && map_by_name(&map, chosen_name+8) != NULL) {
+               fprintf(stderr, Name ": Array name %s is in use already.\n",
+                       chosen_name);
+               close(mdfd);
+               map_unlock(&map);
+               return 1;
+       }
        mddev = chosen_name;
 
        vers = md_get_version(mdfd);