Add some extra room to the alt stack for exception handlers.

Motivated by some crashes seen in Google Play reports.
This commit is contained in:
Henrik Rydgård 2022-12-30 11:25:45 +01:00
parent 47e85cd2bf
commit cee71cbfc3

View File

@ -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");