diff options
author | 2020-09-16 13:50:42 +0000 | |
---|---|---|
committer | 2020-09-16 13:50:42 +0000 | |
commit | fffcd96b0e8a24a05a0ae9508218adc22ed22f4e (patch) | |
tree | e390a603b10d9b2fb1b8df1399c9e72e0f5f2ce3 /sys/kern | |
parent | noop NAME_CONSTRAINTS_check stub (diff) | |
download | wireguard-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.c | 9 | ||||
-rw-r--r-- | sys/kern/kern_proc.c | 9 | ||||
-rw-r--r-- | sys/kern/kern_sig.c | 19 |
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. */ |