On Tue, 05 Jun 2001 12:21:46 +0200, Daniel Rock <[EMAIL PROTECTED]> said: Daniel> Hi, Daniel> I just noticed: Doing a simple "cat /proc/$$/map" panics the system: (snip) Daniel> _mtx_unlock_sleep(c049c9c0,0,c03b01a0,f2) at _mtx_unlock_sleep+0xa3 Daniel> lockmgr(c55fadb0,10001,c049c9c0,c55f4100) at lockmgr+0x9d Daniel> procfs_domap(c55f4100,c55f4320,c0c90da0,c6eefefc,c0cc3180) at Daniel> procfs_domap+0x88 Lock and unlock of vm_mtx around vm_map_(un)lock_read() in procfs_domap() are missing. The attached patch should fix the bug.
Index: fs/procfs/procfs_map.c =================================================================== RCS file: /home/naklab/tanimura/rina2/CVS/FreeBSD/sys/fs/procfs/procfs_map.c,v retrieving revision 1.1.1.1.8.1 diff -u -r1.1.1.1.8.1 procfs_map.c --- fs/procfs/procfs_map.c 2001/05/27 02:39:08 1.1.1.1.8.1 +++ fs/procfs/procfs_map.c 2001/06/05 12:16:06 @@ -87,6 +87,8 @@ 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 @@ 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; }
-- Seigo Tanimura <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>