Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 7 Apr 2009 16:13:10 +0000 (UTC)
From:      Dag-Erling Smorgrav <des@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r190806 - head/sys/fs/pseudofs
Message-ID:  <200904071613.n37GDA4t013829@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: des
Date: Tue Apr  7 16:13:10 2009
New Revision: 190806
URL: http://svn.freebsd.org/changeset/base/190806

Log:
  Fix an inverted KASSERT.  Add similar assertions in other similar places.
  
  Reported by:	Andrew Brampton <me@bramp.net>
  MFC after:	1 week

Modified:
  head/sys/fs/pseudofs/pseudofs_vnops.c

Modified: head/sys/fs/pseudofs/pseudofs_vnops.c
==============================================================================
--- head/sys/fs/pseudofs/pseudofs_vnops.c	Tue Apr  7 15:44:50 2009	(r190805)
+++ head/sys/fs/pseudofs/pseudofs_vnops.c	Tue Apr  7 16:13:10 2009	(r190806)
@@ -52,6 +52,20 @@ __FBSDID("$FreeBSD$");
 #include <fs/pseudofs/pseudofs.h>
 #include <fs/pseudofs/pseudofs_internal.h>
 
+#define KASSERT_PN_IS_DIR(pn)						\
+	KASSERT((pn)->pn_type == pfstype_root ||			\
+	    (pn)->pn_type == pfstype_dir ||				\
+	    (pn)->pn_type == pfstype_procdir,				\
+	    ("%s(): VDIR vnode refers to non-directory pfs_node", __func__))
+
+#define KASSERT_PN_IS_FILE(pn)						\
+	KASSERT((pn)->pn_type == pfstype_file,				\
+	    ("%s(): VREG vnode refers to non-file pfs_node", __func__))
+
+#define KASSERT_PN_IS_LINK(pn)						\
+	KASSERT((pn)->pn_type == pfstype_symlink,			\
+	    ("%s(): VLNK vnode refers to non-link pfs_node", __func__))
+
 /*
  * Returns the fileno, adjusted for target pid
  */
@@ -257,6 +271,7 @@ pfs_ioctl(struct vop_ioctl_args *va)
 
 	if (vn->v_type != VREG)
 		PFS_RETURN (EINVAL);
+	KASSERT_PN_IS_FILE(pn);
 
 	if (pn->pn_ioctl == NULL)
 		PFS_RETURN (ENOTTY);
@@ -411,6 +426,7 @@ pfs_lookup(struct vop_cachedlookup_args 
 
 	if (vn->v_type != VDIR)
 		PFS_RETURN (ENOTDIR);
+	KASSERT_PN_IS_DIR(pd);
 
 	error = VOP_ACCESS(vn, VEXEC, cnp->cn_cred, cnp->cn_thread);
 	if (error)
@@ -565,6 +581,7 @@ pfs_read(struct vop_read_args *va)
 
 	if (vn->v_type != VREG)
 		PFS_RETURN (EINVAL);
+	KASSERT_PN_IS_FILE(pn);
 
 	if (!(pn->pn_flags & PFS_RD))
 		PFS_RETURN (EBADF);
@@ -707,6 +724,7 @@ pfs_readdir(struct vop_readdir_args *va)
 
 	if (vn->v_type != VDIR)
 		PFS_RETURN (ENOTDIR);
+	KASSERT_PN_IS_DIR(pd);
 	uio = va->a_uio;
 
 	/* only allow reading entire entries */
@@ -815,6 +833,7 @@ pfs_readlink(struct vop_readlink_args *v
 
 	if (vn->v_type != VLNK)
 		PFS_RETURN (EINVAL);
+	KASSERT_PN_IS_LINK(pn);
 
 	if (pn->pn_fill == NULL)
 		PFS_RETURN (EIO);
@@ -900,8 +919,7 @@ pfs_write(struct vop_write_args *va)
 
 	if (vn->v_type != VREG)
 		PFS_RETURN (EINVAL);
-	KASSERT(pn->pn_type != pfstype_file,
-	    ("%s(): VREG vnode refers to non-file pfs_node", __func__));
+	KASSERT_PN_IS_FILE(pn);
 
 	if (!(pn->pn_flags & PFS_WR))
 		PFS_RETURN (EBADF);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200904071613.n37GDA4t013829>