Write test for stack overflow detection

This commit is contained in:
Justine Tunney 2022-05-23 15:52:26 -07:00
parent 99e67c348b
commit cef50f2a6b
4 changed files with 96 additions and 7 deletions

View file

@ -92,6 +92,7 @@ static void FreeSigAltStack(void *p) {
* @see callexitontermination()
*/
void ShowCrashReports(void) {
char *sp;
struct sigaltstack ss;
/* <SYNC-LIST>: showcrashreports.c, oncrashthunks.S, oncrash.c */
kCrashSigs[0] = SIGQUIT; /* ctrl+\ aka ctrl+break */
@ -105,11 +106,12 @@ void ShowCrashReports(void) {
if (!IsWindows()) {
bzero(&ss, sizeof(ss));
ss.ss_flags = 0;
ss.ss_size = SIGSTKSZ;
ss.ss_size = GetStackSize();
// FreeBSD sigaltstack() will EFAULT if we use MAP_STACK here
// OpenBSD sigaltstack() auto-applies MAP_STACK to the memory
if ((ss.ss_sp = mmap(0, GetStackSize(), PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0))) {
if ((sp = mmap(0, GetStackSize(), PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)) != MAP_FAILED) {
ss.ss_sp = sp;
if (!sigaltstack(&ss, &g_oldsigaltstack)) {
__cxa_atexit(FreeSigAltStack, ss.ss_sp, 0);
} else {

View file

@ -47,7 +47,6 @@ _Alignas(64) static int rand64_lock;
* @note this function is not intended for cryptography
* @note this function passes bigcrush and practrand
* @note this function takes at minimum 15 cycles
* @asyncsignalsafe
* @threadsafe
* @vforksafe
*/