X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/55e303ae13a4cf49d70f2294092726f2fffb9ef2..5eebf7385fedb1517b66b53c28e5aa6bb0a2be50:/bsd/kern/kern_sig.c?ds=sidebyside diff --git a/bsd/kern/kern_sig.c b/bsd/kern/kern_sig.c index 9f6c488fa..6c593326e 100644 --- a/bsd/kern/kern_sig.c +++ b/bsd/kern/kern_sig.c @@ -1,24 +1,21 @@ /* - * Copyright (c) 2000-2001 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * - * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. + * The contents of this file constitute Original Code as defined in and + * are subject to the Apple Public Source License Version 1.1 (the + * "License"). You may not use this file except in compliance with the + * License. Please obtain a copy of the License at + * http://www.apple.com/publicsource and read it before using this file. * - * This file contains Original Code and/or Modifications of Original Code - * as defined in and that are subject to the Apple Public Source License - * Version 2.0 (the 'License'). You may not use this file except in - * compliance with the License. Please obtain a copy of the License at - * http://www.opensource.apple.com/apsl/ and read it before using this - * file. - * - * The Original Code and all software distributed under the License are - * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * This Original Code and all software distributed under the License are + * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. - * Please see the License for the specific language governing rights and - * limitations under the License. + * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the + * License for the specific language governing rights and limitations + * under the License. * * @APPLE_LICENSE_HEADER_END@ */ @@ -85,9 +82,10 @@ #include #include #include - #include +#include + #include #include @@ -1084,6 +1082,8 @@ kill(cp, uap, retval) register struct proc *p; register struct pcred *pc = cp->p_cred; + AUDIT_ARG(pid, uap->pid); + AUDIT_ARG(signum, uap->signum); if ((u_int)uap->signum >= NSIG) return (EINVAL); if (uap->pid > 0) { @@ -1098,6 +1098,7 @@ kill(cp, uap, retval) } return (ESRCH); } + AUDIT_ARG(process, p); if (!cansignal(cp, pc, p, uap->signum)) return (EPERM); if (uap->signum) @@ -1128,6 +1129,8 @@ okillpg(p, uap, retval) register_t *retval; { + AUDIT_ARG(pid, uap->pgid); + AUDIT_ARG(signum, uap->signum); if ((u_int)uap->signum >= NSIG) return (EINVAL); return (killpg1(p, uap->signum, uap->pgid, 0)); @@ -1630,7 +1633,8 @@ psignal_lock(p, signum, withlock) (void) task_resume(sig_task); } p->p_stat = SRUN; - } + } else if (p->p_stat == SSTOP) + goto psigout; goto run; } else { /* Default action - varies */ @@ -1715,6 +1719,8 @@ psignal_lock(p, signum, withlock) * All other signals wake up the process, but don't * resume it. */ + if (p->p_stat == SSTOP) + goto psigout; goto run; } } @@ -2464,6 +2470,7 @@ stop(p) { p->p_stat = SSTOP; p->p_flag &= ~P_WAITED; + if (p->p_pptr->p_stat != SSTOP) wakeup((caddr_t)p->p_pptr); (void) task_suspend(p->task); /*XXX*/ }