diff options
author | tanimura <tanimura@FreeBSD.org> | 2001-06-06 04:13:11 +0000 |
---|---|---|
committer | tanimura <tanimura@FreeBSD.org> | 2001-06-06 04:13:11 +0000 |
commit | f16ee523808e5e555dd927761a96a390ca36ca47 (patch) | |
tree | 3acfcd1e7fb01dd4b99ed91468a583dc48febae0 /sys | |
parent | 7a4f835060bb43ff8f611b21d3b48d7f5be0be87 (diff) | |
download | FreeBSD-src-f16ee523808e5e555dd927761a96a390ca36ca47.zip FreeBSD-src-f16ee523808e5e555dd927761a96a390ca36ca47.tar.gz |
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>
Diffstat (limited to 'sys')
-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 e974b04..047a67f 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; } |