Avoid outputting to TTY after an expected memory corruption in testcase
Commit Message
Protect TTY against an expected memory corruption from testcase
tst-malloc-backtrace, which is expected to SIGABRT after a forced memory
corruption.
2015-06-02 Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
* malloc/tst-malloc-backtrace.c(do_test): Redirect libc fatal
errors to stderr.
---
malloc/tst-malloc-backtrace.c | 15 ++++++++++-----
test-skeleton.c | 28 +++++++++++++++++-----------
2 files changed, 27 insertions(+), 16 deletions(-)
Comments
On Tue, Jun 02, 2015 at 05:29:34PM -0300, Tulio Magno Quites Machado Filho wrote:
> Protect TTY against an expected memory corruption from testcase
> tst-malloc-backtrace, which is expected to SIGABRT after a forced memory
> corruption.
>
> 2015-06-02 Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
>
> * malloc/tst-malloc-backtrace.c(do_test): Redirect libc fatal
> errors to stderr.
Thanks, this looks good to me.
Siddhesh
@@ -30,12 +30,22 @@ call_free (void *ptr)
*(size_t *)(ptr - sizeof (size_t)) = 1;
}
+int do_test (void);
+
+#define TEST_FUNCTION do_test ()
+#define EXPECTED_SIGNAL SIGABRT
+
+#include "../test-skeleton.c"
+
int
do_test (void)
{
void *ptr1 = malloc (SIZE);
void *ptr2 = malloc (SIZE);
+ /* Avoid unwanted output to TTY after an expected memory corruption. */
+ ignore_stderr();
+
call_free (ptr1);
ptr1 = malloc (SIZE);
@@ -43,8 +53,3 @@ do_test (void)
doesn't optimize out that malloc call. */
return (ptr1 == ptr2);
}
-
-#define TEST_FUNCTION do_test ()
-#define EXPECTED_SIGNAL SIGABRT
-
-#include "../test-skeleton.c"
@@ -218,6 +218,22 @@ signal_handler (int sig __attribute__ ((unused)))
exit (1);
}
+/* Avoid all the buffer overflow messages on stderr. */
+static void
+__attribute__ ((unused))
+ignore_stderr (void)
+{
+ 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 fortification error handler. Used when tests want to verify that bad
code is caught by the library. */
static void
@@ -231,17 +247,7 @@ set_fortify_handler (void (*handler) (int sig))
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);
+ ignore_stderr ();
}
/* We provide the entry point here. */