Revert "bionic: Allocate a shadow call stack for each thread."
This reverts commit da1bc79f937225b1a048d9e5a03eca81680a17fd.
Reason for revert: Caused OOM in media process
Bug: 112907825
Bug: 118593766
Change-Id: I545663871d75889b209b9fd2131cdaa97166478f
diff --git a/libc/bionic/pthread_create.cpp b/libc/bionic/pthread_create.cpp
index 3ba787b..543fdc5 100644
--- a/libc/bionic/pthread_create.cpp
+++ b/libc/bionic/pthread_create.cpp
@@ -32,7 +32,6 @@
#include <string.h>
#include <sys/mman.h>
#include <sys/prctl.h>
-#include <sys/random.h>
#include <unistd.h>
#include "pthread_internal.h"
@@ -87,7 +86,7 @@
thread->tls[TLS_SLOT_STACK_GUARD] = reinterpret_cast<void*>(__stack_chk_guard);
}
-static void __init_alternate_signal_stack(pthread_internal_t* thread) {
+void __init_alternate_signal_stack(pthread_internal_t* thread) {
// Create and set an alternate signal stack.
void* stack_base = mmap(nullptr, SIGNAL_STACK_SIZE, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
if (stack_base != MAP_FAILED) {
@@ -110,32 +109,6 @@
}
}
-static void __init_shadow_call_stack(pthread_internal_t* thread) {
- (void)thread;
-#ifdef __aarch64__
- char* scs_guard_region = reinterpret_cast<char*>(
- mmap(nullptr, SCS_GUARD_REGION_SIZE, 0, MAP_PRIVATE | MAP_ANON, -1, 0));
- thread->shadow_call_stack_guard_region = scs_guard_region;
-
- // We need to page align scs_offset and ensure that [scs_offset,scs_offset+SCS_SIZE) is in the
- // guard region. We can't use arc4random_uniform in init because /dev/urandom might not have
- // been created yet.
- size_t scs_offset =
- (getpid() == 1) ? 0 : (arc4random_uniform(SCS_GUARD_REGION_SIZE / SCS_SIZE) * SCS_SIZE);
-
- // Allocate the stack and store its address in register x18. This is deliberately the only place
- // where the address is stored.
- __asm__ __volatile__(
- "mov x18, %0" ::"r"(mmap(scs_guard_region + scs_offset, SCS_SIZE, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANON | MAP_FIXED, -1, 0)));
-#endif
-}
-
-void __init_additional_stacks(pthread_internal_t* thread) {
- __init_alternate_signal_stack(thread);
- __init_shadow_call_stack(thread);
-}
-
int __init_thread(pthread_internal_t* thread) {
thread->cleanup_stack = nullptr;
@@ -279,7 +252,7 @@
// accesses previously made by the creating thread are visible to us.
thread->startup_handshake_lock.lock();
- __init_additional_stacks(thread);
+ __init_alternate_signal_stack(thread);
void* result = thread->start_routine(thread->start_routine_arg);
pthread_exit(result);