diff options
author | Seigo Tanimura <tanimura@FreeBSD.org> | 2001-06-06 04:13:11 +0000 |
---|---|---|
committer | Seigo Tanimura <tanimura@FreeBSD.org> | 2001-06-06 04:13:11 +0000 |
commit | 326f419bb9430ea4387b997115a55b04726f3d84 (patch) | |
tree | e65f893a5b31d1bea972f479215c46a8894068e7 /sys/fs | |
parent | 262c9f8a3b623610a9e4560e44ceb4452fb0a2b6 (diff) | |
download | src-326f419bb9430ea4387b997115a55b04726f3d84.tar.gz src-326f419bb9430ea4387b997115a55b04726f3d84.zip |
Lock VM Giant prior to locking a vm map.
Spotted by: Daniel Rock <D.Rock@t-online.de>
Tested by: David Wolfskill <david@catwhisker.org>,
Sean Eric Fagan <sef@kithrup.com>
Notes
Notes:
svn path=/head/; revision=77799
Diffstat (limited to 'sys/fs')
-rw-r--r-- | sys/fs/procfs/procfs_map.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sys/fs/procfs/procfs_map.c b/sys/fs/procfs/procfs_map.c index e974b04fa59e..047a67f44b21 100644 --- a/sys/fs/procfs/procfs_map.c +++ b/sys/fs/procfs/procfs_map.c @@ -87,6 +87,8 @@ procfs_domap(curp, p, pfs, uio) if (uio->uio_offset != 0) return (0); + mtx_lock(&vm_mtx); + error = 0; if (map != &curproc->p_vmspace->vm_map) vm_map_lock_read(map); @@ -169,12 +171,17 @@ case OBJT_DEVICE: error = EFBIG; break; } + mtx_unlock(&vm_mtx); error = uiomove(mebuffer, len, uio); + mtx_lock(&vm_mtx); if (error) break; } if (map != &curproc->p_vmspace->vm_map) vm_map_unlock_read(map); + + mtx_unlock(&vm_mtx); + return error; } |