summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authormpi <mpi@openbsd.org>2020-09-16 13:50:42 +0000
committermpi <mpi@openbsd.org>2020-09-16 13:50:42 +0000
commitfffcd96b0e8a24a05a0ae9508218adc22ed22f4e (patch)
treee390a603b10d9b2fb1b8df1399c9e72e0f5f2ce3 /sys/kern
parentnoop NAME_CONSTRAINTS_check stub (diff)
downloadwireguard-openbsd-fffcd96b0e8a24a05a0ae9508218adc22ed22f4e.tar.xz
wireguard-openbsd-fffcd96b0e8a24a05a0ae9508218adc22ed22f4e.zip
Move duplicated code to send an uncatchable SIGABRT into a function.
ok claudio@
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/kern_pledge.c9
-rw-r--r--sys/kern/kern_proc.c9
-rw-r--r--sys/kern/kern_sig.c19
3 files changed, 22 insertions, 15 deletions
diff --git a/sys/kern/kern_pledge.c b/sys/kern/kern_pledge.c
index 932b3287bba..db35de5babc 100644
--- a/sys/kern/kern_pledge.c
+++ b/sys/kern/kern_pledge.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_pledge.c,v 1.265 2020/09/16 10:06:56 jsg Exp $ */
+/* $OpenBSD: kern_pledge.c,v 1.266 2020/09/16 13:50:42 mpi Exp $ */
/*
* Copyright (c) 2015 Nicholas Marriott <nicm@openbsd.org>
@@ -529,7 +529,6 @@ pledge_fail(struct proc *p, int error, uint64_t code)
{
const char *codes = "";
int i;
- struct sigaction sa;
/* Print first matching pledge */
for (i = 0; code && pledgenames[i].bits != 0; i++)
@@ -550,11 +549,7 @@ pledge_fail(struct proc *p, int error, uint64_t code)
p->p_p->ps_acflag |= APLEDGE;
/* Send uncatchable SIGABRT for coredump */
- memset(&sa, 0, sizeof sa);
- sa.sa_handler = SIG_DFL;
- setsigvec(p, SIGABRT, &sa);
- atomic_clearbits_int(&p->p_sigmask, sigmask(SIGABRT));
- psignal(p, SIGABRT);
+ sigabort(p);
p->p_p->ps_pledge = 0; /* Disable all PLEDGE_ flags */
KERNEL_UNLOCK();
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c
index 8ef2a143949..0c4d8aeec03 100644
--- a/sys/kern/kern_proc.c
+++ b/sys/kern/kern_proc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_proc.c,v 1.86 2020/01/30 08:51:27 mpi Exp $ */
+/* $OpenBSD: kern_proc.c,v 1.87 2020/09/16 13:50:42 mpi Exp $ */
/* $NetBSD: kern_proc.c,v 1.14 1996/02/09 18:59:41 christos Exp $ */
/*
@@ -494,7 +494,6 @@ void
db_kill_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif)
{
struct process *pr;
- struct sigaction sa;
struct proc *p;
pr = prfind(addr);
@@ -506,11 +505,7 @@ db_kill_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif)
p = TAILQ_FIRST(&pr->ps_threads);
/* Send uncatchable SIGABRT for coredump */
- memset(&sa, 0, sizeof sa);
- sa.sa_handler = SIG_DFL;
- setsigvec(p, SIGABRT, &sa);
- atomic_clearbits_int(&p->p_sigmask, sigmask(SIGABRT));
- psignal(p, SIGABRT);
+ sigabort(p);
}
void
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index 1cad8c58e2e..b1c6f11c745 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_sig.c,v 1.262 2020/09/13 13:33:37 claudio Exp $ */
+/* $OpenBSD: kern_sig.c,v 1.263 2020/09/16 13:50:42 mpi Exp $ */
/* $NetBSD: kern_sig.c,v 1.54 1996/04/22 01:38:32 christos Exp $ */
/*
@@ -122,6 +122,8 @@ const int sigprop[NSIG + 1] = {
#define stopsigmask (sigmask(SIGSTOP) | sigmask(SIGTSTP) | \
sigmask(SIGTTIN) | sigmask(SIGTTOU))
+void setsigvec(struct proc *, int, struct sigaction *);
+
void proc_stop(struct proc *p, int);
void proc_stop_sweep(void *);
void *proc_stop_si;
@@ -1486,6 +1488,21 @@ sigexit(struct proc *p, int signum)
}
/*
+ * Send uncatchable SIGABRT for coredump.
+ */
+void
+sigabort(struct proc *p)
+{
+ struct sigaction sa;
+
+ memset(&sa, 0, sizeof sa);
+ sa.sa_handler = SIG_DFL;
+ setsigvec(p, SIGABRT, &sa);
+ atomic_clearbits_int(&p->p_sigmask, sigmask(SIGABRT));
+ psignal(p, SIGABRT);
+}
+
+/*
* Return 1 if `sig', a given signal, is ignored or masked for `p', a given
* thread, and 0 otherwise.
*/