Subject: MNT_NODEV was checked in wrong place (#306) Index: sys/sys_inode.c 2.11BSD Description: The kernel check for prohibited special device node access was a few lines too high in the source. Repeat-By: mount -o nodev /dev/ram /tmp ls /tmp /tmp not readable Fix: A brain fade (to be polite) on my part. The 'openi' routine was checking the MNT_NODEV bit too soon - before it was known if the inode being opened was a CHR or BLK device. Oops. Cut where indicated saving to a file (/tmp/306) then: patch -p0 < /tmp/306 This time you will likely find it useful to rebuild the kernel and reboot the system. ---------------------cut here------------------- *** /sys/sys/sys_inode.c.old Fri Dec 29 23:10:37 1995 --- /sys/sys/sys_inode.c Sat Mar 2 00:45:38 1996 *************** *** 3,9 **** * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. * ! * @(#)sys_inode.c 1.6 (2.11BSD GTE) 1995/12/29 */ #include "param.h" --- 3,9 ---- * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. * ! * @(#)sys_inode.c 1.7 (2.11BSD GTE) 1996/3/2 */ #include "param.h" *************** *** 611,622 **** dev_t bdev; int error; - if (ip->i_fs->fs_flags & MNT_NODEV) - return(ENXIO); - switch (ip->i_mode&IFMT) { case IFCHR: if ((u_int)maj >= nchrdev) return (ENXIO); if (mode & FWRITE) { --- 611,621 ---- dev_t bdev; int error; switch (ip->i_mode&IFMT) { case IFCHR: + if (ip->i_fs->fs_flags & MNT_NODEV) + return(ENXIO); if ((u_int)maj >= nchrdev) return (ENXIO); if (mode & FWRITE) { *************** *** 643,648 **** --- 642,649 ---- return ((*cdevsw[maj].d_open)(dev, mode, S_IFCHR)); case IFBLK: + if (ip->i_fs->fs_flags & MNT_NODEV) + return(ENXIO); if ((u_int)maj >= nblkdev) return (ENXIO); /* *** /VERSION.old Fri Mar 1 23:19:40 1996 --- /VERSION Sat Mar 2 01:08:15 1996 *************** *** 1,4 **** ! Current Patch Level: 305 2.11 BSD ============ --- 1,4 ---- ! Current Patch Level: 306 2.11 BSD ============