cygwin: Fix crashes under AllocationPreference=0x100000 condition

* cygtls.h: Include cygtls_padsize.h and define CYGTLS_PADSIZE there.
        * cygtls_padsize.h: New file.  Define CYGTLS_PADSIZE.
        * environ.cc (parse_options): Fix NULL pointer access.
        * init.cc (threadfunc_fe): Do not force stack align on x86_64.

        * strace.cc (main2): Rename from main.
        (main): Make room for _cygtls area on stack and just call main2.  Add
        comment to explain why.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen
2015-07-29 13:32:29 +02:00
parent 9753bc3333
commit 6ab56bdd3f
8 changed files with 55 additions and 13 deletions

View File

@@ -1,7 +1,7 @@
/* strace.cc
Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
2009, 2010, 2011, 2012, 2013 Red Hat Inc.
2009, 2010, 2011, 2012, 2013, 2015 Red Hat Inc.
Written by Chris Faylor <cgf@redhat.com>
@@ -26,6 +26,7 @@ details. */
#include "../cygwin/include/sys/strace.h"
#include "../cygwin/include/sys/cygwin.h"
#include "../cygwin/include/cygwin/version.h"
#include "../cygwin/cygtls_padsize.h"
#include "path.h"
#undef cygwin_internal
#include "loadlib.h"
@@ -1025,7 +1026,7 @@ print_version ()
}
int
main (int argc, char **argv)
main2 (int argc, char **argv)
{
unsigned mask = 0;
FILE *ofile = NULL;
@@ -1165,6 +1166,19 @@ character #%d.\n", optarg, (int) (endptr - optarg), endptr);
return 0;
}
int
main (int argc, char **argv)
{
/* Make sure to have room for the _cygtls area *and* to initialize it.
This is required to make sure cygwin_internal calls into Cygwin work
reliably. This problem has been noticed under AllocationPreference
registry setting to 0x100000 (TOP_DOWN). */
char buf[CYGTLS_PADSIZE];
memset (buf, 0, sizeof (buf));
exit (main2 (argc, argv));
}
#undef CloseHandle
static BOOL