mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03:00
Avoid outputting to TTY after an expected memory corruption in testcase
Protect TTY against an expected memory corruption from testcase tst-malloc-backtrace, which is expected to SIGABRT after a forced memory corruption.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2015-06-05 Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
|
||||||
|
|
||||||
|
* malloc/tst-malloc-backtrace.c (do_test): Redirect libc fatal
|
||||||
|
errors to stderr.
|
||||||
|
|
||||||
2015-06-05 Florian Weimer <fweimer@redhat.com>
|
2015-06-05 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
[BZ #15661]
|
[BZ #15661]
|
||||||
|
@ -30,12 +30,22 @@ call_free (void *ptr)
|
|||||||
*(size_t *)(ptr - sizeof (size_t)) = 1;
|
*(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
|
int
|
||||||
do_test (void)
|
do_test (void)
|
||||||
{
|
{
|
||||||
void *ptr1 = malloc (SIZE);
|
void *ptr1 = malloc (SIZE);
|
||||||
void *ptr2 = malloc (SIZE);
|
void *ptr2 = malloc (SIZE);
|
||||||
|
|
||||||
|
/* Avoid unwanted output to TTY after an expected memory corruption. */
|
||||||
|
ignore_stderr();
|
||||||
|
|
||||||
call_free (ptr1);
|
call_free (ptr1);
|
||||||
ptr1 = malloc (SIZE);
|
ptr1 = malloc (SIZE);
|
||||||
|
|
||||||
@ -43,8 +53,3 @@ do_test (void)
|
|||||||
doesn't optimize out that malloc call. */
|
doesn't optimize out that malloc call. */
|
||||||
return (ptr1 == ptr2);
|
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);
|
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
|
/* Set fortification error handler. Used when tests want to verify that bad
|
||||||
code is caught by the library. */
|
code is caught by the library. */
|
||||||
static void
|
static void
|
||||||
@ -231,17 +247,7 @@ set_fortify_handler (void (*handler) (int sig))
|
|||||||
sigemptyset (&sa.sa_mask);
|
sigemptyset (&sa.sa_mask);
|
||||||
|
|
||||||
sigaction (SIGABRT, &sa, NULL);
|
sigaction (SIGABRT, &sa, NULL);
|
||||||
|
ignore_stderr ();
|
||||||
/* 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. */
|
/* We provide the entry point here. */
|
||||||
|
Reference in New Issue
Block a user