Merge "Remove the workaround for old vendor blobs."
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user