svn commit: r240744 - stable/9/sys/fs/deadfs
Konstantin Belousov
kib at FreeBSD.org
Thu Sep 20 10:13:15 UTC 2012
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.
More information about the svn-src-stable-9
mailing list