svn commit: r205748 - in stable/8/sys: fs/fifofs kern sys

Edward Tomasz Napierala trasz at FreeBSD.org
Sat Mar 27 17:22:12 UTC 2010


Author: trasz
Date: Sat Mar 27 17:22:11 2010
New Revision: 205748
URL: http://svn.freebsd.org/changeset/base/205748

Log:
  MFC r197680:
  
  Provide default implementation for VOP_ACCESS(9), so that filesystems which
  want to provide VOP_ACCESSX(9) don't have to implement both.  Note that
  this commit makes implementation of either of these two mandatory.
  
  Reviewed by:	kib

Modified:
  stable/8/sys/fs/fifofs/fifo_vnops.c
  stable/8/sys/kern/subr_acl_posix1e.c
  stable/8/sys/kern/vfs_default.c
  stable/8/sys/kern/vfs_subr.c
  stable/8/sys/sys/vnode.h
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)

Modified: stable/8/sys/fs/fifofs/fifo_vnops.c
==============================================================================
--- stable/8/sys/fs/fifofs/fifo_vnops.c	Sat Mar 27 17:22:08 2010	(r205747)
+++ stable/8/sys/fs/fifofs/fifo_vnops.c	Sat Mar 27 17:22:11 2010	(r205748)
@@ -114,7 +114,6 @@ static struct filterops fifo_notsup_filt
 struct vop_vector fifo_specops = {
 	.vop_default =		&default_vnodeops,
 
-	.vop_access =		VOP_EBADF,
 	.vop_advlock =		fifo_advlock,
 	.vop_close =		fifo_close,
 	.vop_create =		VOP_PANIC,

Modified: stable/8/sys/kern/subr_acl_posix1e.c
==============================================================================
--- stable/8/sys/kern/subr_acl_posix1e.c	Sat Mar 27 17:22:08 2010	(r205747)
+++ stable/8/sys/kern/subr_acl_posix1e.c	Sat Mar 27 17:22:11 2010	(r205748)
@@ -61,6 +61,9 @@ vaccess_acl_posix1e(enum vtype type, uid
 	accmode_t acl_mask_granted;
 	int group_matched, i;
 
+	KASSERT((accmode & ~(VEXEC | VWRITE | VREAD | VADMIN | VAPPEND)) == 0,
+	    ("invalid bit in accmode"));
+
 	/*
 	 * Look for a normal, non-privileged way to access the file/directory
 	 * as requested.  If it exists, go with that.  Otherwise, attempt to

Modified: stable/8/sys/kern/vfs_default.c
==============================================================================
--- stable/8/sys/kern/vfs_default.c	Sat Mar 27 17:22:08 2010	(r205747)
+++ stable/8/sys/kern/vfs_default.c	Sat Mar 27 17:22:11 2010	(r205748)
@@ -83,12 +83,17 @@ static int	dirent_exists(struct vnode *v
  *
  * If there is no specific entry here, we will return EOPNOTSUPP.
  *
+ * Note that every filesystem has to implement either vop_access
+ * or vop_accessx; failing to do so will result in immediate crash
+ * due to stack overflow, as vop_stdaccess() calls vop_stdaccessx(),
+ * which calls vop_stdaccess() etc.
  */
 
 struct vop_vector default_vnodeops = {
 	.vop_default =		NULL,
 	.vop_bypass =		VOP_EOPNOTSUPP,
 
+	.vop_access =		vop_stdaccess,
 	.vop_accessx =		vop_stdaccessx,
 	.vop_advlock =		vop_stdadvlock,
 	.vop_advlockasync =	vop_stdadvlockasync,
@@ -326,6 +331,16 @@ out:
 }
 
 int
+vop_stdaccess(struct vop_access_args *ap)
+{
+
+	KASSERT((ap->a_accmode & ~(VEXEC | VWRITE | VREAD | VADMIN |
+	    VAPPEND)) == 0, ("invalid bit in accmode"));
+
+	return (VOP_ACCESSX(ap->a_vp, ap->a_accmode, ap->a_cred, ap->a_td));
+}
+
+int
 vop_stdaccessx(struct vop_accessx_args *ap)
 {
 	int error;

Modified: stable/8/sys/kern/vfs_subr.c
==============================================================================
--- stable/8/sys/kern/vfs_subr.c	Sat Mar 27 17:22:08 2010	(r205747)
+++ stable/8/sys/kern/vfs_subr.c	Sat Mar 27 17:22:11 2010	(r205748)
@@ -3523,6 +3523,9 @@ vaccess(enum vtype type, mode_t file_mod
 	accmode_t dac_granted;
 	accmode_t priv_granted;
 
+	KASSERT((accmode & ~(VEXEC | VWRITE | VREAD | VADMIN | VAPPEND)) == 0,
+	    ("invalid bit in accmode"));
+
 	/*
 	 * Look for a normal, non-privileged way to access the file/directory
 	 * as requested.  If it exists, go with that.

Modified: stable/8/sys/sys/vnode.h
==============================================================================
--- stable/8/sys/sys/vnode.h	Sat Mar 27 17:22:08 2010	(r205747)
+++ stable/8/sys/sys/vnode.h	Sat Mar 27 17:22:11 2010	(r205748)
@@ -685,6 +685,7 @@ int	vop_stdlock(struct vop_lock1_args *)
 int	vop_stdputpages(struct vop_putpages_args *);
 int	vop_stdunlock(struct vop_unlock_args *);
 int	vop_nopoll(struct vop_poll_args *);
+int	vop_stdaccess(struct vop_access_args *ap);
 int	vop_stdaccessx(struct vop_accessx_args *ap);
 int	vop_stdadvlock(struct vop_advlock_args *ap);
 int	vop_stdadvlockasync(struct vop_advlockasync_args *ap);


More information about the svn-src-stable-8 mailing list