Subject: Re: How to resolve the filename(s) for a vnode?
To: der Mouse <mouse@Rodents.Montreal.QC.CA>
From: Jason Thorpe <thorpej@shagadelic.org>
List: tech-kern
Date: 10/19/2005 09:47:22
On Oct 18, 2005, at 8:12 PM, der Mouse wrote:

> For access checks, I don't think the pathname is a right answer  
> either.
> What do you need a pathname for?  If it's a call involving a pathname
> walk (such as open()), you have a pathname at hand; if not, you  
> have to
> either have it saved or base your checks on the vnode itself, and in
> the latter case a path to it is misleading because it introduces a
> bunch of unrelated directories.  I think it would be better to have
> something like the fh*() family of syscalls for this purpose - or
> perhaps a vnode filesystem, in which live vnodes appear as entries  
> in a
> directory, since all you use the pathname for is as a handle on the
> vnode.

Opening directly by file handle using fhopen(2) has problems.

Notably: In Unix, restricting the permissions of a common parent in  
the directory hierarchy effectively restricts the permissions  
underneath that common parent, because people can't traverse the  
common parent to get to the children.

This is why fhopen(2) is restricted to super-user.  To "fix" the  
issue, you would have to traverse back up the tree and check the  
access control on each parent.

Of course, since files can be "enclosed" by more than one directory,  
to do this you need the file + an enclosing directory.  Once you have  
the enclosing directory, it's easy to traverse back, since  
directories can have only one parent ("..").

-- thorpej