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