This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 2/3] 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>

2013-12-29   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.
---
 benchtests/bench-strcpy_chk.c | 25 +++++--------------------
 debug/test-strcpy_chk.c       | 26 ++++++--------------------
 debug/tst-chk1.c              | 21 ++-------------------
 debug/tst-longjmp_chk.c       | 27 +++++++--------------------
 test-skeleton.c               | 28 ++++++++++++++++++++++++++++
 5 files changed, 48 insertions(+), 79 deletions(-)

diff --git a/benchtests/bench-strcpy_chk.c b/benchtests/bench-strcpy_chk.c
index 3c2a0b3..36c23f3 100644
--- a/benchtests/bench-strcpy_chk.c
+++ b/benchtests/bench-strcpy_chk.c
@@ -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;
 
@@ -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 ();
 
@@ -254,5 +241,3 @@ test_main (void)
 
   return 0;
 }
-
-#include "../test-skeleton.c"
diff --git a/debug/test-strcpy_chk.c b/debug/test-strcpy_chk.c
index 736ef3c..857f793 100644
--- a/debug/test-strcpy_chk.c
+++ b/debug/test-strcpy_chk.c
@@ -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;
 
@@ -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 ();
 
@@ -365,5 +353,3 @@ test_main (void)
   do_random_tests ();
   return ret;
 }
-
-#include "../test-skeleton.c"
diff --git a/debug/tst-chk1.c b/debug/tst-chk1.c
index 6ca8d9d..3b3b4dd 100644
--- a/debug/tst-chk1.c
+++ b/debug/tst-chk1.c
@@ -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>
@@ -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;
@@ -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];
diff --git a/debug/tst-longjmp_chk.c b/debug/tst-longjmp_chk.c
index dba1855..e4e93d2 100644
--- a/debug/tst-longjmp_chk.c
+++ b/debug/tst-longjmp_chk.c
@@ -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;
 
 
@@ -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;
@@ -86,6 +76,3 @@ do_test (void)
   puts ("second longjmp returned");
   return 1;
 }
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test-skeleton.c b/test-skeleton.c
index 013a838..576e1e5 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[])
-- 
1.8.4.3


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]