FIX: Verify if array name doesn't exist already
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>
This commit is contained in:
parent
24daa16fa1
commit
3e9df86add
12
Create.c
12
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);
|
||||
|
|
Loading…
Reference in New Issue