Subject: bin/36614: mknod driver to major mapping bug
To: None <gnats-admin@netbsd.org, netbsd-bugs@netbsd.org>
From: None <dieter.NetBSD@pandora.be>
List: netbsd-bugs
Date: 07/07/2007 20:05:00
>Number:         36614
>Category:       bin
>Synopsis:       mknod driver to major mapping bug
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    bin-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Jul 07 20:05:00 +0000 2007
>Originator:     dieter roelants
>Release:        NetBSD 4.99.22
>Organization:
>Environment:
System: NetBSD simult.amelgem.be 4.99.22 NetBSD 4.99.22 (SIMULT) #23: Mon Jul 2 19:30:03 CEST 2007 dieter@simult.amelgem.be:/build/obj.i386.current/sys/arch/i386/compile/SIMULT i386
Architecture: i386
Machine: i386
>Description:
	mknod can be given the name of a driver instead of a major
	number for the creation of device files. However, the major
	used is always that of the character device of the driver.
>How-To-Repeat:
simult:p0:/dev/tmp# mknod -l | grep '^sd ' 
sd character major 13 block major 4
simult:p0:/dev/tmp# mknod rsd0a c sd 0     
simult:p0:/dev/tmp# mknod  sd0a b sd 0 
simult:p0:/dev/tmp# ls -l *
crw-r--r--  1 root  wheel  13, 0 Jul  7 21:50 rsd0a
brw-r--r--  1 root  wheel  13, 0 Jul  7 21:50 sd0a

>Fix:

Index: mknod.c
===================================================================
RCS file: /cvsroot/src/sbin/mknod/mknod.c,v
retrieving revision 1.35
diff -u -r1.35 mknod.c
--- mknod.c	1 Oct 2005 20:24:44 -0000	1.35
+++ mknod.c	7 Jul 2007 19:38:55 -0000
@@ -391,7 +391,7 @@
 	for (i = 0; i < num_drivers; kd++, i++) {
 		if (strcmp(name, kd->d_name))
 			continue;
-		if (mode & S_IFCHR)
+		if (S_ISCHR(mode))
 			return kd->d_cmajor;
 		return kd->d_bmajor;
 	}