Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Sep 2013 13:14:51 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r255880 - head/sys/kern
Message-ID:  <201309261314.r8QDEpR2037579@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Thu Sep 26 13:14:51 2013
New Revision: 255880
URL: http://svnweb.freebsd.org/changeset/base/255880

Log:
  Acquire a hold reference on the vnode when a knote is instantiated.
  Otherwise, knote keeps a pointer to a vnode which could become invalid
  any time.
  
  Reported by:	many
  Tested by:	Patrick Lamaiziere <patfbsd@davenulle.org>
  Discussed with:	jmg
  Sponsored by:	The FreeBSD Foundation
  MFC after:	1 week
  Approved by:	re (marius)

Modified:
  head/sys/kern/vfs_subr.c

Modified: head/sys/kern/vfs_subr.c
==============================================================================
--- head/sys/kern/vfs_subr.c	Thu Sep 26 13:13:12 2013	(r255879)
+++ head/sys/kern/vfs_subr.c	Thu Sep 26 13:14:51 2013	(r255880)
@@ -4398,6 +4398,7 @@ vfs_kqfilter(struct vop_kqfilter_args *a
 	if (vp->v_pollinfo == NULL)
 		return (ENOMEM);
 	knl = &vp->v_pollinfo->vpi_selinfo.si_note;
+	vhold(vp);
 	knlist_add(knl, kn, 0);
 
 	return (0);
@@ -4413,6 +4414,7 @@ filt_vfsdetach(struct knote *kn)
 
 	KASSERT(vp->v_pollinfo != NULL, ("Missing v_pollinfo"));
 	knlist_remove(&vp->v_pollinfo->vpi_selinfo.si_note, kn, 0);
+	vdrop(vp);
 }
 
 /*ARGSUSED*/



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