Use sigaction() instead of signal() to avoid pulling in unnecessary
authorguenther <guenther@openbsd.org>
Sun, 25 Oct 2015 04:13:59 +0000 (04:13 +0000)
committerguenther <guenther@openbsd.org>
Sun, 25 Oct 2015 04:13:59 +0000 (04:13 +0000)
wrappers.  To keep uses from crawling back in, mark signal() as
deprecated inside libc.

ok deraadt@

lib/libc/gen/signal.c
lib/libc/hidden/signal.h
lib/libc/stdlib/abort.c

index 0ca411b..c948ef0 100644 (file)
@@ -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);
index 10bb3e4..f23578d 100644 (file)
@@ -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);
index 710cd7d..129a173 100644 (file)
@@ -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);