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;