Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 1 Oct 2009 12:50:26 +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: r197662 - head/sys/kern
Message-ID:  <200910011250.n91CoQ5G051511@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Thu Oct  1 12:50:26 2009
New Revision: 197662
URL: http://svn.freebsd.org/changeset/base/197662

Log:
  Do not dereference vp->v_mount without holding vnode lock and checking
  that the vnode is not reclaimed.
  
  Noted by:	Igor Sysoev <is rambler-co ru>
  MFC after:	1 week

Modified:
  head/sys/kern/uipc_syscalls.c

Modified: head/sys/kern/uipc_syscalls.c
==============================================================================
--- head/sys/kern/uipc_syscalls.c	Thu Oct  1 12:48:35 2009	(r197661)
+++ head/sys/kern/uipc_syscalls.c	Thu Oct  1 12:50:26 2009	(r197662)
@@ -2086,9 +2086,11 @@ retry_space:
 				/*
 				 * Get the page from backing store.
 				 */
-				bsize = vp->v_mount->mnt_stat.f_iosize;
 				vfslocked = VFS_LOCK_GIANT(vp->v_mount);
-				vn_lock(vp, LK_SHARED | LK_RETRY);
+				error = vn_lock(vp, LK_SHARED);
+				if (error != 0)
+					goto after_read;
+				bsize = vp->v_mount->mnt_stat.f_iosize;
 
 				/*
 				 * XXXMAC: Because we don't have fp->f_cred
@@ -2101,6 +2103,7 @@ retry_space:
 				    IO_VMIO | ((MAXBSIZE / bsize) << IO_SEQSHIFT),
 				    td->td_ucred, NOCRED, &resid, td);
 				VOP_UNLOCK(vp, 0);
+			after_read:
 				VFS_UNLOCK_GIANT(vfslocked);
 				VM_OBJECT_LOCK(obj);
 				vm_page_io_finish(pg);



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