svn commit: r194586 - in head/sys: cddl/compat/opensolaris/kern cddl/compat/opensolaris/sys cddl/contrib/opensolaris/uts/common/fs/zfs kern sys

Kostik Belousov kostikbel at gmail.com
Mon Jun 22 10:22:39 UTC 2009


On Mon, Jun 22, 2009 at 02:12:57PM +1000, Bruce Evans wrote:
> On Sun, 21 Jun 2009, Konstantin Belousov wrote:
> 
> >Log:
> > Add another flags argument to vn_open_cred. Use it to specify that some
> > vn_open_cred invocations shall not audit namei path.
> 
> >Modified: head/sys/cddl/compat/opensolaris/kern/opensolaris_kobj.c
> >==============================================================================
> >--- head/sys/cddl/compat/opensolaris/kern/opensolaris_kobj.c	Sun Jun 21 
> >13:15:56 2009	(r194585)
> >+++ head/sys/cddl/compat/opensolaris/kern/opensolaris_kobj.c	Sun Jun 21 
> >13:41:32 2009	(r194586)
> >@@ -85,7 +85,8 @@ kobj_open_file_vnode(const char *file)
> >
> >	flags = FREAD;
> >	NDINIT(&nd, LOOKUP, MPSAFE, UIO_SYSSPACE, file, td);
> >-	error = vn_open_cred(&nd, &flags, O_NOFOLLOW, curthread->td_ucred, 
> >NULL);
> >+	error = vn_open_cred(&nd, &flags, O_NOFOLLOW, 0, curthread->td_ucred,
> >+	    NULL);
> 
> I was going to ask "why not put the flag in the existing flags arg,
> like O_NOFOLLOW here?", but it seems that there is no existing flags
> arg and the above O_NOFOLLOW is garbage.  O_NOFOLLOW happens to be
> 0x100, so I think the above asks for mode S_IRUSR.
I fixed this, O_NOFOLLOW is set in flags.

> 
> Now I will ask "why not put O_NOFOLLOW here and the new flag in the
> existing pointer-to-flags arg?".
I do not quite understand what is named by "here". O_NOFOLLOW is defined
as a user-supplied flag for the mode argument of the open(2), that
determines that it must go in the flags.

I do not want to put kernel-only flags into the mode argument, at least
because it shrinks the space available for further additions of the open(2)
mode flags, that is periodically done by the standards freebsd tries to
follow.

> 
> >Modified: head/sys/cddl/compat/opensolaris/sys/vnode.h
> >==============================================================================
> >--- head/sys/cddl/compat/opensolaris/sys/vnode.h	Sun Jun 21 13:15:56 
> >2009	(r194585)
> >+++ head/sys/cddl/compat/opensolaris/sys/vnode.h	Sun Jun 21 13:41:32 
> >2009	(r194586)
> >@@ -182,7 +182,7 @@ vn_openat(char *pnamep, enum uio_seg seg
> >		vref(startvp);
> >	NDINIT_ATVP(&nd, operation, MPSAFE, UIO_SYSSPACE, pnamep, startvp, 
> >	td);
> >	filemode |= O_NOFOLLOW;
> >-	error = vn_open_cred(&nd, &filemode, createmode, td->td_ucred, NULL);
> >+	error = vn_open_cred(&nd, &filemode, createmode, 0, td->td_ucred, 
> >NULL);
> 
> Here it does put O_NOFOLLOW in the existing pointer-to-flags arg.  It
> obfuscates the open-flags variable by naming it filemode.
> 
> >Modified: head/sys/kern/vfs_vnops.c
> >==============================================================================
> >--- head/sys/kern/vfs_vnops.c	Sun Jun 21 13:15:56 2009	(r194585)
> >+++ head/sys/kern/vfs_vnops.c	Sun Jun 21 13:41:32 2009	(r194586)
> >@@ -102,11 +102,8 @@ vn_open(ndp, flagp, cmode, fp)
> > * due to the NDINIT being done elsewhere.
> > */
> >int
> >-vn_open_cred(ndp, flagp, cmode, cred, fp)
> >-	struct nameidata *ndp;
> >-	int *flagp, cmode;
> >-	struct ucred *cred;
> >-	struct file *fp;
> >+vn_open_cred(struct nameidata *ndp, int *flagp, int cmode, u_int 
> >vn_open_flags,
> >+    struct ucred *cred, struct file *fp)
> >{
> >	struct vnode *vp;
> >	struct mount *mp;
> >@@ -124,9 +121,11 @@ restart:
> >	if (fmode & O_CREAT) {
> 
> Internally, flags are obfuscated by copying *flagp to the misnamed local
> variable fmode.
> 
> The pointer-to-flags variable has about 12 spare bits in it.  It already
> has just 1 kernel-only flag (O_HASLOCK, misnamed FHASLOCK and misassigned
> in the middle of the user flags).  fcntl.h's list of open flags has
> been obfuscated by putting AT_ flags in the middle of the list.

I moved the AT_* definitions in sys/fcntl.h after the list.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/svn-src-head/attachments/20090622/b7b96787/attachment.pgp


More information about the svn-src-head mailing list