aboutsummaryrefslogtreecommitdiff
path: root/sys/fs/devfs
diff options
context:
space:
mode:
authorMaxime Henrion <mux@FreeBSD.org>2002-05-10 15:41:14 +0000
committerMaxime Henrion <mux@FreeBSD.org>2002-05-10 15:41:14 +0000
commit8eee3a3d58f8040dfd2a8fc8d8ad5e8ec61ae296 (patch)
treefee7445ce555b356984506b5b80f5894177ac5fb /sys/fs/devfs
parent2c6c9ea2bd58d3a925051048cf1be365597eb3fb (diff)
downloadsrc-8eee3a3d58f8040dfd2a8fc8d8ad5e8ec61ae296.tar.gz
src-8eee3a3d58f8040dfd2a8fc8d8ad5e8ec61ae296.zip
Fix several bugs in devfs_lookupx(). When we check the nameiop to
make sure it's a correct operation for devfs, do it only in the ISLASTCN case. If we don't, we are assuming that the final file will be in devfs, which is not true if another partition is mounted on top of devfs or with special filenames (like /dev/net/../../foo). Reviewed by: phk
Notes
Notes: svn path=/head/; revision=96356
Diffstat (limited to 'sys/fs/devfs')
-rw-r--r--sys/fs/devfs/devfs_vnops.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/fs/devfs/devfs_vnops.c b/sys/fs/devfs/devfs_vnops.c
index 39857a968e89..3ec9fb5198a4 100644
--- a/sys/fs/devfs/devfs_vnops.c
+++ b/sys/fs/devfs/devfs_vnops.c
@@ -276,7 +276,7 @@ devfs_lookupx(ap)
*vpp = NULLVP;
- if (nameiop == RENAME)
+ if ((flags & ISLASTCN) && nameiop == RENAME)
return (EOPNOTSUPP);
if (dvp->v_type != VDIR)
@@ -290,7 +290,7 @@ devfs_lookupx(ap)
return (error);
if (cnp->cn_namelen == 1 && *pname == '.') {
- if (nameiop != LOOKUP)
+ if ((flags & ISLASTCN) && nameiop != LOOKUP)
return (EINVAL);
*vpp = dvp;
VREF(dvp);
@@ -298,7 +298,7 @@ devfs_lookupx(ap)
}
if (flags & ISDOTDOT) {
- if (nameiop != LOOKUP)
+ if ((flags & ISLASTCN) && nameiop != LOOKUP)
return (EINVAL);
VOP_UNLOCK(dvp, 0, td);
de = TAILQ_FIRST(&dd->de_dlist); /* "." */