From 0db313237cffe6317f00e639f9cfb5f3db8eee61 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Fri, 31 Mar 2023 15:36:30 -0700 Subject: [PATCH] Remove the workaround for old vendor blobs. Android P needed this because we couldn't be sure that vendor blobs had been built with -ffixed-x18, but we've had Q, R, S, and T since then. Test: treehugger Change-Id: I323b4015a38041ffbdb92b3ce11cbae8d245c77c --- .../com_android_internal_os_ZygoteInit.cpp | 30 ------------------- 1 file changed, 30 deletions(-) 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(); }