summaryrefslogtreecommitdiffstats
path: root/sys/miscfs/devfs
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1999-11-20 13:18:04 +0000
committerphk <phk@FreeBSD.org>1999-11-20 13:18:04 +0000
commitdfc0edf6ef034b357af10824cb21696bc8bbb17e (patch)
tree36c8771e7e1f8540be097dceff8f392c8d427d1c /sys/miscfs/devfs
parent1249128f885e11840f68424fa9052cc7c02315ab (diff)
downloadFreeBSD-src-dfc0edf6ef034b357af10824cb21696bc8bbb17e.zip
FreeBSD-src-dfc0edf6ef034b357af10824cb21696bc8bbb17e.tar.gz
Get rid of calls to vfinddev() by doing like specfs.
Diffstat (limited to 'sys/miscfs/devfs')
-rw-r--r--sys/miscfs/devfs/devfs_vnops.c22
1 files changed, 7 insertions, 15 deletions
diff --git a/sys/miscfs/devfs/devfs_vnops.c b/sys/miscfs/devfs/devfs_vnops.c
index d64ce80..08feee2 100644
--- a/sys/miscfs/devfs/devfs_vnops.c
+++ b/sys/miscfs/devfs/devfs_vnops.c
@@ -1340,28 +1340,20 @@ devfs_open( struct vop_open_args *ap)
dsw = devsw(dev);
if ( (dsw == NULL) || (dsw->d_open == NULL))
return ENXIO;
- if (ap->a_cred != FSCRED && (ap->a_mode & FWRITE)) {
+ if (ap->a_cred != FSCRED && (ap->a_mode & FWRITE) &&
+ vn_isdisk(vp)) {
/*
* When running in very secure mode, do not allow
- * opens for writing of any disk character devices.
+ * opens for writing of any disk devices.
*/
- if (securelevel >= 2
- && dsw->d_bmaj != -1
- && (dsw->d_flags & D_TYPEMASK) == D_DISK)
+ if (securelevel >= 2)
return (EPERM);
/*
* When running in secure mode, do not allow opens
- * for writing of character
- * devices whose corresponding block devices are
- * currently mounted.
+ * for writing if the device is mounted.
*/
- if (securelevel >= 1) {
- if ((bdev = chrtoblk(dev)) != NODEV &&
- vfinddev(bdev, VBLK, &bvp) &&
- bvp->v_usecount > 0 &&
- (error = vfs_mountedon(bvp)))
- return (error);
- }
+ if (securelevel >= 1 && vp->v_specmountpoint != NULL)
+ return (EPERM);
}
if ((dsw->d_flags & D_TYPEMASK) == D_TTY)
vp->v_flag |= VISTTY;
OpenPOWER on IntegriCloud