bioctl(8) only looks at the first character of the -c option argument
and ignores any trailing characters in the argument. Following the
addition of the RAID1C discipline this behaviour can lead to confusion.
This command with a typo ("C1" vs "1C") attempts to create a CRYPTO volume:
# bioctl -cC1 -l /dev/sd1d,/dev/sd2d softraid0
bioctl: not exactly one partition
With the patch below, "C1" is instead rejected as an invalid raid level:
# /tmp/bioctl -cC1 -l /dev/sd1d,/dev/sd2d softraid0
bioctl: Invalid RAID level
ok?
diff 5ee6e27345c7d0c6d947bafadc8160eb9da3f73b /usr/src
blob - 24d4042d6d6dd2ee997eac511b0816ad47441d35
file + sbin/bioctl/bioctl.c
--- sbin/bioctl/bioctl.c
+++ sbin/bioctl/bioctl.c
@@ -133,6 +133,8 @@ main(int argc, char *argv[])
func |= BIOC_CREATERAID;
if (strcmp(optarg, "1C") == 0) {
cr_level = 0x1C;
+ } else if (strlen(optarg) != 1) {
+ errx(1, "Invalid RAID level");
} else if (isdigit((unsigned char)*optarg)) {
cr_level = strtonum(optarg, 0, 10, &errstr);
if (errstr != NULL)