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
../test-skeleton.c.
(do_test): Mark static.
#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;
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 ();
return 0;
}
-
-#include "../test-skeleton.c"
#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;
}
}
-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 ();
do_random_tests ();
return ret;
}
-
-#include "../test-skeleton.c"
#include <fcntl.h>
#include <locale.h>
#include <obstack.h>
-#include <paths.h>
#include <setjmp.h>
#include <signal.h>
#include <stdio.h>
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;
ret = 1;
}
- fd = posix_openpt (O_RDWR);
+ int fd = posix_openpt (O_RDWR);
if (fd != -1)
{
char enough[1000];
#include <stdlib.h>
#include <unistd.h>
+
+static int do_test(void);
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
+
+
static jmp_buf b;
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;
puts ("second longjmp returned");
return 1;
}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
<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>
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[])