diff --git a/core/jni/com_android_internal_os_ZygoteInit.cpp b/core/jni/com_android_internal_os_ZygoteInit.cpp index a5152b6e689c1..56c01ba2c3a31 100644 --- a/core/jni/com_android_internal_os_ZygoteInit.cpp +++ b/core/jni/com_android_internal_os_ZygoteInit.cpp @@ -23,43 +23,13 @@ namespace { -// Shadow call stack (SCS) is a security mitigation that uses a separate stack -// (the SCS) for return addresses. In versions of Android newer than P, the -// compiler cooperates with the system to ensure that the SCS address is always -// stored in register x18, as long as the app was compiled with a new enough -// compiler and does not use features that rely on SP-HALs (this restriction is -// because the SP-HALs might not preserve x18 due to potentially having been -// compiled with an old compiler as a consequence of Treble; it generally means -// that the app must be a system app without a UI). This struct is used to -// temporarily store the address on the stack while preloading the SP-HALs, so -// that such apps can use the same zygote as everything else. -struct ScopedSCSExit { -#ifdef __aarch64__ - void* scs; - - ScopedSCSExit() { - __asm__ __volatile__("str x18, [%0]" ::"r"(&scs)); - } - - ~ScopedSCSExit() { - __asm__ __volatile__("ldr x18, [%0]; str xzr, [%0]" ::"r"(&scs)); - } -#else - // Silence unused variable warnings in non-SCS builds. - ScopedSCSExit() {} - ~ScopedSCSExit() {} -#endif -}; - void android_internal_os_ZygoteInit_nativePreloadAppProcessHALs(JNIEnv* env, jclass) { - ScopedSCSExit x; android::GraphicBufferMapper::preloadHal(); // Add preloading here for other HALs that are (a) always passthrough, and // (b) loaded by most app processes. } void android_internal_os_ZygoteInit_nativePreloadGraphicsDriver(JNIEnv* env, jclass) { - ScopedSCSExit x; zygote_preload_graphics(); }