summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_proc.c
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2007-12-09 17:22:27 +0000
committerrwatson <rwatson@FreeBSD.org>2007-12-09 17:22:27 +0000
commitcce7cfdaf572e448477a6ffcc3f317cd9d7018b4 (patch)
treeddaf99357f8f85342da9c6b1b4f60dd5bbf7d7b5 /sys/kern/kern_proc.c
parent3f2bc4767df0b4622ebdb86333bbed90e3c6ce5f (diff)
downloadFreeBSD-src-cce7cfdaf572e448477a6ffcc3f317cd9d7018b4.zip
FreeBSD-src-cce7cfdaf572e448477a6ffcc3f317cd9d7018b4.tar.gz
Check for P_WEXIT before PHOLD() on a process in kstack and vm query
sysctls, as PHOLD() asserts !P_WEXIT. Reported by: Michael Plass <mfp49_freebsd at plass-family dot net>
Diffstat (limited to 'sys/kern/kern_proc.c')
-rw-r--r--sys/kern/kern_proc.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c
index 818efa7..7fca5dd 100644
--- a/sys/kern/kern_proc.c
+++ b/sys/kern/kern_proc.c
@@ -1309,6 +1309,10 @@ sysctl_kern_proc_vmmap(SYSCTL_HANDLER_ARGS)
name = (int *)arg1;
if ((p = pfind((pid_t)name[0])) == NULL)
return (ESRCH);
+ if (p->p_flag & P_WEXIT) {
+ PROC_UNLOCK(p);
+ return (ESRCH);
+ }
if ((error = p_candebug(curthread, p))) {
PROC_UNLOCK(p);
return (error);
@@ -1457,6 +1461,10 @@ sysctl_kern_proc_kstack(SYSCTL_HANDLER_ARGS)
name = (int *)arg1;
if ((p = pfind((pid_t)name[0])) == NULL)
return (ESRCH);
+ if (p->p_flag & P_WEXIT) {
+ PROC_UNLOCK(p);
+ return (ESRCH);
+ }
if ((error = p_candebug(curthread, p))) {
PROC_UNLOCK(p);
return (error);
OpenPOWER on IntegriCloud