mirror of git://sourceware.org/git/glibc.git
Mark success return value as volatile to work around rescheduling
Resolves #15921 The test case nptl/tst-cleanup2 fails on s390x and power6 due to instruction sheduling in gcc. This was reported in gcc: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58034 but it was concluded that gcc is allowed to assume that the first argument to sprintf is a character array - NULL not being a valid character array.
This commit is contained in:
parent
18d4371683
commit
6c8bbad927
2
NEWS
2
NEWS
|
@ -10,7 +10,7 @@ Version 2.19
|
||||||
* The following bugs are resolved with this release:
|
* The following bugs are resolved with this release:
|
||||||
|
|
||||||
14155, 14699, 15522, 15531, 15532, 15736, 15749, 15797, 15867, 15890,
|
14155, 14699, 15522, 15531, 15532, 15736, 15749, 15797, 15867, 15890,
|
||||||
15897, 15905, 15909.
|
15897, 15905, 15909, 15921.
|
||||||
|
|
||||||
* CVE-2013-4237 The readdir_r function could write more than NAME_MAX bytes
|
* CVE-2013-4237 The readdir_r function could write more than NAME_MAX bytes
|
||||||
to the d_name member of struct dirent, or omit the terminating NUL
|
to the d_name member of struct dirent, or omit the terminating NUL
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2013-09-03 Siddhesh Poyarekar <siddhesh@redhat.com>
|
||||||
|
|
||||||
|
[BZ #15921]
|
||||||
|
* tst-cleanup2.c (do_test): New volatile variable RET to
|
||||||
|
return success.
|
||||||
|
|
||||||
2013-08-30 Ondřej Bílka <neleai@seznam.cz>
|
2013-08-30 Ondřej Bílka <neleai@seznam.cz>
|
||||||
|
|
||||||
* sysdeps/pthread/pthread.h: Fix typos.
|
* sysdeps/pthread/pthread.h: Fix typos.
|
||||||
|
|
|
@ -34,6 +34,12 @@ static int
|
||||||
do_test (void)
|
do_test (void)
|
||||||
{
|
{
|
||||||
char *p = NULL;
|
char *p = NULL;
|
||||||
|
/* gcc can overwrite the success written value by scheduling instructions
|
||||||
|
around sprintf. It is allowed to do this since according to C99 the first
|
||||||
|
argument of sprintf is a character array and NULL is not a valid character
|
||||||
|
array. Mark the return value as volatile so that it gets reloaded on
|
||||||
|
return. */
|
||||||
|
volatile int ret = 0;
|
||||||
struct sigaction sa;
|
struct sigaction sa;
|
||||||
|
|
||||||
sa.sa_handler = sig_handler;
|
sa.sa_handler = sig_handler;
|
||||||
|
@ -50,7 +56,7 @@ do_test (void)
|
||||||
if (setjmp (jmpbuf))
|
if (setjmp (jmpbuf))
|
||||||
{
|
{
|
||||||
puts ("Exiting main...");
|
puts ("Exiting main...");
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf (p, "This should segv\n");
|
sprintf (p, "This should segv\n");
|
||||||
|
|
Loading…
Reference in New Issue