Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Mike Frysinger committed Feb 8, 2014
1 parent 10444e4 commit c5bb8e2
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 79 deletions.
10 changes: 10 additions & 0 deletions ChangeLog
@@ -1,3 +1,13 @@
2014-02-08 Mike Frysinger <vapier@gentoo.org>

* benchtests/bench-strcpy_chk.c: Move test-skeleton.c to top.
(test_main): Replace code with set_fortify_handler call.
* debug/test-strcpy_chk.c: Likewise.
* debug/tst-chk1.c: Likewise.
* debug/tst-longjmp_chk.c: Likewise.
* test-skeleton.c: Include fcntl.h & paths.h
(set_fortify_handler): Define.

2014-02-08 Mike Frysinger <vapier@gentoo.org>

* debug/tst-longjmp_chk.c: Add header comment and include
Expand Down
25 changes: 5 additions & 20 deletions benchtests/bench-strcpy_chk.c
Expand Up @@ -53,6 +53,9 @@ simple_strcpy_chk (char *dst, const char *src, size_t len)
#include <setjmp.h>
#include <signal.h>

static int test_main (void);
#include "../test-skeleton.c"

volatile int chk_fail_ok;
jmp_buf chk_fail_buf;

Expand Down Expand Up @@ -156,28 +159,12 @@ do_test (size_t align1, size_t align2, size_t len, size_t dlen, int max_char)
putchar ('\n');
}

int
static int
test_main (void)
{
size_t i;

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);
set_fortify_handler (handler);

test_init ();

Expand Down Expand Up @@ -254,5 +241,3 @@ test_main (void)

return 0;
}

#include "../test-skeleton.c"
26 changes: 6 additions & 20 deletions debug/test-strcpy_chk.c
Expand Up @@ -54,6 +54,10 @@ simple_strcpy_chk (char *dst, const char *src, size_t len)
#include <setjmp.h>
#include <signal.h>

static int test_main (void);
#define TEST_FUNCTION test_main ()
#include "../test-skeleton.c"

volatile int chk_fail_ok;
jmp_buf chk_fail_buf;

Expand Down Expand Up @@ -266,28 +270,12 @@ Iteration %zd - different strings, %s (%zd, %zd, %zd)\n",
}
}

int
static int
test_main (void)
{
size_t i;

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);
set_fortify_handler (handler);

test_init ();

Expand Down Expand Up @@ -365,5 +353,3 @@ test_main (void)
do_random_tests ();
return ret;
}

#include "../test-skeleton.c"
21 changes: 2 additions & 19 deletions debug/tst-chk1.c
Expand Up @@ -20,7 +20,6 @@
#include <fcntl.h>
#include <locale.h>
#include <obstack.h>
#include <paths.h>
#include <setjmp.h>
#include <signal.h>
#include <stdio.h>
Expand Down Expand Up @@ -119,23 +118,7 @@ int num2 = 987654;
static int
do_test (void)
{
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);
set_fortify_handler (handler);

struct A { char buf1[9]; char buf2[1]; } a;
struct wA { wchar_t buf1[9]; wchar_t buf2[1]; } wa;
Expand Down Expand Up @@ -1366,7 +1349,7 @@ do_test (void)
ret = 1;
}

fd = posix_openpt (O_RDWR);
int fd = posix_openpt (O_RDWR);
if (fd != -1)
{
char enough[1000];
Expand Down
27 changes: 7 additions & 20 deletions debug/tst-longjmp_chk.c
Expand Up @@ -10,6 +10,12 @@
#include <stdlib.h>
#include <unistd.h>


static int do_test(void);
#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"


static jmp_buf b;


Expand Down Expand Up @@ -48,23 +54,7 @@ handler (int sig)
static int
do_test (void)
{
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);
set_fortify_handler (handler);


expected_to_fail = false;
Expand All @@ -86,6 +76,3 @@ do_test (void)
puts ("second longjmp returned");
return 1;
}

#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"
28 changes: 28 additions & 0 deletions test-skeleton.c
Expand Up @@ -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>
Expand Down Expand Up @@ -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[])
Expand Down

0 comments on commit c5bb8e2

Please sign in to comment.