From c5bb8e2399f55c09a98c66936940ba744b5841da Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Sun, 29 Dec 2013 23:13:20 +0000 Subject: 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 --- test-skeleton.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'test-skeleton.c') 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 @@ . */ #include +#include #include #include +#include #include #include #include @@ -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[]) -- cgit v1.2.1