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

Commit 5159ec94 authored by Evgenii Stepanov's avatar Evgenii Stepanov Committed by Automerger Merge Worker
Browse files

Merge changes Ibf64db88,I033ee79c am: 689bba18 am: 215b89a5 am: cebf715f

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1915510

Change-Id: I33d9d91b0ff2a92e321b387f0785c34222f735fd
parents e7f87423 cebf715f
Loading
Loading
Loading
Loading
+21 −1
Original line number Diff line number Diff line
@@ -373,6 +373,16 @@ public final class ProcessList {
    @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.Q)
    private static final long NATIVE_HEAP_POINTER_TAGGING = 135754954; // This is a bug id.

    /**
     * Native heap allocations in AppZygote process and its descendants will now have a
     * non-zero tag in the most significant byte.
     * @see <a href="https://source.android.com/devices/tech/debug/tagged-pointers">Tagged
     * Pointers</a>
     */
    @ChangeId
    @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.S)
    private static final long NATIVE_HEAP_POINTER_TAGGING_APP_ZYGOTE = 207557677;

    /**
     * Enable asynchronous (ASYNC) memory tag checking in this process. This
     * flag will only have an effect on hardware supporting the ARM Memory
@@ -1738,6 +1748,16 @@ public final class ProcessList {
        return level;
    }

    private int decideTaggingLevelForAppZygote(ProcessRecord app) {
        int level = decideTaggingLevel(app);
        // TBI ("fake" pointer tagging) in AppZygote is controlled by a separate compat feature.
        if (!mPlatformCompat.isChangeEnabled(NATIVE_HEAP_POINTER_TAGGING_APP_ZYGOTE, app.info)
                && level == Zygote.MEMORY_TAG_LEVEL_TBI) {
            level = Zygote.MEMORY_TAG_LEVEL_NONE;
        }
        return level;
    }

    private int decideGwpAsanLevel(ProcessRecord app) {
        // Look at the process attribute first.
       if (app.processInfo != null
@@ -2238,7 +2258,7 @@ public final class ProcessList {
                // not the calling one.
                appInfo.packageName = app.getHostingRecord().getDefiningPackageName();
                appInfo.uid = uid;
                int runtimeFlags = decideTaggingLevel(app);
                int runtimeFlags = decideTaggingLevelForAppZygote(app);
                appZygote = new AppZygote(appInfo, uid, firstUid, lastUid, runtimeFlags);
                mAppZygotes.put(app.info.processName, uid, appZygote);
                zygoteProcessList = new ArrayList<ProcessRecord>();