diff options
author | Mateusz Guzik <mjg@FreeBSD.org> | 2014-08-30 03:10:55 +0000 |
---|---|---|
committer | Mateusz Guzik <mjg@FreeBSD.org> | 2014-08-30 03:10:55 +0000 |
commit | 6662ce5aab9c7549ae7f26698612cc9c855823d8 (patch) | |
tree | acf8028648303bc453543da135f51342e2fa25c7 /sys/compat/linprocfs | |
parent | 0375d6f5f9f27448298624c52d5ae94c6b40ec80 (diff) | |
download | src-6662ce5aab9c7549ae7f26698612cc9c855823d8.tar.gz src-6662ce5aab9c7549ae7f26698612cc9c855823d8.zip |
Add missing proctree locking to fill_kinfo_proc consumers.
This fixes r270444.
Pointy hat: mjg
Reported by: many
MFC after: 1 week
Notes
Notes:
svn path=/head/; revision=270834
Diffstat (limited to 'sys/compat/linprocfs')
-rw-r--r-- | sys/compat/linprocfs/linprocfs.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sys/compat/linprocfs/linprocfs.c b/sys/compat/linprocfs/linprocfs.c index 426047e41e83..7293a28d5846 100644 --- a/sys/compat/linprocfs/linprocfs.c +++ b/sys/compat/linprocfs/linprocfs.c @@ -645,8 +645,10 @@ linprocfs_doprocstat(PFS_FILL_ARGS) static int ratelimit = 0; vm_offset_t startcode, startdata; + sx_slock(&proctree_lock); PROC_LOCK(p); fill_kinfo_proc(p, &kp); + sx_sunlock(&proctree_lock); if (p->p_vmspace) { startcode = (vm_offset_t)p->p_vmspace->vm_taddr; startdata = (vm_offset_t)p->p_vmspace->vm_daddr; @@ -722,9 +724,11 @@ linprocfs_doprocstatm(PFS_FILL_ARGS) struct kinfo_proc kp; segsz_t lsize; + sx_slock(&proctree_lock); PROC_LOCK(p); fill_kinfo_proc(p, &kp); PROC_UNLOCK(p); + sx_sunlock(&proctree_lock); /* * See comments in linprocfs_doprocstatus() regarding the @@ -757,6 +761,7 @@ linprocfs_doprocstatus(PFS_FILL_ARGS) struct sigacts *ps; int i; + sx_slock(&proctree_lock); PROC_LOCK(p); td2 = FIRST_THREAD_IN_PROC(p); /* XXXKSE pretend only one thread */ @@ -795,6 +800,8 @@ linprocfs_doprocstatus(PFS_FILL_ARGS) } fill_kinfo_proc(p, &kp); + sx_sunlock(&proctree_lock); + sbuf_printf(sb, "Name:\t%s\n", p->p_comm); /* XXX escape */ sbuf_printf(sb, "State:\t%s\n", state); |