Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2260bc18 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Don't ask libc for PT feature w/o kernel support." am: 758f448f

Change-Id: Ife490fbcf1482fef1b31e16273f5e196f9e8f0bc
parents 99142fc4 758f448f
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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();
}
+2 −2
Original line number Diff line number Diff line
@@ -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;
            }

+11 −0
Original line number Diff line number Diff line
@@ -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) {
+3 −1
Original line number Diff line number Diff line
@@ -1680,7 +1680,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;
                }