rmdir(2) and mkdir(2) both return EISDIR for argument "/"
Alexander Best
alexbestms at math.uni-muenster.de
Sat Nov 7 11:45:35 UTC 2009
Gary Jennejohn schrieb am 2009-11-07:
> On Fri, 06 Nov 2009 22:09:49 +0100 (CET)
> Alexander Best <alexbestms at math.uni-muenster.de> wrote:
> > here's a completely new patch. all the changes are in
> > kern/vfs_syscall.c. so
> > kern/vfs_lookup.c now stays just the way it is (please revert any
> > changes from
> > the previous patches i posted).
> > after applying the patch this is the output from a slightly
> > modified version
> > of the test app i attached in my very first post:
> > rmdir errno: 16 (EBUSY) <- EBUSY is required by POSIX
> > mkdir errno: 17 (EEXIST)
> > rename errno: 22 (EINVAL)
> > these are the results when called with "/" as arg. the output
> > doesn't differ
> > if run with or without superuser privileges.
> > when run with "." as arg this is the output as regular user:
> > rmdir errno: 22 (EINVAL)
> > mkdir errno: 17 (EEXIST)
> > rename errno: 13 (EACCES)
> > and as superuser:
> > rmdir errno: 22 (EINVAL)
> > mkdir errno: 17 (EEXIST)
> > rename errno: 22 (EINVAL)
> > does this look reasonable? would be nice if mkdir and rmdir would
> > also check
> > privileges at first like rename, but that's a different story i
> > guess. ;)
> The only problem I see with this is that vfs_syscall.c now has
> knowledge
> about the internal details of vfs_lookup.c
> Maybe just mention in the comments that this is the case and could be
> a problem if vfs_lookup.c is changed for some reason? That's what I
> do when I have to use something like this.
> But we don't want to turn this into a gigantic bikeshed - we already
> have enough of those.
> ---
> Gary Jennejohn
well like you said there are 2 possibilities of dealing with this:
1. in vfs_lookup.c or
2. in vfs_syscall.c
personally i think vfs_syscall.c is the better solution. i only tested
rmdir(), rename() and mkdir(). however lots of other apps/functions might be
depending on vfs_lookup.c and are expecting namei() to return EISDIR for
arg="/". if we change this behaviour we might break a lot of other stuff.
also looking at vfs_syscall.c shows that a lot of code in there already
depends and knows about vfs_lookup.c internal details. so we wouldn't be
changing the whole vfs_syscall.c semantics.
but you're right. this is the perfect topic for a bikeshed. ;)
i'll wait for a few more days and if nobody has a problem with the last patch
i'll submitted it as followup to kern/59739.
thanks a lot for your help. :)
cheers.
alex
More information about the freebsd-hackers
mailing list