Curiously, if DM_OPENPART is specified, disk_map() accepts the format
"duid" as well as "duid.anypart". This may be a feature but I suspect
it's actually a small oversight in the validation part.

I'm proposing this stricter (and maybe more readable) version:

Index: kern/subr_disk.c
===================================================================
RCS file: /home/vcs/cvs/openbsd/src/sys/kern/subr_disk.c,v
retrieving revision 1.131
diff -u -p -r1.131 subr_disk.c
--- kern/subr_disk.c    26 Jul 2011 12:32:14 -0000      1.131
+++ kern/subr_disk.c    2 Aug 2011 01:09:50 -0000
@@ -1467,8 +1467,10 @@ disk_map(char *path, char *mappath, int 
                return -1;
 
        /* Verify that the device name is properly formed. */
-       if (!((strlen(path) == 16 && (flags & DM_OPENPART)) ||
-           (strlen(path) == 18 && path[16] == '.')))
+       if ((strlen(path) == 16 && (flags & DM_OPENPART)) ||
+           (strlen(path) == 18 && path[16] == '.' && !(flags & DM_OPENPART)))
+               ;
+       else
                return -1;
 
        /* Get partition. */

Reply via email to