summaryrefslogtreecommitdiffstats
path: root/lib/libc
diff options
context:
space:
mode:
authorguenther <guenther@openbsd.org>2015-10-25 04:13:59 +0000
committerguenther <guenther@openbsd.org>2015-10-25 04:13:59 +0000
commitb664e637d4d10436cbdaec236e94bfb819ed6887 (patch)
tree9ff0b4a2a12a1026227c14d70ccbe9c08d54ba2a /lib/libc
parentUse dprintf() instead of fprintf() in the signal handler (diff)
downloadwireguard-openbsd-b664e637d4d10436cbdaec236e94bfb819ed6887.tar.xz
wireguard-openbsd-b664e637d4d10436cbdaec236e94bfb819ed6887.zip
Use sigaction() instead of signal() to avoid pulling in unnecessary
wrappers. To keep uses from crawling back in, mark signal() as deprecated inside libc. ok deraadt@
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/gen/signal.c3
-rw-r--r--lib/libc/hidden/signal.h4
-rw-r--r--lib/libc/stdlib/abort.c8
3 files changed, 8 insertions, 7 deletions
diff --git a/lib/libc/gen/signal.c b/lib/libc/gen/signal.c
index 0ca411bca64..c948ef0e5e0 100644
--- a/lib/libc/gen/signal.c
+++ b/lib/libc/gen/signal.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: signal.c,v 1.9 2015/10/23 04:39:24 guenther Exp $ */
+/* $OpenBSD: signal.c,v 1.10 2015/10/25 04:13:59 guenther Exp $ */
/*
* Copyright (c) 1985, 1989, 1993
* The Regents of the University of California. All rights reserved.
@@ -51,6 +51,5 @@ signal(int s, sig_t a)
return (SIG_ERR);
return (osa.sa_handler);
}
-DEF_STRONG(signal);
__weak_alias(bsd_signal, signal);
diff --git a/lib/libc/hidden/signal.h b/lib/libc/hidden/signal.h
index 10bb3e41884..f23578d725d 100644
--- a/lib/libc/hidden/signal.h
+++ b/lib/libc/hidden/signal.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: signal.h,v 1.8 2015/10/23 04:39:24 guenther Exp $ */
+/* $OpenBSD: signal.h,v 1.9 2015/10/25 04:13:59 guenther Exp $ */
/*
* Copyright (c) 2015 Philip Guenther <guenther@openbsd.org>
*
@@ -44,7 +44,7 @@ PROTO_NORMAL(sigemptyset);
PROTO_NORMAL(sigfillset);
PROTO_DEPRECATED(siginterrupt);
PROTO_NORMAL(sigismember);
-PROTO_NORMAL(signal);
+PROTO_STD_DEPRECATED(signal);
PROTO_DEPRECATED(sigpause);
PROTO_NORMAL(sigpending);
PROTO_WRAP(sigprocmask);
diff --git a/lib/libc/stdlib/abort.c b/lib/libc/stdlib/abort.c
index 710cd7da478..129a1735f3b 100644
--- a/lib/libc/stdlib/abort.c
+++ b/lib/libc/stdlib/abort.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: abort.c,v 1.19 2015/10/23 04:39:24 guenther Exp $ */
+/* $OpenBSD: abort.c,v 1.20 2015/10/25 04:13:59 guenther Exp $ */
/*
* Copyright (c) 1985 Regents of the University of California.
* All rights reserved.
@@ -39,7 +39,7 @@ void
abort(void)
{
sigset_t mask;
-
+ struct sigaction sa;
sigfillset(&mask);
/*
@@ -55,7 +55,9 @@ abort(void)
* if SIGABRT ignored, or caught and the handler returns, do
* it again, only harder.
*/
- (void)signal(SIGABRT, SIG_DFL);
+ memset(&sa, 0, sizeof(sa));
+ sa.sa_handler = SIG_DFL;
+ (void)sigaction(SIGABRT, &sa, NULL);
(void)sigprocmask(SIG_SETMASK, &mask, NULL);
(void)raise(SIGABRT);
_exit(1);