summaryrefslogtreecommitdiffstats
path: root/lib/libkvm/kvm_proc2.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libkvm/kvm_proc2.c')
-rw-r--r--lib/libkvm/kvm_proc2.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/lib/libkvm/kvm_proc2.c b/lib/libkvm/kvm_proc2.c
index 33052b3e6e8..f98c7db2ebc 100644
--- a/lib/libkvm/kvm_proc2.c
+++ b/lib/libkvm/kvm_proc2.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kvm_proc2.c,v 1.8 2011/07/05 04:48:01 guenther Exp $ */
+/* $OpenBSD: kvm_proc2.c,v 1.9 2012/01/07 05:38:12 guenther Exp $ */
/* $NetBSD: kvm_proc.c,v 1.30 1999/03/24 05:50:50 mrg Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -118,7 +118,7 @@ kvm_proclist(kvm_t *kd, int op, int arg, struct proc *p,
struct vmspace vm, *vmp;
struct plimit limits, *limp;
struct pstats pstats, *ps;
- pid_t parent_pid, leader_pid;
+ pid_t process_pid, parent_pid, leader_pid;
int cnt = 0;
for (; cnt < maxcnt && p != NULL; p = LIST_NEXT(&proc, p_list)) {
@@ -136,6 +136,17 @@ kvm_proclist(kvm_t *kd, int op, int arg, struct proc *p,
process.ps_cred);
return (-1);
}
+ if ((proc.p_flag & P_THREAD) == 0)
+ process_pid = proc.p_pid;
+ else {
+ if (KREAD(kd, (u_long)process.ps_mainproc, &proc2)) {
+ _kvm_err(kd, kd->program,
+ "can't read proc at %x",
+ process.ps_mainproc);
+ return (-1);
+ }
+ process_pid = proc2.p_pid;
+ }
if (KREAD(kd, (u_long)pcred.pc_ucred, &ucred)) {
_kvm_err(kd, kd->program, "can't read ucred at %x",
pcred.pc_ucred);
@@ -282,6 +293,7 @@ kvm_proclist(kvm_t *kd, int op, int arg, struct proc *p,
#undef do_copy_str
/* stuff that's too painful to generalize into the macros */
+ kp.p_pid = process_pid;
kp.p_ppid = parent_pid;
kp.p_sid = leader_pid;
if ((process.ps_flags & PS_CONTROLT) && sess.s_ttyp != NULL) {
@@ -406,10 +418,3 @@ kvm_getprocs(kvm_t *kd, int op, int arg, size_t esize, int *cnt)
*cnt = nprocs;
return (kd->procbase);
}
-
-struct kinfo_proc *
-kvm_getproc2(kvm_t *kd, int op, int arg, size_t esize, int *cnt)
-{
- return (kvm_getprocs(kd, op, arg, esize, cnt));
-}
-