diff --git a/share/man/man9/make_dev.9 b/share/man/man9/make_dev.9
index 2827235258e2..78345fab4a1d 100644
--- a/share/man/man9/make_dev.9
+++ b/share/man/man9/make_dev.9
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd May 3, 2011
+.Dd Dec 22, 2012
 .Dt MAKE_DEV 9
 .Os
 .Sh NAME
@@ -364,6 +364,10 @@ or
 .Qq ..
 path component or ends with
 .Ql / .
+.It Bq Er EINVAL
+The
+.Dv MAKEDEV_CHECKNAME
+flag was specified and the provided device name contains invalid characters.
 .It Bq Er EEXIST
 The
 .Dv MAKEDEV_CHECKNAME
diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c
index 288fac51e474..c04d1da7f5fa 100644
--- a/sys/kern/kern_conf.c
+++ b/sys/kern/kern_conf.c
@@ -698,6 +698,13 @@ prep_devname(struct cdev *dev, const char *fmt, va_list ap)
 		;
 
 	for (to = dev->si_name; *from != '\0'; from++, to++) {
+		/*
+		 * Spaces and double quotation marks cause
+		 * problems for the devctl(4) protocol.
+		 * Reject names containing those characters.
+		 */
+		if (isspace(*from) || *from == '"')
+			return (EINVAL);
 		/* Treat multiple sequential slashes as single. */
 		while (from[0] == '/' && from[1] == '/')
 			from++;