aboutsummaryrefslogtreecommitdiff
path: root/sys/compat/linprocfs
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2014-08-30 03:10:55 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2014-08-30 03:10:55 +0000
commit6662ce5aab9c7549ae7f26698612cc9c855823d8 (patch)
treeacf8028648303bc453543da135f51342e2fa25c7 /sys/compat/linprocfs
parent0375d6f5f9f27448298624c52d5ae94c6b40ec80 (diff)
downloadsrc-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.c7
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);