linux: fix alt-stack tests with asan
Disable the stack-overrun test since ASAN will detect the
stack corruption and kill the process.
Also allocate extra alt-stack space when ASAN is enabled.
Change-Id: I66b3c795e68c6129d22329750318c9fe88a4a0d3
Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/2303591
Commit-Queue: Joshua Peraza <jperaza@chromium.org>
Reviewed-by: Mark Mentovai <mark@chromium.org>
GitOrigin-RevId: 070b18d326b6d77a19db527dc71708458303bac4
diff --git a/client/crashpad_client_linux.cc b/client/crashpad_client_linux.cc
index 55d1fc6..117ed19 100644
--- a/client/crashpad_client_linux.cc
+++ b/client/crashpad_client_linux.cc
@@ -37,6 +37,7 @@
#include "util/linux/scoped_pr_set_dumpable.h"
#include "util/linux/scoped_pr_set_ptracer.h"
#include "util/linux/socket.h"
+#include "util/misc/address_sanitizer.h"
#include "util/misc/from_pointer_cast.h"
#include "util/posix/double_fork_and_exec.h"
#include "util/posix/scoped_mmap.h"
@@ -433,7 +434,11 @@
DCHECK_EQ(stack.ss_flags & SS_ONSTACK, 0);
const size_t page_size = getpagesize();
+#if defined(ADDRESS_SANITIZER)
+ const size_t kStackSize = 2 * ((SIGSTKSZ + page_size - 1) & ~(page_size - 1));
+#else
const size_t kStackSize = (SIGSTKSZ + page_size - 1) & ~(page_size - 1);
+#endif // ADDRESS_SANITIZER
if (stack.ss_flags & SS_DISABLE || stack.ss_size < kStackSize) {
const size_t kGuardPageSize = page_size;
const size_t kStackAllocSize = kStackSize + 2 * kGuardPageSize;
@@ -441,7 +446,12 @@
static void (*stack_destructor)(void*) = [](void* stack_mem) {
const size_t page_size = getpagesize();
const size_t kGuardPageSize = page_size;
+#if defined(ADDRESS_SANITIZER)
+ const size_t kStackSize =
+ 2 * ((SIGSTKSZ + page_size - 1) & ~(page_size - 1));
+#else
const size_t kStackSize = (SIGSTKSZ + page_size - 1) & ~(page_size - 1);
+#endif // ADDRESS_SANITIZER
const size_t kStackAllocSize = kStackSize + 2 * kGuardPageSize;
stack_t stack;
diff --git a/client/crashpad_client_linux_test.cc b/client/crashpad_client_linux_test.cc
index 7dfcbc4..4503180 100644
--- a/client/crashpad_client_linux_test.cc
+++ b/client/crashpad_client_linux_test.cc
@@ -41,6 +41,7 @@
#include "util/linux/exception_handler_client.h"
#include "util/linux/exception_information.h"
#include "util/linux/socket.h"
+#include "util/misc/address_sanitizer.h"
#include "util/misc/address_types.h"
#include "util/misc/from_pointer_cast.h"
#include "util/posix/scoped_mmap.h"
@@ -425,6 +426,11 @@
// TODO(jperaza): test first chance handlers with real crashes.
return;
}
+#if defined(ADDRESS_SANITIZER)
+ if (Options().crash_type == CrashType::kInfiniteRecursion) {
+ GTEST_SKIP();
+ }
+#endif // defined(ADDRESS_SANITIZER)
StartHandlerForSelfInChildTest test(Options());
test.Run();
}