From cee71cbfc3bfbcd48ea10ca601fb7cc8267e83d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Fri, 30 Dec 2022 11:25:45 +0100 Subject: [PATCH] Add some extra room to the alt stack for exception handlers. Motivated by some crashes seen in Google Play reports. --- Common/ExceptionHandlerSetup.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Common/ExceptionHandlerSetup.cpp b/Common/ExceptionHandlerSetup.cpp index deb78eb139..70b5285bf0 100644 --- a/Common/ExceptionHandlerSetup.cpp +++ b/Common/ExceptionHandlerSetup.cpp @@ -284,18 +284,23 @@ void InstallExceptionHandler(BadAccessHandler badAccessHandler) { g_badAccessHandler = badAccessHandler; return; } + + size_t altStackSize = SIGSTKSZ; - INFO_LOG(SYSTEM, "Installed exception handler"); + // Add some extra room. + altStackSize += 65536; + + INFO_LOG(SYSTEM, "Installed exception handler. stack size: %d", (int)altStackSize); g_badAccessHandler = badAccessHandler; stack_t signal_stack{}; - altStack = malloc(SIGSTKSZ); + altStack = malloc(altStackSize); #ifdef __FreeBSD__ signal_stack.ss_sp = (char*)altStack; #else signal_stack.ss_sp = altStack; #endif - signal_stack.ss_size = SIGSTKSZ; + signal_stack.ss_size = altStackSize; signal_stack.ss_flags = 0; if (sigaltstack(&signal_stack, nullptr)) { _assert_msg_(false, "sigaltstack failed");