svn commit: r197662 - head/sys/kern
Xin LI
delphij at delphij.net
Fri Oct 2 00:42:53 UTC 2009
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Konstantin Belousov wrote:
> 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
Thanks!
> 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);
>
- --
Xin LI <delphij at delphij.net> http://www.delphij.net/
FreeBSD - The Power to Serve!
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.12 (FreeBSD)
iEYEARECAAYFAkrFTIAACgkQi+vbBBjt66DwFgCgn1DSEwLvKdf05bwSWqe3cKwl
qZEAn28OF2G63pmKDzTB5mm2O9SaGuQB
=7Ae1
-----END PGP SIGNATURE-----
More information about the svn-src-all
mailing list