Loading core/java/android/os/AppZygote.java +6 −2 Original line number Diff line number Diff line Loading @@ -45,6 +45,8 @@ public class AppZygote { // Last UID/GID of the range the AppZygote can setuid()/setgid() to private final int mZygoteUidGidMax; private final int mZygoteRuntimeFlags; private final Object mLock = new Object(); /** Loading @@ -56,11 +58,13 @@ public class AppZygote { private final ApplicationInfo mAppInfo; public AppZygote(ApplicationInfo appInfo, int zygoteUid, int uidGidMin, int uidGidMax) { public AppZygote(ApplicationInfo appInfo, int zygoteUid, int uidGidMin, int uidGidMax, int runtimeFlags) { mAppInfo = appInfo; mZygoteUid = zygoteUid; mZygoteUidGidMin = uidGidMin; mZygoteUidGidMax = uidGidMax; mZygoteRuntimeFlags = runtimeFlags; } /** Loading Loading @@ -110,7 +114,7 @@ public class AppZygote { mZygoteUid, mZygoteUid, null, // gids 0, // runtimeFlags mZygoteRuntimeFlags, // runtimeFlags "app_zygote", // seInfo abi, // abi abi, // acceptedAbiList Loading services/core/java/com/android/server/am/ProcessList.java +22 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -2238,7 +2258,8 @@ public final class ProcessList { // not the calling one. appInfo.packageName = app.getHostingRecord().getDefiningPackageName(); appInfo.uid = uid; appZygote = new AppZygote(appInfo, uid, firstUid, lastUid); int runtimeFlags = decideTaggingLevelForAppZygote(app); appZygote = new AppZygote(appInfo, uid, firstUid, lastUid, runtimeFlags); mAppZygotes.put(app.info.processName, uid, appZygote); zygoteProcessList = new ArrayList<ProcessRecord>(); mAppZygoteProcesses.put(appZygote, zygoteProcessList); Loading Loading
core/java/android/os/AppZygote.java +6 −2 Original line number Diff line number Diff line Loading @@ -45,6 +45,8 @@ public class AppZygote { // Last UID/GID of the range the AppZygote can setuid()/setgid() to private final int mZygoteUidGidMax; private final int mZygoteRuntimeFlags; private final Object mLock = new Object(); /** Loading @@ -56,11 +58,13 @@ public class AppZygote { private final ApplicationInfo mAppInfo; public AppZygote(ApplicationInfo appInfo, int zygoteUid, int uidGidMin, int uidGidMax) { public AppZygote(ApplicationInfo appInfo, int zygoteUid, int uidGidMin, int uidGidMax, int runtimeFlags) { mAppInfo = appInfo; mZygoteUid = zygoteUid; mZygoteUidGidMin = uidGidMin; mZygoteUidGidMax = uidGidMax; mZygoteRuntimeFlags = runtimeFlags; } /** Loading Loading @@ -110,7 +114,7 @@ public class AppZygote { mZygoteUid, mZygoteUid, null, // gids 0, // runtimeFlags mZygoteRuntimeFlags, // runtimeFlags "app_zygote", // seInfo abi, // abi abi, // acceptedAbiList Loading
services/core/java/com/android/server/am/ProcessList.java +22 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -2238,7 +2258,8 @@ public final class ProcessList { // not the calling one. appInfo.packageName = app.getHostingRecord().getDefiningPackageName(); appInfo.uid = uid; appZygote = new AppZygote(appInfo, uid, firstUid, lastUid); int runtimeFlags = decideTaggingLevelForAppZygote(app); appZygote = new AppZygote(appInfo, uid, firstUid, lastUid, runtimeFlags); mAppZygotes.put(app.info.processName, uid, appZygote); zygoteProcessList = new ArrayList<ProcessRecord>(); mAppZygoteProcesses.put(appZygote, zygoteProcessList); Loading