diff options
author | 2012-06-06 04:47:42 +0000 | |
---|---|---|
committer | 2012-06-06 04:47:42 +0000 | |
commit | 0006fbf08a39731d1981db2e68f5ce1dbe8d1203 (patch) | |
tree | 5aa1cb2b1fd5d0e95b57ecadfaf87170b5acc50d | |
parent | Add support for hiding a user's processes in top. (diff) | |
download | wireguard-openbsd-0006fbf08a39731d1981db2e68f5ce1dbe8d1203.tar.xz wireguard-openbsd-0006fbf08a39731d1981db2e68f5ce1dbe8d1203.zip |
EVFILT_SIGNAL and EVFILT_PROC events need to track the process they're
attached to and not just the thread, which can go away.
Problem observed by jsg@; ok jsg@ matthew@
-rw-r--r-- | sys/kern/kern_event.c | 28 | ||||
-rw-r--r-- | sys/kern/kern_sig.c | 12 | ||||
-rw-r--r-- | sys/sys/event.h | 4 |
3 files changed, 22 insertions, 22 deletions
diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c index b016310e652..7b1469ac144 100644 --- a/sys/kern/kern_event.c +++ b/sys/kern/kern_event.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_event.c,v 1.46 2012/04/22 05:43:14 guenther Exp $ */ +/* $OpenBSD: kern_event.c,v 1.47 2012/06/06 04:47:43 guenther Exp $ */ /*- * Copyright (c) 1999,2000,2001 Jonathan Lemon <jlemon@FreeBSD.org> @@ -210,26 +210,26 @@ filt_kqueue(struct knote *kn, long hint) int filt_procattach(struct knote *kn) { - struct proc *p; + struct process *pr; - p = pfind(kn->kn_id); - if (p == NULL) + pr = prfind(kn->kn_id); + if (pr == NULL) return (ESRCH); - /* threads and exiting processes can't be specified */ - if (p->p_flag & P_THREAD || p->p_p->ps_flags & PS_EXITING) + /* exiting processes can't be specified */ + if (pr->ps_flags & PS_EXITING) return (ESRCH); /* * Fail if it's not owned by you, or the last exec gave us * setuid/setgid privs (unless you're root). */ - if (p->p_p != curproc->p_p && - (p->p_cred->p_ruid != curproc->p_cred->p_ruid || - (p->p_p->ps_flags & PS_SUGID)) && suser(curproc, 0) != 0) + if (pr != curproc->p_p && + (pr->ps_cred->p_ruid != curproc->p_cred->p_ruid || + (pr->ps_flags & PS_SUGID)) && suser(curproc, 0) != 0) return (EACCES); - kn->kn_ptr.p_proc = p; + kn->kn_ptr.p_process = pr; kn->kn_flags |= EV_CLEAR; /* automatically set */ /* @@ -242,7 +242,7 @@ filt_procattach(struct knote *kn) } /* XXX lock the proc here while adding to the list? */ - SLIST_INSERT_HEAD(&p->p_p->ps_klist, kn, kn_selnext); + SLIST_INSERT_HEAD(&pr->ps_klist, kn, kn_selnext); return (0); } @@ -258,13 +258,13 @@ filt_procattach(struct knote *kn) void filt_procdetach(struct knote *kn) { - struct proc *p = kn->kn_ptr.p_proc; + struct process *pr = kn->kn_ptr.p_process; if (kn->kn_status & KN_DETACHED) return; /* XXX locking? this might modify another process. */ - SLIST_REMOVE(&p->p_p->ps_klist, kn, knote, kn_selnext); + SLIST_REMOVE(&pr->ps_klist, kn, knote, kn_selnext); } int @@ -288,7 +288,7 @@ filt_proc(struct knote *kn, long hint) * from the process's klist */ if (event == NOTE_EXIT) { - struct process *pr = kn->kn_ptr.p_proc->p_p; + struct process *pr = kn->kn_ptr.p_process; kn->kn_status |= KN_DETACHED; kn->kn_flags |= (EV_EOF | EV_ONESHOT); diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index c1cb5857ce0..06c26542e46 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_sig.c,v 1.141 2012/04/13 16:37:51 kettenis Exp $ */ +/* $OpenBSD: kern_sig.c,v 1.142 2012/06/06 04:47:43 guenther Exp $ */ /* $NetBSD: kern_sig.c,v 1.54 1996/04/22 01:38:32 christos Exp $ */ /* @@ -1647,13 +1647,13 @@ initsiginfo(siginfo_t *si, int sig, u_long trapno, int code, union sigval val) int filt_sigattach(struct knote *kn) { - struct proc *p = curproc; + struct process *pr = curproc->p_p; - kn->kn_ptr.p_proc = p; + kn->kn_ptr.p_process = pr; kn->kn_flags |= EV_CLEAR; /* automatically set */ /* XXX lock the proc here while adding to the list? */ - SLIST_INSERT_HEAD(&p->p_p->ps_klist, kn, kn_selnext); + SLIST_INSERT_HEAD(&pr->ps_klist, kn, kn_selnext); return (0); } @@ -1661,9 +1661,9 @@ filt_sigattach(struct knote *kn) void filt_sigdetach(struct knote *kn) { - struct proc *p = kn->kn_ptr.p_proc; + struct process *pr = kn->kn_ptr.p_process; - SLIST_REMOVE(&p->p_p->ps_klist, kn, knote, kn_selnext); + SLIST_REMOVE(&pr->ps_klist, kn, knote, kn_selnext); } /* diff --git a/sys/sys/event.h b/sys/sys/event.h index 89fa08b20f8..a5ffbe7be6d 100644 --- a/sys/sys/event.h +++ b/sys/sys/event.h @@ -1,4 +1,4 @@ -/* $OpenBSD: event.h,v 1.15 2010/08/02 19:54:07 guenther Exp $ */ +/* $OpenBSD: event.h,v 1.16 2012/06/06 04:47:42 guenther Exp $ */ /*- * Copyright (c) 1999,2000,2001 Jonathan Lemon <jlemon@FreeBSD.org> @@ -147,7 +147,7 @@ struct knote { int kn_sdata; /* saved data field */ union { struct file *p_fp; /* file data pointer */ - struct proc *p_proc; /* proc pointer */ + struct process *p_process; /* process pointer */ } kn_ptr; const struct filterops *kn_fop; void *kn_hook; |