Fork detection test: align the stack to 16 bytes.

Change-Id: I90d5360f06cc46778aca828b2e1100106a6a6964
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/95127
Commit-Queue: Xiangfei Ding <xfding@google.com>
Commit-Queue: Rudolf Polzer <rpolzer@google.com>
Auto-Submit: Rudolf Polzer <rpolzer@google.com>
Reviewed-by: Xiangfei Ding <xfding@google.com>
diff --git a/crypto/rand/fork_detect_test.cc b/crypto/rand/fork_detect_test.cc
index b219f89..b8d74e7 100644
--- a/crypto/rand/fork_detect_test.cc
+++ b/crypto/rand/fork_detect_test.cc
@@ -47,6 +47,8 @@
 
 #include <openssl/mem.h>
 
+#include "../internal.h"
+
 
 BSSL_NAMESPACE_BEGIN
 namespace {
@@ -120,14 +122,21 @@
   fflush(stderr);  // Avoid duplicating any buffered output.
 #if defined(OPENSSL_LINUX)
   // On Linux, clone() can make new processes, too (even by default).
-  void *temp_stack = OPENSSL_malloc(65536);
-  void *stack_top = static_cast<char *>(temp_stack) + 65536;
+  const size_t kAlign = 16;
+  const size_t kStackSize = 65536;
+  void *temp_stack = OPENSSL_malloc(kStackSize + kAlign - 1);
+  void *stack_top =
+      static_cast<char *>(align_pointer(temp_stack, kAlign)) + kStackSize;
   pid_t pid = clone(
       +[](void *fp) {
         (*static_cast<std::function<void()> *>(fp))();
         return 0;
       },
       stack_top, SIGCHLD, &f);
+  if (pid < 0) {
+    perror("clone");
+    _exit(1);
+  }
   OPENSSL_free(temp_stack);
   WaitForChildOrDie(pid);
   return true;