Merge "Don't ask libc for PT feature w/o kernel support."
This commit is contained in:
@@ -988,4 +988,11 @@ public final class Zygote {
|
||||
* Returns whether the hardware supports memory tagging (ARM MTE).
|
||||
*/
|
||||
public static native boolean nativeSupportsMemoryTagging();
|
||||
|
||||
/**
|
||||
* Returns whether the kernel supports tagged pointers. Present in the
|
||||
* Android Common Kernel from 4.14 and up. By default, you should prefer
|
||||
* fully-feature Memory Tagging, rather than the static Tagged Pointers.
|
||||
*/
|
||||
public static native boolean nativeSupportsTaggedPointers();
|
||||
}
|
||||
|
||||
@@ -752,9 +752,9 @@ public class ZygoteInit {
|
||||
/* The system server is more privileged than regular app processes, so it has async
|
||||
* tag checks enabled on hardware that supports memory tagging. */
|
||||
parsedArgs.mRuntimeFlags |= Zygote.MEMORY_TAG_LEVEL_ASYNC;
|
||||
} else {
|
||||
} else if (Zygote.nativeSupportsTaggedPointers()) {
|
||||
/* Enable pointer tagging in the system server. Hardware support for this is present
|
||||
* in all ARMv8 CPUs; this flag has no effect on other platforms. */
|
||||
* in all ARMv8 CPUs. */
|
||||
parsedArgs.mRuntimeFlags |= Zygote.MEMORY_TAG_LEVEL_TBI;
|
||||
}
|
||||
|
||||
|
||||
@@ -1899,6 +1899,15 @@ static jboolean com_android_internal_os_Zygote_nativeSupportsMemoryTagging(JNIEn
|
||||
#endif
|
||||
}
|
||||
|
||||
static jboolean com_android_internal_os_Zygote_nativeSupportsTaggedPointers(JNIEnv* env, jclass) {
|
||||
#ifdef __aarch64__
|
||||
int res = prctl(PR_GET_TAGGED_ADDR_CTRL, 0, 0, 0, 0);
|
||||
return res >= 0 && res & PR_TAGGED_ADDR_ENABLE;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
static const JNINativeMethod gMethods[] = {
|
||||
{ "nativeForkAndSpecialize",
|
||||
"(II[II[[IILjava/lang/String;Ljava/lang/String;[I[IZLjava/lang/String;Ljava/lang/String;Z)I",
|
||||
@@ -1938,6 +1947,8 @@ static const JNINativeMethod gMethods[] = {
|
||||
(void* ) com_android_internal_os_Zygote_nativeParseSigChld},
|
||||
{ "nativeSupportsMemoryTagging", "()Z",
|
||||
(void *) com_android_internal_os_Zygote_nativeSupportsMemoryTagging },
|
||||
{"nativeSupportsTaggedPointers", "()Z",
|
||||
(void*)com_android_internal_os_Zygote_nativeSupportsTaggedPointers},
|
||||
};
|
||||
|
||||
int register_com_android_internal_os_Zygote(JNIEnv* env) {
|
||||
|
||||
@@ -1682,7 +1682,9 @@ public final class ProcessList {
|
||||
|| mPlatformCompat.isChangeEnabled(NATIVE_MEMORY_TAGGING, app.info)) {
|
||||
runtimeFlags |= Zygote.MEMORY_TAG_LEVEL_ASYNC;
|
||||
}
|
||||
} else {
|
||||
} else if (Zygote.nativeSupportsTaggedPointers()) {
|
||||
// Enable heap pointer tagging if supported by the kernel, unless disabled by the
|
||||
// target sdk level or compat feature.
|
||||
if (mPlatformCompat.isChangeEnabled(NATIVE_HEAP_POINTER_TAGGING, app.info)) {
|
||||
runtimeFlags |= Zygote.MEMORY_TAG_LEVEL_TBI;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user