bug related to mounted file systems and ..

utzoo!decvax!ucbvax!unix-wizards utzoo!decvax!ucbvax!unix-wizards
Tue Sep 29 15:21:43 AEST 1981


>From decvax!shannon at Berkeley Tue Sep 29 15:13:39 1981

This started as a bug for 4bsd-bugs, but since it has wider
applicability I thought I'd send it to unix-wizards in case
anyone else has seen it before and/or has a solution.

There is a very subtle bug in the handling of mounted file
systems.  The bug occurs when trying to reference ".." from
the root of a mounted file system (such as trying to do a
"cd .." or even just a pwd).  Although the manual says that
a file system can only be mounted on a directory (unless the
root of the mounted file system is a regular file), this is
not checked anywhere.  If a file system is mounted on a regular
file and a "cd .." attempted from the root of the mounted
file system, you get the error message "..: Not a directory".
The following sequence reproduces the problem:

	cp /dev/null /m
	mount /dev/hp0g /m	(for instance)
	cd /m
	cd ..

A more complex situation occurs if the file on which the file
system is mounted is a directory.  When referencing ".." from
the root of a file system mounted on a directory, ".." must be
looked up in the mounted-on directory.  This can cause problems
if the mounted-on directory and the root of the mounted file
system have different permissions, for instance:

	(as the super-user)
	mkdir /m
	chmod 700 /m
	mount /dev/hp0g /m

	(as a regular user)
	cd /m
	cd ..

results in "..: Permission denied".  The error message occurs
because the user does not have search permission in /m to look
up "..".  The problem is more confusing if /usr is substituted
for /m and a user trys to do a pwd from his login directory.

My proposed solution is as follows.  To solve the first problem,
simply check in smount() and sumount() that the mounted-on file
is a directory.  To fix the second problem, change nami() so that
when ".." is referenced from the root of a mounted file system,
the access check is skipped (instead of "goto seloop" at the bottom
of nami(), goto another label which would be defined a few lines
down from seloop).  I have not implemented either of theses
solutions; I would like comments first.  Is this really a problem
or is it a feature?  Has anyone else noticed it and/or fixed it?

					Bill Shannon
					decvax!shannon or
					CSVAX.shannon at Berkeley



More information about the Comp.unix.wizards mailing list