diff options
author | Roman Sobanski <roman.sobanski@intel.com> | 2018-08-10 14:20:35 +0200 |
---|---|---|
committer | Jes Sorensen <jsorensen@fb.com> | 2018-09-27 16:27:25 +0200 |
commit | 9bd99a90e110bd39beaa539cb44a70ee3264a270 (patch) | |
tree | 61369d9cd2e8ee95ebf04173db90ac8890b1025c | |
parent | mdadm.c: Fix error handling for --zero-superblock (diff) | |
download | mdadm-9bd99a90e110bd39beaa539cb44a70ee3264a270.tar.xz mdadm-9bd99a90e110bd39beaa539cb44a70ee3264a270.zip |
imsm: Block volume creation with empty name
There is a possibility to create a RAID with empty name. Block it. Also
remove trailing and leading whitespaces from given name.
Signed-off-by: Roman Sobanski <roman.sobanski@intel.com>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
-rw-r--r-- | super-intel.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/super-intel.c b/super-intel.c index f011a31f..d3d256a4 100644 --- a/super-intel.c +++ b/super-intel.c @@ -5285,10 +5285,22 @@ static int check_name(struct intel_super *super, char *name, int quiet) { struct imsm_super *mpb = super->anchor; char *reason = NULL; + char *start = name; + size_t len = strlen(name); int i; - if (strlen(name) > MAX_RAID_SERIAL_LEN) + if (len > 0) { + while (isspace(start[len - 1])) + start[--len] = 0; + while (*start && isspace(*start)) + ++start, --len; + memmove(name, start, len + 1); + } + + if (len > MAX_RAID_SERIAL_LEN) reason = "must be 16 characters or less"; + else if (len == 0) + reason = "must be a non-empty string"; for (i = 0; i < mpb->num_raid_devs; i++) { struct imsm_dev *dev = get_imsm_dev(super, i); |