Merge "Remove the workaround for old vendor blobs." am: 55bbd5d8ff am: 935c0cebe9
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2518435 Change-Id: I095ef53250db2a46e9646f631273071c759824f9 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -23,43 +23,13 @@
|
|||||||
|
|
||||||
namespace {
|
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) {
|
void android_internal_os_ZygoteInit_nativePreloadAppProcessHALs(JNIEnv* env, jclass) {
|
||||||
ScopedSCSExit x;
|
|
||||||
android::GraphicBufferMapper::preloadHal();
|
android::GraphicBufferMapper::preloadHal();
|
||||||
// Add preloading here for other HALs that are (a) always passthrough, and
|
// Add preloading here for other HALs that are (a) always passthrough, and
|
||||||
// (b) loaded by most app processes.
|
// (b) loaded by most app processes.
|
||||||
}
|
}
|
||||||
|
|
||||||
void android_internal_os_ZygoteInit_nativePreloadGraphicsDriver(JNIEnv* env, jclass) {
|
void android_internal_os_ZygoteInit_nativePreloadGraphicsDriver(JNIEnv* env, jclass) {
|
||||||
ScopedSCSExit x;
|
|
||||||
zygote_preload_graphics();
|
zygote_preload_graphics();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user