diff options
Diffstat (limited to 'core/java')
9 files changed, 214 insertions, 11 deletions
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java index e32068fe4b39..6ec11693d69b 100644 --- a/core/java/android/content/pm/ApplicationInfo.java +++ b/core/java/android/content/pm/ApplicationInfo.java @@ -38,6 +38,8 @@ import android.util.SparseArray; import android.util.proto.ProtoOutputStream; import com.android.internal.util.ArrayUtils; +import com.android.internal.util.Parcelling; +import com.android.internal.util.Parcelling.BuiltIn.ForBoolean; import com.android.server.SystemConfig; import java.lang.annotation.Retention; @@ -56,6 +58,8 @@ import java.util.UUID; * <application> tag. */ public class ApplicationInfo extends PackageItemInfo implements Parcelable { + private static ForBoolean sForBoolean = Parcelling.Cache.getOrCreate(ForBoolean.class); + /** * Default task affinity of all activities in this application. See * {@link ActivityInfo#taskAffinity} for more information. This comes @@ -1336,6 +1340,51 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { private @GwpAsanMode int gwpAsanMode; /** + * Default (unspecified) setting of Memtag. + */ + public static final int MEMTAG_DEFAULT = -1; + + /** + * Do not enable Memtag in this application or process. + */ + public static final int MEMTAG_OFF = 0; + + /** + * Enable Memtag in Async mode in this application or process. + */ + public static final int MEMTAG_ASYNC = 1; + + /** + * Enable Memtag in Sync mode in this application or process. + */ + public static final int MEMTAG_SYNC = 2; + + /** + * These constants need to match the values of memtagMode in application manifest. + * @hide + */ + @IntDef(prefix = {"MEMTAG_"}, value = { + MEMTAG_DEFAULT, + MEMTAG_OFF, + MEMTAG_ASYNC, + MEMTAG_SYNC, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface MemtagMode {} + + /** + * Indicates if the application has requested Memtag to be enabled, disabled, or left + * unspecified. Processes can override this setting. + */ + private @MemtagMode int memtagMode; + + /** + * Enable automatic zero-initialization of native heap memory allocations. + */ + @Nullable + private Boolean nativeHeapZeroInit; + + /** * Represents the default policy. The actual policy used will depend on other properties of * the application, e.g. the target SDK version. * @hide @@ -1479,6 +1528,12 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { if (gwpAsanMode != GWP_ASAN_DEFAULT) { pw.println(prefix + "gwpAsanMode=" + gwpAsanMode); } + if (memtagMode != MEMTAG_DEFAULT) { + pw.println(prefix + "memtagMode=" + memtagMode); + } + if (nativeHeapZeroInit != null) { + pw.println(prefix + "nativeHeapZeroInit=" + nativeHeapZeroInit); + } } super.dumpBack(pw, prefix); } @@ -1580,6 +1635,12 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { if (gwpAsanMode != GWP_ASAN_DEFAULT) { proto.write(ApplicationInfoProto.Detail.ENABLE_GWP_ASAN, gwpAsanMode); } + if (memtagMode != MEMTAG_DEFAULT) { + proto.write(ApplicationInfoProto.Detail.ENABLE_MEMTAG, memtagMode); + } + if (nativeHeapZeroInit != null) { + proto.write(ApplicationInfoProto.Detail.NATIVE_HEAP_ZERO_INIT, nativeHeapZeroInit); + } proto.end(detailToken); } proto.end(token); @@ -1690,6 +1751,8 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { hiddenUntilInstalled = orig.hiddenUntilInstalled; zygotePreloadName = orig.zygotePreloadName; gwpAsanMode = orig.gwpAsanMode; + memtagMode = orig.memtagMode; + nativeHeapZeroInit = orig.nativeHeapZeroInit; } public String toString() { @@ -1774,6 +1837,8 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { dest.writeInt(hiddenUntilInstalled ? 1 : 0); dest.writeString8(zygotePreloadName); dest.writeInt(gwpAsanMode); + dest.writeInt(memtagMode); + sForBoolean.parcel(nativeHeapZeroInit, dest, parcelableFlags); } public static final @android.annotation.NonNull Parcelable.Creator<ApplicationInfo> CREATOR @@ -1855,6 +1920,8 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { hiddenUntilInstalled = source.readInt() != 0; zygotePreloadName = source.readString8(); gwpAsanMode = source.readInt(); + memtagMode = source.readInt(); + nativeHeapZeroInit = sForBoolean.unparcel(source); } /** @@ -2237,6 +2304,8 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { /** {@hide} */ public void setBaseResourcePath(String baseResourcePath) { publicSourceDir = baseResourcePath; } /** {@hide} */ public void setSplitResourcePaths(String[] splitResourcePaths) { splitPublicSourceDirs = splitResourcePaths; } /** {@hide} */ public void setGwpAsanMode(@GwpAsanMode int value) { gwpAsanMode = value; } + /** {@hide} */ public void setMemtagMode(@MemtagMode int value) { memtagMode = value; } + /** {@hide} */ public void setNativeHeapZeroInit(@Nullable Boolean value) { nativeHeapZeroInit = value; } /** {@hide} */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @@ -2250,4 +2319,8 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { /** {@hide} */ public String[] getSplitResourcePaths() { return splitPublicSourceDirs; } @GwpAsanMode public int getGwpAsanMode() { return gwpAsanMode; } + @MemtagMode + public int getMemtagMode() { return memtagMode; } + @Nullable + public Boolean isNativeHeapZeroInit() { return nativeHeapZeroInit; } } diff --git a/core/java/android/content/pm/ProcessInfo.java b/core/java/android/content/pm/ProcessInfo.java index d45ff98d58e4..3dd5ee102090 100644 --- a/core/java/android/content/pm/ProcessInfo.java +++ b/core/java/android/content/pm/ProcessInfo.java @@ -53,16 +53,30 @@ public class ProcessInfo implements Parcelable { */ public @ApplicationInfo.GwpAsanMode int gwpAsanMode; + /** + * Indicates if the process has requested Memtag to be enabled (in sync or async mode), + * disabled, or left unspecified. + */ + public @ApplicationInfo.MemtagMode int memtagMode; + + /** + * Enable automatic zero-initialization of native heap memory allocations. + */ + @Nullable + public Boolean nativeHeapZeroInit; + @Deprecated public ProcessInfo(@NonNull ProcessInfo orig) { this.name = orig.name; this.deniedPermissions = orig.deniedPermissions; this.gwpAsanMode = orig.gwpAsanMode; + this.memtagMode = orig.memtagMode; + this.nativeHeapZeroInit = orig.nativeHeapZeroInit; } - // Code below generated by codegen v1.0.15. + // Code below generated by codegen v1.0.22. // // DO NOT MODIFY! // CHECKSTYLE:OFF Generated code @@ -84,12 +98,19 @@ public class ProcessInfo implements Parcelable { * If non-null, these are permissions that are not allowed in this process. * @param gwpAsanMode * Indicates if the process has requested GWP-ASan to be enabled, disabled, or left unspecified. + * @param memtagMode + * Indicates if the process has requested Memtag to be enabled (in sync or async mode), + * disabled, or left unspecified. + * @param nativeHeapZeroInit + * Enable automatic zero-initialization of native heap memory allocations. */ @DataClass.Generated.Member public ProcessInfo( @NonNull String name, @Nullable ArraySet<String> deniedPermissions, - @ApplicationInfo.GwpAsanMode int gwpAsanMode) { + @ApplicationInfo.GwpAsanMode int gwpAsanMode, + @ApplicationInfo.MemtagMode int memtagMode, + @Nullable Boolean nativeHeapZeroInit) { this.name = name; com.android.internal.util.AnnotationValidations.validate( NonNull.class, null, name); @@ -97,6 +118,10 @@ public class ProcessInfo implements Parcelable { this.gwpAsanMode = gwpAsanMode; com.android.internal.util.AnnotationValidations.validate( ApplicationInfo.GwpAsanMode.class, null, gwpAsanMode); + this.memtagMode = memtagMode; + com.android.internal.util.AnnotationValidations.validate( + ApplicationInfo.MemtagMode.class, null, memtagMode); + this.nativeHeapZeroInit = nativeHeapZeroInit; // onConstructed(); // You can define this method to get a callback } @@ -120,10 +145,13 @@ public class ProcessInfo implements Parcelable { byte flg = 0; if (deniedPermissions != null) flg |= 0x2; + if (nativeHeapZeroInit != null) flg |= 0x10; dest.writeByte(flg); dest.writeString(name); sParcellingForDeniedPermissions.parcel(deniedPermissions, dest, flags); dest.writeInt(gwpAsanMode); + dest.writeInt(memtagMode); + if (nativeHeapZeroInit != null) dest.writeBoolean(nativeHeapZeroInit); } @Override @@ -141,6 +169,8 @@ public class ProcessInfo implements Parcelable { String _name = in.readString(); ArraySet<String> _deniedPermissions = sParcellingForDeniedPermissions.unparcel(in); int _gwpAsanMode = in.readInt(); + int _memtagMode = in.readInt(); + Boolean _nativeHeapZeroInit = (flg & 0x10) == 0 ? null : (Boolean) in.readBoolean(); this.name = _name; com.android.internal.util.AnnotationValidations.validate( @@ -149,6 +179,10 @@ public class ProcessInfo implements Parcelable { this.gwpAsanMode = _gwpAsanMode; com.android.internal.util.AnnotationValidations.validate( ApplicationInfo.GwpAsanMode.class, null, gwpAsanMode); + this.memtagMode = _memtagMode; + com.android.internal.util.AnnotationValidations.validate( + ApplicationInfo.MemtagMode.class, null, memtagMode); + this.nativeHeapZeroInit = _nativeHeapZeroInit; // onConstructed(); // You can define this method to get a callback } @@ -168,10 +202,10 @@ public class ProcessInfo implements Parcelable { }; @DataClass.Generated( - time = 1584555730519L, - codegenVersion = "1.0.15", + time = 1611614699049L, + codegenVersion = "1.0.22", sourceFile = "frameworks/base/core/java/android/content/pm/ProcessInfo.java", - inputSignatures = "public @android.annotation.NonNull java.lang.String name\npublic @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedStringArraySet.class) android.util.ArraySet<java.lang.String> deniedPermissions\npublic @android.content.pm.ApplicationInfo.GwpAsanMode int gwpAsanMode\nclass ProcessInfo extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genGetters=true, genSetters=false, genParcelable=true, genAidl=false, genBuilder=false)") + inputSignatures = "public @android.annotation.NonNull java.lang.String name\npublic @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedStringArraySet.class) android.util.ArraySet<java.lang.String> deniedPermissions\npublic @android.content.pm.ApplicationInfo.GwpAsanMode int gwpAsanMode\npublic @android.content.pm.ApplicationInfo.MemtagMode int memtagMode\npublic @android.annotation.Nullable java.lang.Boolean nativeHeapZeroInit\nclass ProcessInfo extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genGetters=true, genSetters=false, genParcelable=true, genAidl=false, genBuilder=false)") @Deprecated private void __metadata() {} diff --git a/core/java/android/content/pm/parsing/ParsingPackage.java b/core/java/android/content/pm/parsing/ParsingPackage.java index 814759956772..7a01392a24e8 100644 --- a/core/java/android/content/pm/parsing/ParsingPackage.java +++ b/core/java/android/content/pm/parsing/ParsingPackage.java @@ -252,6 +252,10 @@ public interface ParsingPackage extends ParsingPackageRead { ParsingPackage setGwpAsanMode(int gwpAsanMode); + ParsingPackage setMemtagMode(int memtagMode); + + ParsingPackage setNativeHeapZeroInit(@Nullable Boolean nativeHeapZeroInit); + ParsingPackage setCrossProfile(boolean crossProfile); ParsingPackage setFullBackupContent(int fullBackupContent); diff --git a/core/java/android/content/pm/parsing/ParsingPackageImpl.java b/core/java/android/content/pm/parsing/ParsingPackageImpl.java index 51ec297df9e4..c1a93d8c2428 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageImpl.java +++ b/core/java/android/content/pm/parsing/ParsingPackageImpl.java @@ -380,6 +380,11 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { private int autoRevokePermissions; protected int gwpAsanMode; + protected int memtagMode; + + @Nullable + @DataClass.ParcelWith(ForBoolean.class) + private Boolean nativeHeapZeroInit; // TODO(chiuwinson): Non-null @Nullable @@ -1058,6 +1063,8 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { appInfo.volumeUuid = volumeUuid; appInfo.zygotePreloadName = zygotePreloadName; appInfo.setGwpAsanMode(gwpAsanMode); + appInfo.setMemtagMode(memtagMode); + appInfo.setNativeHeapZeroInit(nativeHeapZeroInit); appInfo.setBaseCodePath(mBaseApkPath); appInfo.setBaseResourcePath(mBaseApkPath); appInfo.setCodePath(mPath); @@ -1190,6 +1197,8 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { dest.writeSparseIntArray(this.minExtensionVersions); dest.writeLong(this.mBooleans); dest.writeMap(this.mProperties); + dest.writeInt(this.memtagMode); + sForBoolean.parcel(this.nativeHeapZeroInit, dest, flags); } public ParsingPackageImpl(Parcel in) { @@ -1310,6 +1319,8 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { this.minExtensionVersions = in.readSparseIntArray(); this.mBooleans = in.readLong(); this.mProperties = in.createTypedArrayMap(Property.CREATOR); + this.memtagMode = in.readInt(); + this.nativeHeapZeroInit = sForBoolean.unparcel(in); assignDerivedFields(); } @@ -2062,6 +2073,17 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { } @Override + public int getMemtagMode() { + return memtagMode; + } + + @Nullable + @Override + public Boolean isNativeHeapZeroInit() { + return nativeHeapZeroInit; + } + + @Override public boolean isPartiallyDirectBootAware() { return getBoolean(Booleans.PARTIALLY_DIRECT_BOOT_AWARE); } @@ -2493,6 +2515,18 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { } @Override + public ParsingPackageImpl setMemtagMode(int value) { + memtagMode = value; + return this; + } + + @Override + public ParsingPackageImpl setNativeHeapZeroInit(@Nullable Boolean value) { + nativeHeapZeroInit = value; + return this; + } + + @Override public ParsingPackageImpl setPartiallyDirectBootAware(boolean value) { return setBoolean(Booleans.PARTIALLY_DIRECT_BOOT_AWARE, value); } diff --git a/core/java/android/content/pm/parsing/ParsingPackageRead.java b/core/java/android/content/pm/parsing/ParsingPackageRead.java index a102e828744e..ff4cebdd1533 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageRead.java +++ b/core/java/android/content/pm/parsing/ParsingPackageRead.java @@ -874,6 +874,19 @@ public interface ParsingPackageRead extends Parcelable { */ int getGwpAsanMode(); + /** + * @see ApplicationInfo#memtagMode + * @see R.styleable#AndroidManifest_memtagMode + */ + int getMemtagMode(); + + /** + * @see ApplicationInfo#nativeHeapZeroInit + * @see R.styleable#AndroidManifest_nativeHeapZeroInit + */ + @Nullable + Boolean isNativeHeapZeroInit(); + // TODO(b/135203078): Hide and enforce going through PackageInfoUtils ApplicationInfo toAppInfoWithoutState(); diff --git a/core/java/android/content/pm/parsing/ParsingPackageUtils.java b/core/java/android/content/pm/parsing/ParsingPackageUtils.java index 8fbf2879bc27..c5455e07b038 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageUtils.java +++ b/core/java/android/content/pm/parsing/ParsingPackageUtils.java @@ -1984,6 +1984,11 @@ public class ParsingPackageUtils { } pkg.setGwpAsanMode(sa.getInt(R.styleable.AndroidManifestApplication_gwpAsanMode, -1)); + pkg.setMemtagMode(sa.getInt(R.styleable.AndroidManifestApplication_memtagMode, -1)); + if (sa.hasValue(R.styleable.AndroidManifestApplication_nativeHeapZeroInit)) { + pkg.setNativeHeapZeroInit(sa.getBoolean( + R.styleable.AndroidManifestApplication_nativeHeapZeroInit, false)); + } } finally { sa.recycle(); } diff --git a/core/java/android/content/pm/parsing/component/ParsedProcess.java b/core/java/android/content/pm/parsing/component/ParsedProcess.java index e0ae81b2e30b..89fef9d8e0dd 100644 --- a/core/java/android/content/pm/parsing/component/ParsedProcess.java +++ b/core/java/android/content/pm/parsing/component/ParsedProcess.java @@ -20,6 +20,7 @@ import static java.util.Collections.emptySet; import android.annotation.NonNull; import android.annotation.Nullable; +import android.content.pm.ApplicationInfo; import android.os.Parcel; import android.os.Parcelable; import android.util.ArraySet; @@ -41,7 +42,10 @@ public class ParsedProcess implements Parcelable { @DataClass.ParcelWith(Parcelling.BuiltIn.ForInternedStringSet.class) protected Set<String> deniedPermissions = emptySet(); - protected int gwpAsanMode = -1; + protected int gwpAsanMode = ApplicationInfo.GWP_ASAN_DEFAULT; + protected int memtagMode = ApplicationInfo.MEMTAG_DEFAULT; + @Nullable + protected Boolean nativeHeapZeroInit = null; public ParsedProcess() { } @@ -57,7 +61,7 @@ public class ParsedProcess implements Parcelable { - // Code below generated by codegen v1.0.15. + // Code below generated by codegen v1.0.22. // // DO NOT MODIFY! // CHECKSTYLE:OFF Generated code @@ -74,7 +78,9 @@ public class ParsedProcess implements Parcelable { public ParsedProcess( @NonNull String name, @NonNull Set<String> deniedPermissions, - int gwpAsanMode) { + int gwpAsanMode, + int memtagMode, + @Nullable Boolean nativeHeapZeroInit) { this.name = name; com.android.internal.util.AnnotationValidations.validate( NonNull.class, null, name); @@ -82,6 +88,8 @@ public class ParsedProcess implements Parcelable { com.android.internal.util.AnnotationValidations.validate( NonNull.class, null, deniedPermissions); this.gwpAsanMode = gwpAsanMode; + this.memtagMode = memtagMode; + this.nativeHeapZeroInit = nativeHeapZeroInit; // onConstructed(); // You can define this method to get a callback } @@ -102,6 +110,16 @@ public class ParsedProcess implements Parcelable { } @DataClass.Generated.Member + public int getMemtagMode() { + return memtagMode; + } + + @DataClass.Generated.Member + public @Nullable Boolean getNativeHeapZeroInit() { + return nativeHeapZeroInit; + } + + @DataClass.Generated.Member static Parcelling<Set<String>> sParcellingForDeniedPermissions = Parcelling.Cache.get( Parcelling.BuiltIn.ForInternedStringSet.class); @@ -118,9 +136,14 @@ public class ParsedProcess implements Parcelable { // You can override field parcelling by defining methods like: // void parcelFieldName(Parcel dest, int flags) { ... } + byte flg = 0; + if (nativeHeapZeroInit != null) flg |= 0x10; + dest.writeByte(flg); dest.writeString(name); sParcellingForDeniedPermissions.parcel(deniedPermissions, dest, flags); dest.writeInt(gwpAsanMode); + dest.writeInt(memtagMode); + if (nativeHeapZeroInit != null) dest.writeBoolean(nativeHeapZeroInit); } @Override @@ -134,9 +157,12 @@ public class ParsedProcess implements Parcelable { // You can override field unparcelling by defining methods like: // static FieldType unparcelFieldName(Parcel in) { ... } + byte flg = in.readByte(); String _name = in.readString(); Set<String> _deniedPermissions = sParcellingForDeniedPermissions.unparcel(in); int _gwpAsanMode = in.readInt(); + int _memtagMode = in.readInt(); + Boolean _nativeHeapZeroInit = (flg & 0x10) == 0 ? null : (Boolean) in.readBoolean(); this.name = _name; com.android.internal.util.AnnotationValidations.validate( @@ -145,6 +171,8 @@ public class ParsedProcess implements Parcelable { com.android.internal.util.AnnotationValidations.validate( NonNull.class, null, deniedPermissions); this.gwpAsanMode = _gwpAsanMode; + this.memtagMode = _memtagMode; + this.nativeHeapZeroInit = _nativeHeapZeroInit; // onConstructed(); // You can define this method to get a callback } @@ -164,10 +192,10 @@ public class ParsedProcess implements Parcelable { }; @DataClass.Generated( - time = 1584557524776L, - codegenVersion = "1.0.15", + time = 1611615591258L, + codegenVersion = "1.0.22", sourceFile = "frameworks/base/core/java/android/content/pm/parsing/component/ParsedProcess.java", - inputSignatures = "protected @android.annotation.NonNull java.lang.String name\nprotected @android.annotation.NonNull @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedStringSet.class) java.util.Set<java.lang.String> deniedPermissions\nprotected int gwpAsanMode\npublic void addStateFrom(android.content.pm.parsing.component.ParsedProcess)\nclass ParsedProcess extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genGetters=true, genSetters=false, genParcelable=true, genAidl=false, genBuilder=false)") + inputSignatures = "protected @android.annotation.NonNull java.lang.String name\nprotected @android.annotation.NonNull @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedStringSet.class) java.util.Set<java.lang.String> deniedPermissions\nprotected int gwpAsanMode\nprotected int memtagMode\nprotected @android.annotation.Nullable java.lang.Boolean nativeHeapZeroInit\npublic void addStateFrom(android.content.pm.parsing.component.ParsedProcess)\nclass ParsedProcess extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genGetters=true, genSetters=false, genParcelable=true, genAidl=false, genBuilder=false)") @Deprecated private void __metadata() {} diff --git a/core/java/android/content/pm/parsing/component/ParsedProcessUtils.java b/core/java/android/content/pm/parsing/component/ParsedProcessUtils.java index 9bff719e45dd..257977467312 100644 --- a/core/java/android/content/pm/parsing/component/ParsedProcessUtils.java +++ b/core/java/android/content/pm/parsing/component/ParsedProcessUtils.java @@ -103,6 +103,11 @@ public class ParsedProcessUtils { } proc.gwpAsanMode = sa.getInt(R.styleable.AndroidManifestProcess_gwpAsanMode, -1); + proc.memtagMode = sa.getInt(R.styleable.AndroidManifestProcess_memtagMode, -1); + if (sa.hasValue(R.styleable.AndroidManifestProcess_nativeHeapZeroInit)) { + proc.nativeHeapZeroInit = + sa.getBoolean(R.styleable.AndroidManifestProcess_nativeHeapZeroInit, false); + } } finally { sa.recycle(); } diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java index fda87beb941c..0d05b646e03e 100644 --- a/core/java/com/android/internal/os/Zygote.java +++ b/core/java/com/android/internal/os/Zygote.java @@ -124,6 +124,8 @@ public final class Zygote { public static final int DISABLE_TEST_API_ENFORCEMENT_POLICY = 1 << 18; public static final int MEMORY_TAG_LEVEL_MASK = (1 << 19) | (1 << 20); + + public static final int MEMORY_TAG_LEVEL_NONE = 0; /** * Enable pointer tagging in this process. * Tags are checked during memory deallocation, but not on access. @@ -169,6 +171,11 @@ public final class Zygote { */ public static final int GWP_ASAN_LEVEL_ALWAYS = 2 << 21; + /** + * Enable automatic zero-initialization of native heap memory allocations. + */ + public static final int NATIVE_HEAP_ZERO_INIT = 1 << 23; + /** No external storage should be mounted. */ public static final int MOUNT_EXTERNAL_NONE = IVold.REMOUNT_MODE_NONE; /** Default external storage should be mounted. */ |
