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();
 }