aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_sig.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_sig.c')
-rw-r--r--sys/kern/kern_sig.c32
1 files changed, 29 insertions, 3 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index e0e40b77809d..8450e1c2f588 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* from: @(#)kern_sig.c 7.35 (Berkeley) 6/28/91
- * $Id: kern_sig.c,v 1.5 1993/10/16 15:24:27 rgrimes Exp $
+ * $Id: kern_sig.c,v 1.9 1993/12/19 00:51:30 wollman Exp $
*/
#define SIGPROP /* include signal properties table */
@@ -59,6 +59,11 @@
#include "kinfo_proc.h"
#include "user.h" /* for coredump */
+static void setsigvec(struct proc *, int, struct sigaction *);
+static void stop(struct proc *);
+static void sigexit(struct proc *, int);
+static int killpg1(struct proc *, int, int, int);
+
/*
* Can process p, with pcred pc, send the signal signo to process q?
*/
@@ -77,6 +82,7 @@ struct sigaction_args {
};
/* ARGSUSED */
+int
sigaction(p, uap, retval)
struct proc *p;
register struct sigaction_args *uap;
@@ -116,6 +122,7 @@ sigaction(p, uap, retval)
return (0);
}
+void
setsigvec(p, sig, sa)
register struct proc *p;
int sig;
@@ -229,6 +236,7 @@ struct sigprocmask_args {
sigset_t mask;
};
+int
sigprocmask(p, uap, retval)
register struct proc *p;
struct sigprocmask_args *uap;
@@ -261,6 +269,7 @@ sigprocmask(p, uap, retval)
}
/* ARGSUSED */
+int
sigpending(p, uap, retval)
struct proc *p;
void *uap;
@@ -283,6 +292,7 @@ struct osigvec_args {
};
/* ARGSUSED */
+int
osigvec(p, uap, retval)
struct proc *p;
register struct osigvec_args *uap;
@@ -327,6 +337,7 @@ struct osigblock_args {
int mask;
};
+int
osigblock(p, uap, retval)
register struct proc *p;
struct osigblock_args *uap;
@@ -344,6 +355,7 @@ struct osigsetmask_args {
int mask;
};
+int
osigsetmask(p, uap, retval)
struct proc *p;
struct osigsetmask_args *uap;
@@ -369,6 +381,7 @@ struct sigsuspend_args {
};
/* ARGSUSED */
+int
sigsuspend(p, uap, retval)
register struct proc *p;
struct sigsuspend_args *uap;
@@ -397,6 +410,7 @@ struct sigstack_args {
};
/* ARGSUSED */
+int
sigstack(p, uap, retval)
struct proc *p;
register struct sigstack_args *uap;
@@ -420,6 +434,7 @@ struct kill_args {
};
/* ARGSUSED */
+int
kill(cp, uap, retval)
register struct proc *cp;
register struct kill_args *uap;
@@ -460,6 +475,7 @@ struct okillpg_args {
};
/* ARGSUSED */
+int
okillpg(p, uap, retval)
struct proc *p;
register struct okillpg_args *uap;
@@ -476,6 +492,7 @@ okillpg(p, uap, retval)
* Common code for kill process group/broadcast kill.
* cp is calling process.
*/
+static int
killpg1(cp, signo, pgid, all)
register struct proc *cp;
int signo, pgid, all;
@@ -605,6 +622,10 @@ psignal(p, sig)
register sig_t action;
int mask;
+ /* Ignore signals to system (internal) daemons */
+ if (p->p_flag & SSYS)
+ return;
+
if ((unsigned)sig >= NSIG || sig == 0)
panic("psignal sig");
mask = sigmask(sig);
@@ -795,6 +816,7 @@ out:
* while (sig = CURSIG(curproc))
* psig(sig);
*/
+int
issig(p)
register struct proc *p;
{
@@ -932,6 +954,7 @@ issig(p)
* Signals are handled elsewhere.
* The process must not be on the run queue.
*/
+static void
stop(p)
register struct proc *p;
{
@@ -1012,6 +1035,7 @@ psig(sig)
* If dumping core, save the signal number for the debugger.
* Calls exit and does not return.
*/
+static void
sigexit(p, sig)
register struct proc *p;
int sig;
@@ -1037,6 +1061,7 @@ sigexit(p, sig)
* or was not produced from the same program,
* the link count to the corefile is > 1.
*/
+int
coredump(p)
register struct proc *p;
{
@@ -1061,12 +1086,12 @@ coredump(p)
sprintf(name, "%s.core", p->p_comm);
nd.ni_dirp = name;
nd.ni_segflg = UIO_SYSSPACE;
- if ((error = vn_open(&nd, p, FWRITE, 0644)) == 0)
+ if ((error = vn_open(&nd, p, FWRITE, 0600)) == 0)
exists = 1;
else
exists = 0;
if (error == ENOENT)
- error = vn_open(&nd, p, O_CREAT | FWRITE, 0644);
+ error = vn_open(&nd, p, O_CREAT | FWRITE, 0600);
if (error)
return (error);
vp = nd.ni_vp;
@@ -1131,6 +1156,7 @@ out:
* Flag error in case process won't see signal immediately (blocked or ignored).
*/
/* ARGSUSED */
+int
nosys(p, args, retval)
struct proc *p;
void *args;