diff options
author | Mike Frysinger <vapier@gentoo.org> | 2013-12-29 23:13:20 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2014-02-08 06:58:43 -0500 |
commit | c5bb8e2399f55c09a98c66936940ba744b5841da (patch) | |
tree | 32453369908787a9d47008667138e85225bf339f /test-skeleton.c | |
parent | 10444e425e539ec12e42415756b0a874413ce94a (diff) | |
download | glibc-c5bb8e2399f55c09a98c66936940ba744b5841da.tar.gz |
tests: unify fortification handler logic
We have multiple tests that copy & paste the same logic for disabling the
fortification output. Let's unify this in the test-skeleton instead.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'test-skeleton.c')
-rw-r--r-- | test-skeleton.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/test-skeleton.c b/test-skeleton.c index b08cfb596c..d7d2f750b7 100644 --- a/test-skeleton.c +++ b/test-skeleton.c @@ -18,8 +18,10 @@ <http://www.gnu.org/licenses/>. */ #include <errno.h> +#include <fcntl.h> #include <getopt.h> #include <malloc.h> +#include <paths.h> #include <search.h> #include <signal.h> #include <stdio.h> @@ -194,6 +196,32 @@ signal_handler (int sig __attribute__ ((unused))) exit (1); } +/* Set fortification error handler. Used when tests want to verify that bad + code is caught by the library. */ +static void +__attribute__ ((unused)) +set_fortify_handler (void (*handler) (int sig)) +{ + struct sigaction sa; + + sa.sa_handler = handler; + sa.sa_flags = 0; + sigemptyset (&sa.sa_mask); + + sigaction (SIGABRT, &sa, NULL); + + /* Avoid all the buffer overflow messages on stderr. */ + int fd = open (_PATH_DEVNULL, O_WRONLY); + if (fd == -1) + close (STDERR_FILENO); + else + { + dup2 (fd, STDERR_FILENO); + close (fd); + } + setenv ("LIBC_FATAL_STDERR_", "1", 1); +} + /* We provide the entry point here. */ int main (int argc, char *argv[]) |