Author: kib
Date: Thu Sep 20 10:13:14 2012
New Revision: 240744
URL: http://svn.freebsd.org/changeset/base/240744

Log:
  MFC r240464:
  The deadfs VOPs for vop_ioctl and vop_bmap call itself recursively,
  which is an elaborate way to cause kernel panic. Change the VOPs
  implementation to return EBADF for a reclaimed vnode.

Modified:
  stable/9/sys/fs/deadfs/dead_vnops.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/fs/   (props changed)

Modified: stable/9/sys/fs/deadfs/dead_vnops.c
==============================================================================
--- stable/9/sys/fs/deadfs/dead_vnops.c Thu Sep 20 10:07:31 2012        
(r240743)
+++ stable/9/sys/fs/deadfs/dead_vnops.c Thu Sep 20 10:13:14 2012        
(r240744)
@@ -41,8 +41,6 @@
 /*
  * Prototypes for dead operations on vnodes.
  */
-static vop_bmap_t      dead_bmap;
-static vop_ioctl_t     dead_ioctl;
 static vop_lookup_t    dead_lookup;
 static vop_open_t      dead_open;
 static vop_poll_t      dead_poll;
@@ -56,12 +54,12 @@ struct vop_vector dead_vnodeops = {
 
        .vop_access =           VOP_EBADF,
        .vop_advlock =          VOP_EBADF,
-       .vop_bmap =             dead_bmap,
+       .vop_bmap =             VOP_EBADF,
        .vop_create =           VOP_PANIC,
        .vop_getattr =          VOP_EBADF,
        .vop_getwritemount =    dead_getwritemount,
        .vop_inactive =         VOP_NULL,
-       .vop_ioctl =            dead_ioctl,
+       .vop_ioctl =            VOP_EBADF,
        .vop_link =             VOP_PANIC,
        .vop_lookup =           dead_lookup,
        .vop_mkdir =            VOP_PANIC,
@@ -166,43 +164,6 @@ dead_write(ap)
 }
 
 /*
- * Device ioctl operation.
- */
-/* ARGSUSED */
-static int
-dead_ioctl(ap)
-       struct vop_ioctl_args /* {
-               struct vnode *a_vp;
-               u_long  a_command;
-               caddr_t  a_data;
-               int  a_fflag;
-               struct ucred *a_cred;
-               struct proc *a_p;
-       } */ *ap;
-{
-       /* XXX: Doesn't this just recurse back here ? */
-       return (VOP_IOCTL_AP(ap));
-}
-
-/*
- * Wait until the vnode has finished changing state.
- */
-static int
-dead_bmap(ap)
-       struct vop_bmap_args /* {
-               struct vnode *a_vp;
-               daddr_t  a_bn;
-               struct bufobj **a_bop;
-               daddr_t *a_bnp;
-               int *a_runp;
-               int *a_runb;
-       } */ *ap;
-{
-
-       return (VOP_BMAP(ap->a_vp, ap->a_bn, ap->a_bop, ap->a_bnp, ap->a_runp, 
ap->a_runb));
-}
-
-/*
  * Trivial poll routine that always returns POLLHUP.
  * This is necessary so that a process which is polling a file
  * gets notified when that file is revoke()d.
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to