mirror of git://gcc.gnu.org/git/gcc.git
ssp.c (__guard_setup): For Windows...
* ssp.c (__guard_setup): For Windows, use approved
methods to get a suitable random number for the stack
check guard rather than reading /dev/random.
From-SVN: r220559
This commit is contained in:
parent
94a2f772f0
commit
adebb6e733
|
|
@ -1,3 +1,10 @@
|
||||||
|
2015-02-09 Georg Koppen <gk@torproject.org>
|
||||||
|
|
||||||
|
* ssp.c: Conditionally include <windows.h>
|
||||||
|
(__guard_setup): For Windows, use approved methods to get
|
||||||
|
a suitable random number for the stack check guard rather
|
||||||
|
than reading /dev/random.
|
||||||
|
|
||||||
2015-01-22 Matthias Klose <doko@ubuntu.com>
|
2015-01-22 Matthias Klose <doko@ubuntu.com>
|
||||||
|
|
||||||
* gets-chk.c: Declare prototype for gets in C11 mode.
|
* gets-chk.c: Declare prototype for gets in C11 mode.
|
||||||
|
|
|
||||||
16
libssp/ssp.c
16
libssp/ssp.c
|
|
@ -55,6 +55,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
/* Native win32 apps don't know about /dev/tty but can print directly
|
/* Native win32 apps don't know about /dev/tty but can print directly
|
||||||
to the console using "CONOUT$" */
|
to the console using "CONOUT$" */
|
||||||
#if defined (_WIN32) && !defined (__CYGWIN__)
|
#if defined (_WIN32) && !defined (__CYGWIN__)
|
||||||
|
#include <windows.h>
|
||||||
# define _PATH_TTY "CONOUT$"
|
# define _PATH_TTY "CONOUT$"
|
||||||
#else
|
#else
|
||||||
# define _PATH_TTY "/dev/tty"
|
# define _PATH_TTY "/dev/tty"
|
||||||
|
|
@ -75,6 +76,20 @@ __guard_setup (void)
|
||||||
if (__stack_chk_guard != 0)
|
if (__stack_chk_guard != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
#if defined (_WIN32) && !defined (__CYGWIN__)
|
||||||
|
HCRYPTPROV hprovider = 0;
|
||||||
|
if (CryptAcquireContext(&hprovider, NULL, NULL, PROV_RSA_FULL,
|
||||||
|
CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
|
||||||
|
{
|
||||||
|
if (CryptGenRandom(hprovider, sizeof (__stack_chk_guard),
|
||||||
|
(BYTE *)&__stack_chk_guard) && __stack_chk_guard != 0)
|
||||||
|
{
|
||||||
|
CryptReleaseContext(hprovider, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
CryptReleaseContext(hprovider, 0);
|
||||||
|
}
|
||||||
|
#else
|
||||||
fd = open ("/dev/urandom", O_RDONLY);
|
fd = open ("/dev/urandom", O_RDONLY);
|
||||||
if (fd != -1)
|
if (fd != -1)
|
||||||
{
|
{
|
||||||
|
|
@ -85,6 +100,7 @@ __guard_setup (void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
/* If a random generator can't be used, the protector switches the guard
|
/* If a random generator can't be used, the protector switches the guard
|
||||||
to the "terminator canary". */
|
to the "terminator canary". */
|
||||||
p = (unsigned char *) &__stack_chk_guard;
|
p = (unsigned char *) &__stack_chk_guard;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue