Merge "Cleanup nativeHeapZeroInit and memtagMode implementation."
This commit is contained in:
@@ -978,7 +978,7 @@ package android {
|
|||||||
field public static final int multiArch = 16843918; // 0x101048e
|
field public static final int multiArch = 16843918; // 0x101048e
|
||||||
field public static final int multiprocess = 16842771; // 0x1010013
|
field public static final int multiprocess = 16842771; // 0x1010013
|
||||||
field public static final int name = 16842755; // 0x1010003
|
field public static final int name = 16842755; // 0x1010003
|
||||||
field public static final int nativeHeapZeroInit = 16844314; // 0x101061a
|
field public static final int nativeHeapZeroInitialized = 16844314; // 0x101061a
|
||||||
field public static final int navigationBarColor = 16843858; // 0x1010452
|
field public static final int navigationBarColor = 16843858; // 0x1010452
|
||||||
field public static final int navigationBarDividerColor = 16844141; // 0x101056d
|
field public static final int navigationBarDividerColor = 16844141; // 0x101056d
|
||||||
field public static final int navigationContentDescription = 16843969; // 0x10104c1
|
field public static final int navigationContentDescription = 16843969; // 0x10104c1
|
||||||
@@ -11466,7 +11466,7 @@ package android.content.pm {
|
|||||||
method public static CharSequence getCategoryTitle(android.content.Context, int);
|
method public static CharSequence getCategoryTitle(android.content.Context, int);
|
||||||
method public int getGwpAsanMode();
|
method public int getGwpAsanMode();
|
||||||
method public int getMemtagMode();
|
method public int getMemtagMode();
|
||||||
method @Nullable public Boolean isNativeHeapZeroInit();
|
method public int getNativeHeapZeroInitialized();
|
||||||
method public boolean isProfileableByShell();
|
method public boolean isProfileableByShell();
|
||||||
method public boolean isResourceOverlay();
|
method public boolean isResourceOverlay();
|
||||||
method public boolean isVirtualPreload();
|
method public boolean isVirtualPreload();
|
||||||
@@ -11520,6 +11520,9 @@ package android.content.pm {
|
|||||||
field public static final int MEMTAG_DEFAULT = -1; // 0xffffffff
|
field public static final int MEMTAG_DEFAULT = -1; // 0xffffffff
|
||||||
field public static final int MEMTAG_OFF = 0; // 0x0
|
field public static final int MEMTAG_OFF = 0; // 0x0
|
||||||
field public static final int MEMTAG_SYNC = 2; // 0x2
|
field public static final int MEMTAG_SYNC = 2; // 0x2
|
||||||
|
field public static final int ZEROINIT_DEFAULT = -1; // 0xffffffff
|
||||||
|
field public static final int ZEROINIT_DISABLED = 0; // 0x0
|
||||||
|
field public static final int ZEROINIT_ENABLED = 1; // 0x1
|
||||||
field public String appComponentFactory;
|
field public String appComponentFactory;
|
||||||
field public String backupAgentName;
|
field public String backupAgentName;
|
||||||
field public int category;
|
field public int category;
|
||||||
|
|||||||
@@ -1337,7 +1337,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
|||||||
* Indicates if the application has requested GWP-ASan to be enabled, disabled, or left
|
* Indicates if the application has requested GWP-ASan to be enabled, disabled, or left
|
||||||
* unspecified. Processes can override this setting.
|
* unspecified. Processes can override this setting.
|
||||||
*/
|
*/
|
||||||
private @GwpAsanMode int gwpAsanMode;
|
private @GwpAsanMode int gwpAsanMode = GWP_ASAN_DEFAULT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default (unspecified) setting of Memtag.
|
* Default (unspecified) setting of Memtag.
|
||||||
@@ -1376,13 +1376,38 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
|||||||
* Indicates if the application has requested Memtag to be enabled, disabled, or left
|
* Indicates if the application has requested Memtag to be enabled, disabled, or left
|
||||||
* unspecified. Processes can override this setting.
|
* unspecified. Processes can override this setting.
|
||||||
*/
|
*/
|
||||||
private @MemtagMode int memtagMode;
|
private @MemtagMode int memtagMode = MEMTAG_DEFAULT;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default (unspecified) setting of nativeHeapZeroInitialized.
|
||||||
|
*/
|
||||||
|
public static final int ZEROINIT_DEFAULT = -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disable zero-initialization of the native heap in this application or process.
|
||||||
|
*/
|
||||||
|
public static final int ZEROINIT_DISABLED = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable zero-initialization of the native heap in this application or process.
|
||||||
|
*/
|
||||||
|
public static final int ZEROINIT_ENABLED = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
@IntDef(prefix = {"ZEROINIT_"}, value = {
|
||||||
|
ZEROINIT_DEFAULT,
|
||||||
|
ZEROINIT_DISABLED,
|
||||||
|
ZEROINIT_ENABLED,
|
||||||
|
})
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
public @interface NativeHeapZeroInitialized {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enable automatic zero-initialization of native heap memory allocations.
|
* Enable automatic zero-initialization of native heap memory allocations.
|
||||||
*/
|
*/
|
||||||
@Nullable
|
private @NativeHeapZeroInitialized int nativeHeapZeroInitialized = ZEROINIT_DEFAULT;
|
||||||
private Boolean nativeHeapZeroInit;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents the default policy. The actual policy used will depend on other properties of
|
* Represents the default policy. The actual policy used will depend on other properties of
|
||||||
@@ -1531,8 +1556,8 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
|||||||
if (memtagMode != MEMTAG_DEFAULT) {
|
if (memtagMode != MEMTAG_DEFAULT) {
|
||||||
pw.println(prefix + "memtagMode=" + memtagMode);
|
pw.println(prefix + "memtagMode=" + memtagMode);
|
||||||
}
|
}
|
||||||
if (nativeHeapZeroInit != null) {
|
if (nativeHeapZeroInitialized != ZEROINIT_DEFAULT) {
|
||||||
pw.println(prefix + "nativeHeapZeroInit=" + nativeHeapZeroInit);
|
pw.println(prefix + "nativeHeapZeroInitialized=" + nativeHeapZeroInitialized);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
super.dumpBack(pw, prefix);
|
super.dumpBack(pw, prefix);
|
||||||
@@ -1638,8 +1663,9 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
|||||||
if (memtagMode != MEMTAG_DEFAULT) {
|
if (memtagMode != MEMTAG_DEFAULT) {
|
||||||
proto.write(ApplicationInfoProto.Detail.ENABLE_MEMTAG, memtagMode);
|
proto.write(ApplicationInfoProto.Detail.ENABLE_MEMTAG, memtagMode);
|
||||||
}
|
}
|
||||||
if (nativeHeapZeroInit != null) {
|
if (nativeHeapZeroInitialized != ZEROINIT_DEFAULT) {
|
||||||
proto.write(ApplicationInfoProto.Detail.NATIVE_HEAP_ZERO_INIT, nativeHeapZeroInit);
|
proto.write(ApplicationInfoProto.Detail.NATIVE_HEAP_ZERO_INIT,
|
||||||
|
nativeHeapZeroInitialized);
|
||||||
}
|
}
|
||||||
proto.end(detailToken);
|
proto.end(detailToken);
|
||||||
}
|
}
|
||||||
@@ -1752,7 +1778,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
|||||||
zygotePreloadName = orig.zygotePreloadName;
|
zygotePreloadName = orig.zygotePreloadName;
|
||||||
gwpAsanMode = orig.gwpAsanMode;
|
gwpAsanMode = orig.gwpAsanMode;
|
||||||
memtagMode = orig.memtagMode;
|
memtagMode = orig.memtagMode;
|
||||||
nativeHeapZeroInit = orig.nativeHeapZeroInit;
|
nativeHeapZeroInitialized = orig.nativeHeapZeroInitialized;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
@@ -1838,7 +1864,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
|||||||
dest.writeString8(zygotePreloadName);
|
dest.writeString8(zygotePreloadName);
|
||||||
dest.writeInt(gwpAsanMode);
|
dest.writeInt(gwpAsanMode);
|
||||||
dest.writeInt(memtagMode);
|
dest.writeInt(memtagMode);
|
||||||
sForBoolean.parcel(nativeHeapZeroInit, dest, parcelableFlags);
|
dest.writeInt(nativeHeapZeroInitialized);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final @android.annotation.NonNull Parcelable.Creator<ApplicationInfo> CREATOR
|
public static final @android.annotation.NonNull Parcelable.Creator<ApplicationInfo> CREATOR
|
||||||
@@ -1921,7 +1947,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
|||||||
zygotePreloadName = source.readString8();
|
zygotePreloadName = source.readString8();
|
||||||
gwpAsanMode = source.readInt();
|
gwpAsanMode = source.readInt();
|
||||||
memtagMode = source.readInt();
|
memtagMode = source.readInt();
|
||||||
nativeHeapZeroInit = sForBoolean.unparcel(source);
|
nativeHeapZeroInitialized = source.readInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2314,7 +2340,9 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
|||||||
/** {@hide} */ public void setSplitResourcePaths(String[] splitResourcePaths) { splitPublicSourceDirs = splitResourcePaths; }
|
/** {@hide} */ public void setSplitResourcePaths(String[] splitResourcePaths) { splitPublicSourceDirs = splitResourcePaths; }
|
||||||
/** {@hide} */ public void setGwpAsanMode(@GwpAsanMode int value) { gwpAsanMode = value; }
|
/** {@hide} */ public void setGwpAsanMode(@GwpAsanMode int value) { gwpAsanMode = value; }
|
||||||
/** {@hide} */ public void setMemtagMode(@MemtagMode int value) { memtagMode = value; }
|
/** {@hide} */ public void setMemtagMode(@MemtagMode int value) { memtagMode = value; }
|
||||||
/** {@hide} */ public void setNativeHeapZeroInit(@Nullable Boolean value) { nativeHeapZeroInit = value; }
|
/** {@hide} */ public void setNativeHeapZeroInitialized(@NativeHeapZeroInitialized int value) {
|
||||||
|
nativeHeapZeroInitialized = value;
|
||||||
|
}
|
||||||
|
|
||||||
/** {@hide} */
|
/** {@hide} */
|
||||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
|
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
|
||||||
@@ -2328,8 +2356,22 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
|
|||||||
/** {@hide} */ public String[] getSplitResourcePaths() { return splitPublicSourceDirs; }
|
/** {@hide} */ public String[] getSplitResourcePaths() { return splitPublicSourceDirs; }
|
||||||
@GwpAsanMode
|
@GwpAsanMode
|
||||||
public int getGwpAsanMode() { return gwpAsanMode; }
|
public int getGwpAsanMode() { return gwpAsanMode; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the application has requested Memtag to be enabled, disabled, or left
|
||||||
|
* unspecified. Processes can override this setting.
|
||||||
|
*/
|
||||||
@MemtagMode
|
@MemtagMode
|
||||||
public int getMemtagMode() { return memtagMode; }
|
public int getMemtagMode() {
|
||||||
@Nullable
|
return memtagMode;
|
||||||
public Boolean isNativeHeapZeroInit() { return nativeHeapZeroInit; }
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the application has requested automatic zero-initialization of native heap
|
||||||
|
* memory allocations to be enabled or disabled.
|
||||||
|
*/
|
||||||
|
@NativeHeapZeroInitialized
|
||||||
|
public int getNativeHeapZeroInitialized() {
|
||||||
|
return nativeHeapZeroInitialized;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,8 +62,7 @@ public class ProcessInfo implements Parcelable {
|
|||||||
/**
|
/**
|
||||||
* Enable automatic zero-initialization of native heap memory allocations.
|
* Enable automatic zero-initialization of native heap memory allocations.
|
||||||
*/
|
*/
|
||||||
@Nullable
|
public @ApplicationInfo.NativeHeapZeroInitialized int nativeHeapZeroInitialized;
|
||||||
public Boolean nativeHeapZeroInit;
|
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public ProcessInfo(@NonNull ProcessInfo orig) {
|
public ProcessInfo(@NonNull ProcessInfo orig) {
|
||||||
@@ -71,7 +70,7 @@ public class ProcessInfo implements Parcelable {
|
|||||||
this.deniedPermissions = orig.deniedPermissions;
|
this.deniedPermissions = orig.deniedPermissions;
|
||||||
this.gwpAsanMode = orig.gwpAsanMode;
|
this.gwpAsanMode = orig.gwpAsanMode;
|
||||||
this.memtagMode = orig.memtagMode;
|
this.memtagMode = orig.memtagMode;
|
||||||
this.nativeHeapZeroInit = orig.nativeHeapZeroInit;
|
this.nativeHeapZeroInitialized = orig.nativeHeapZeroInitialized;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -101,7 +100,7 @@ public class ProcessInfo implements Parcelable {
|
|||||||
* @param memtagMode
|
* @param memtagMode
|
||||||
* Indicates if the process has requested Memtag to be enabled (in sync or async mode),
|
* Indicates if the process has requested Memtag to be enabled (in sync or async mode),
|
||||||
* disabled, or left unspecified.
|
* disabled, or left unspecified.
|
||||||
* @param nativeHeapZeroInit
|
* @param nativeHeapZeroInitialized
|
||||||
* Enable automatic zero-initialization of native heap memory allocations.
|
* Enable automatic zero-initialization of native heap memory allocations.
|
||||||
*/
|
*/
|
||||||
@DataClass.Generated.Member
|
@DataClass.Generated.Member
|
||||||
@@ -110,7 +109,7 @@ public class ProcessInfo implements Parcelable {
|
|||||||
@Nullable ArraySet<String> deniedPermissions,
|
@Nullable ArraySet<String> deniedPermissions,
|
||||||
@ApplicationInfo.GwpAsanMode int gwpAsanMode,
|
@ApplicationInfo.GwpAsanMode int gwpAsanMode,
|
||||||
@ApplicationInfo.MemtagMode int memtagMode,
|
@ApplicationInfo.MemtagMode int memtagMode,
|
||||||
@Nullable Boolean nativeHeapZeroInit) {
|
@ApplicationInfo.NativeHeapZeroInitialized int nativeHeapZeroInitialized) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
com.android.internal.util.AnnotationValidations.validate(
|
com.android.internal.util.AnnotationValidations.validate(
|
||||||
NonNull.class, null, name);
|
NonNull.class, null, name);
|
||||||
@@ -121,7 +120,9 @@ public class ProcessInfo implements Parcelable {
|
|||||||
this.memtagMode = memtagMode;
|
this.memtagMode = memtagMode;
|
||||||
com.android.internal.util.AnnotationValidations.validate(
|
com.android.internal.util.AnnotationValidations.validate(
|
||||||
ApplicationInfo.MemtagMode.class, null, memtagMode);
|
ApplicationInfo.MemtagMode.class, null, memtagMode);
|
||||||
this.nativeHeapZeroInit = nativeHeapZeroInit;
|
this.nativeHeapZeroInitialized = nativeHeapZeroInitialized;
|
||||||
|
com.android.internal.util.AnnotationValidations.validate(
|
||||||
|
ApplicationInfo.NativeHeapZeroInitialized.class, null, nativeHeapZeroInitialized);
|
||||||
|
|
||||||
// onConstructed(); // You can define this method to get a callback
|
// onConstructed(); // You can define this method to get a callback
|
||||||
}
|
}
|
||||||
@@ -145,13 +146,12 @@ public class ProcessInfo implements Parcelable {
|
|||||||
|
|
||||||
byte flg = 0;
|
byte flg = 0;
|
||||||
if (deniedPermissions != null) flg |= 0x2;
|
if (deniedPermissions != null) flg |= 0x2;
|
||||||
if (nativeHeapZeroInit != null) flg |= 0x10;
|
|
||||||
dest.writeByte(flg);
|
dest.writeByte(flg);
|
||||||
dest.writeString(name);
|
dest.writeString(name);
|
||||||
sParcellingForDeniedPermissions.parcel(deniedPermissions, dest, flags);
|
sParcellingForDeniedPermissions.parcel(deniedPermissions, dest, flags);
|
||||||
dest.writeInt(gwpAsanMode);
|
dest.writeInt(gwpAsanMode);
|
||||||
dest.writeInt(memtagMode);
|
dest.writeInt(memtagMode);
|
||||||
if (nativeHeapZeroInit != null) dest.writeBoolean(nativeHeapZeroInit);
|
dest.writeInt(nativeHeapZeroInitialized);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -170,7 +170,7 @@ public class ProcessInfo implements Parcelable {
|
|||||||
ArraySet<String> _deniedPermissions = sParcellingForDeniedPermissions.unparcel(in);
|
ArraySet<String> _deniedPermissions = sParcellingForDeniedPermissions.unparcel(in);
|
||||||
int _gwpAsanMode = in.readInt();
|
int _gwpAsanMode = in.readInt();
|
||||||
int _memtagMode = in.readInt();
|
int _memtagMode = in.readInt();
|
||||||
Boolean _nativeHeapZeroInit = (flg & 0x10) == 0 ? null : (Boolean) in.readBoolean();
|
int _nativeHeapZeroInitialized = in.readInt();
|
||||||
|
|
||||||
this.name = _name;
|
this.name = _name;
|
||||||
com.android.internal.util.AnnotationValidations.validate(
|
com.android.internal.util.AnnotationValidations.validate(
|
||||||
@@ -182,7 +182,9 @@ public class ProcessInfo implements Parcelable {
|
|||||||
this.memtagMode = _memtagMode;
|
this.memtagMode = _memtagMode;
|
||||||
com.android.internal.util.AnnotationValidations.validate(
|
com.android.internal.util.AnnotationValidations.validate(
|
||||||
ApplicationInfo.MemtagMode.class, null, memtagMode);
|
ApplicationInfo.MemtagMode.class, null, memtagMode);
|
||||||
this.nativeHeapZeroInit = _nativeHeapZeroInit;
|
this.nativeHeapZeroInitialized = _nativeHeapZeroInitialized;
|
||||||
|
com.android.internal.util.AnnotationValidations.validate(
|
||||||
|
ApplicationInfo.NativeHeapZeroInitialized.class, null, nativeHeapZeroInitialized);
|
||||||
|
|
||||||
// onConstructed(); // You can define this method to get a callback
|
// onConstructed(); // You can define this method to get a callback
|
||||||
}
|
}
|
||||||
@@ -202,10 +204,10 @@ public class ProcessInfo implements Parcelable {
|
|||||||
};
|
};
|
||||||
|
|
||||||
@DataClass.Generated(
|
@DataClass.Generated(
|
||||||
time = 1611614699049L,
|
time = 1615850184524L,
|
||||||
codegenVersion = "1.0.22",
|
codegenVersion = "1.0.22",
|
||||||
sourceFile = "frameworks/base/core/java/android/content/pm/ProcessInfo.java",
|
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\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)")
|
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.content.pm.ApplicationInfo.NativeHeapZeroInitialized int nativeHeapZeroInitialized\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
|
@Deprecated
|
||||||
private void __metadata() {}
|
private void __metadata() {}
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package android.content.pm.parsing;
|
|||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.content.pm.ConfigurationInfo;
|
import android.content.pm.ConfigurationInfo;
|
||||||
import android.content.pm.FeatureGroupInfo;
|
import android.content.pm.FeatureGroupInfo;
|
||||||
import android.content.pm.FeatureInfo;
|
import android.content.pm.FeatureInfo;
|
||||||
@@ -239,11 +240,12 @@ public interface ParsingPackage extends ParsingPackageRead {
|
|||||||
|
|
||||||
ParsingPackage setEnabled(boolean enabled);
|
ParsingPackage setEnabled(boolean enabled);
|
||||||
|
|
||||||
ParsingPackage setGwpAsanMode(int gwpAsanMode);
|
ParsingPackage setGwpAsanMode(@ApplicationInfo.GwpAsanMode int gwpAsanMode);
|
||||||
|
|
||||||
ParsingPackage setMemtagMode(int memtagMode);
|
ParsingPackage setMemtagMode(@ApplicationInfo.MemtagMode int memtagMode);
|
||||||
|
|
||||||
ParsingPackage setNativeHeapZeroInit(@Nullable Boolean nativeHeapZeroInit);
|
ParsingPackage setNativeHeapZeroInitialized(
|
||||||
|
@ApplicationInfo.NativeHeapZeroInitialized int nativeHeapZeroInitialized);
|
||||||
|
|
||||||
ParsingPackage setCrossProfile(boolean crossProfile);
|
ParsingPackage setCrossProfile(boolean crossProfile);
|
||||||
|
|
||||||
|
|||||||
@@ -417,12 +417,14 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
|
|||||||
private int autoRevokePermissions;
|
private int autoRevokePermissions;
|
||||||
private boolean preserveLegacyExternalStorage;
|
private boolean preserveLegacyExternalStorage;
|
||||||
|
|
||||||
protected int gwpAsanMode;
|
@ApplicationInfo.GwpAsanMode
|
||||||
protected int memtagMode;
|
private int gwpAsanMode;
|
||||||
|
|
||||||
@Nullable
|
@ApplicationInfo.MemtagMode
|
||||||
@DataClass.ParcelWith(ForBoolean.class)
|
private int memtagMode;
|
||||||
private Boolean nativeHeapZeroInit;
|
|
||||||
|
@ApplicationInfo.NativeHeapZeroInitialized
|
||||||
|
private int nativeHeapZeroInitialized;
|
||||||
|
|
||||||
// TODO(chiuwinson): Non-null
|
// TODO(chiuwinson): Non-null
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -934,7 +936,7 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
|
|||||||
appInfo.crossProfile = isCrossProfile();
|
appInfo.crossProfile = isCrossProfile();
|
||||||
appInfo.setGwpAsanMode(gwpAsanMode);
|
appInfo.setGwpAsanMode(gwpAsanMode);
|
||||||
appInfo.setMemtagMode(memtagMode);
|
appInfo.setMemtagMode(memtagMode);
|
||||||
appInfo.setNativeHeapZeroInit(nativeHeapZeroInit);
|
appInfo.setNativeHeapZeroInitialized(nativeHeapZeroInitialized);
|
||||||
appInfo.setBaseCodePath(baseCodePath);
|
appInfo.setBaseCodePath(baseCodePath);
|
||||||
appInfo.setBaseResourcePath(baseCodePath);
|
appInfo.setBaseResourcePath(baseCodePath);
|
||||||
appInfo.setCodePath(codePath);
|
appInfo.setCodePath(codePath);
|
||||||
@@ -1121,7 +1123,7 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
|
|||||||
dest.writeInt(this.gwpAsanMode);
|
dest.writeInt(this.gwpAsanMode);
|
||||||
dest.writeSparseIntArray(this.minExtensionVersions);
|
dest.writeSparseIntArray(this.minExtensionVersions);
|
||||||
dest.writeInt(this.memtagMode);
|
dest.writeInt(this.memtagMode);
|
||||||
sForBoolean.parcel(this.nativeHeapZeroInit, dest, flags);
|
dest.writeInt(this.nativeHeapZeroInitialized);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ParsingPackageImpl(Parcel in) {
|
public ParsingPackageImpl(Parcel in) {
|
||||||
@@ -1284,7 +1286,7 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
|
|||||||
this.gwpAsanMode = in.readInt();
|
this.gwpAsanMode = in.readInt();
|
||||||
this.minExtensionVersions = in.readSparseIntArray();
|
this.minExtensionVersions = in.readSparseIntArray();
|
||||||
this.memtagMode = in.readInt();
|
this.memtagMode = in.readInt();
|
||||||
this.nativeHeapZeroInit = sForBoolean.unparcel(in);
|
this.nativeHeapZeroInitialized = in.readInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final Parcelable.Creator<ParsingPackageImpl> CREATOR =
|
public static final Parcelable.Creator<ParsingPackageImpl> CREATOR =
|
||||||
@@ -2012,20 +2014,22 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
|
|||||||
return directBootAware;
|
return directBootAware;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApplicationInfo.GwpAsanMode
|
||||||
@Override
|
@Override
|
||||||
public int getGwpAsanMode() {
|
public int getGwpAsanMode() {
|
||||||
return gwpAsanMode;
|
return gwpAsanMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApplicationInfo.MemtagMode
|
||||||
@Override
|
@Override
|
||||||
public int getMemtagMode() {
|
public int getMemtagMode() {
|
||||||
return memtagMode;
|
return memtagMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@ApplicationInfo.NativeHeapZeroInitialized
|
||||||
@Override
|
@Override
|
||||||
public Boolean isNativeHeapZeroInit() {
|
public int getNativeHeapZeroInitialized() {
|
||||||
return nativeHeapZeroInit;
|
return nativeHeapZeroInitialized;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -2495,20 +2499,21 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ParsingPackageImpl setGwpAsanMode(int value) {
|
public ParsingPackageImpl setGwpAsanMode(@ApplicationInfo.GwpAsanMode int value) {
|
||||||
gwpAsanMode = value;
|
gwpAsanMode = value;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ParsingPackageImpl setMemtagMode(int value) {
|
public ParsingPackageImpl setMemtagMode(@ApplicationInfo.MemtagMode int value) {
|
||||||
memtagMode = value;
|
memtagMode = value;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ParsingPackageImpl setNativeHeapZeroInit(@Nullable Boolean value) {
|
public ParsingPackageImpl setNativeHeapZeroInitialized(
|
||||||
nativeHeapZeroInit = value;
|
@ApplicationInfo.NativeHeapZeroInitialized int value) {
|
||||||
|
nativeHeapZeroInitialized = value;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -854,20 +854,22 @@ public interface ParsingPackageRead extends Parcelable {
|
|||||||
* @see ApplicationInfo#gwpAsanMode
|
* @see ApplicationInfo#gwpAsanMode
|
||||||
* @see R.styleable#AndroidManifest_gwpAsanMode
|
* @see R.styleable#AndroidManifest_gwpAsanMode
|
||||||
*/
|
*/
|
||||||
public int getGwpAsanMode();
|
@ApplicationInfo.GwpAsanMode
|
||||||
|
int getGwpAsanMode();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see ApplicationInfo#memtagMode
|
* @see ApplicationInfo#memtagMode
|
||||||
* @see R.styleable#AndroidManifest_memtagMode
|
* @see R.styleable#AndroidManifest_memtagMode
|
||||||
*/
|
*/
|
||||||
|
@ApplicationInfo.MemtagMode
|
||||||
int getMemtagMode();
|
int getMemtagMode();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see ApplicationInfo#nativeHeapZeroInit
|
* @see ApplicationInfo#nativeHeapZeroInitialized
|
||||||
* @see R.styleable#AndroidManifest_nativeHeapZeroInit
|
* @see R.styleable#AndroidManifest_nativeHeapZeroInitialized
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@ApplicationInfo.NativeHeapZeroInitialized
|
||||||
Boolean isNativeHeapZeroInit();
|
int getNativeHeapZeroInitialized();
|
||||||
|
|
||||||
// TODO(b/135203078): Hide and enforce going through PackageInfoUtils
|
// TODO(b/135203078): Hide and enforce going through PackageInfoUtils
|
||||||
ApplicationInfo toAppInfoWithoutState();
|
ApplicationInfo toAppInfoWithoutState();
|
||||||
|
|||||||
@@ -1800,9 +1800,11 @@ public class ParsingPackageUtils {
|
|||||||
|
|
||||||
pkg.setGwpAsanMode(sa.getInt(R.styleable.AndroidManifestApplication_gwpAsanMode, -1));
|
pkg.setGwpAsanMode(sa.getInt(R.styleable.AndroidManifestApplication_gwpAsanMode, -1));
|
||||||
pkg.setMemtagMode(sa.getInt(R.styleable.AndroidManifestApplication_memtagMode, -1));
|
pkg.setMemtagMode(sa.getInt(R.styleable.AndroidManifestApplication_memtagMode, -1));
|
||||||
if (sa.hasValue(R.styleable.AndroidManifestApplication_nativeHeapZeroInit)) {
|
if (sa.hasValue(R.styleable.AndroidManifestApplication_nativeHeapZeroInitialized)) {
|
||||||
pkg.setNativeHeapZeroInit(sa.getBoolean(
|
Boolean v = sa.getBoolean(
|
||||||
R.styleable.AndroidManifestApplication_nativeHeapZeroInit, false));
|
R.styleable.AndroidManifestApplication_nativeHeapZeroInitialized, false);
|
||||||
|
pkg.setNativeHeapZeroInitialized(
|
||||||
|
v ? ApplicationInfo.ZEROINIT_ENABLED : ApplicationInfo.ZEROINIT_DISABLED);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
sa.recycle();
|
sa.recycle();
|
||||||
|
|||||||
@@ -42,10 +42,12 @@ public class ParsedProcess implements Parcelable {
|
|||||||
@DataClass.ParcelWith(Parcelling.BuiltIn.ForInternedStringSet.class)
|
@DataClass.ParcelWith(Parcelling.BuiltIn.ForInternedStringSet.class)
|
||||||
protected Set<String> deniedPermissions = emptySet();
|
protected Set<String> deniedPermissions = emptySet();
|
||||||
|
|
||||||
|
@ApplicationInfo.GwpAsanMode
|
||||||
protected int gwpAsanMode = ApplicationInfo.GWP_ASAN_DEFAULT;
|
protected int gwpAsanMode = ApplicationInfo.GWP_ASAN_DEFAULT;
|
||||||
|
@ApplicationInfo.MemtagMode
|
||||||
protected int memtagMode = ApplicationInfo.MEMTAG_DEFAULT;
|
protected int memtagMode = ApplicationInfo.MEMTAG_DEFAULT;
|
||||||
@Nullable
|
@ApplicationInfo.NativeHeapZeroInitialized
|
||||||
protected Boolean nativeHeapZeroInit = null;
|
protected int nativeHeapZeroInitialized = ApplicationInfo.ZEROINIT_DEFAULT;
|
||||||
|
|
||||||
public ParsedProcess() {
|
public ParsedProcess() {
|
||||||
}
|
}
|
||||||
@@ -78,9 +80,9 @@ public class ParsedProcess implements Parcelable {
|
|||||||
public ParsedProcess(
|
public ParsedProcess(
|
||||||
@NonNull String name,
|
@NonNull String name,
|
||||||
@NonNull Set<String> deniedPermissions,
|
@NonNull Set<String> deniedPermissions,
|
||||||
int gwpAsanMode,
|
@ApplicationInfo.GwpAsanMode int gwpAsanMode,
|
||||||
int memtagMode,
|
@ApplicationInfo.MemtagMode int memtagMode,
|
||||||
@Nullable Boolean nativeHeapZeroInit) {
|
@ApplicationInfo.NativeHeapZeroInitialized int nativeHeapZeroInitialized) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
com.android.internal.util.AnnotationValidations.validate(
|
com.android.internal.util.AnnotationValidations.validate(
|
||||||
NonNull.class, null, name);
|
NonNull.class, null, name);
|
||||||
@@ -88,8 +90,14 @@ public class ParsedProcess implements Parcelable {
|
|||||||
com.android.internal.util.AnnotationValidations.validate(
|
com.android.internal.util.AnnotationValidations.validate(
|
||||||
NonNull.class, null, deniedPermissions);
|
NonNull.class, null, deniedPermissions);
|
||||||
this.gwpAsanMode = gwpAsanMode;
|
this.gwpAsanMode = gwpAsanMode;
|
||||||
|
com.android.internal.util.AnnotationValidations.validate(
|
||||||
|
ApplicationInfo.GwpAsanMode.class, null, gwpAsanMode);
|
||||||
this.memtagMode = memtagMode;
|
this.memtagMode = memtagMode;
|
||||||
this.nativeHeapZeroInit = nativeHeapZeroInit;
|
com.android.internal.util.AnnotationValidations.validate(
|
||||||
|
ApplicationInfo.MemtagMode.class, null, memtagMode);
|
||||||
|
this.nativeHeapZeroInitialized = nativeHeapZeroInitialized;
|
||||||
|
com.android.internal.util.AnnotationValidations.validate(
|
||||||
|
ApplicationInfo.NativeHeapZeroInitialized.class, null, nativeHeapZeroInitialized);
|
||||||
|
|
||||||
// onConstructed(); // You can define this method to get a callback
|
// onConstructed(); // You can define this method to get a callback
|
||||||
}
|
}
|
||||||
@@ -105,18 +113,18 @@ public class ParsedProcess implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DataClass.Generated.Member
|
@DataClass.Generated.Member
|
||||||
public int getGwpAsanMode() {
|
public @ApplicationInfo.GwpAsanMode int getGwpAsanMode() {
|
||||||
return gwpAsanMode;
|
return gwpAsanMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@DataClass.Generated.Member
|
@DataClass.Generated.Member
|
||||||
public int getMemtagMode() {
|
public @ApplicationInfo.MemtagMode int getMemtagMode() {
|
||||||
return memtagMode;
|
return memtagMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@DataClass.Generated.Member
|
@DataClass.Generated.Member
|
||||||
public @Nullable Boolean getNativeHeapZeroInit() {
|
public @ApplicationInfo.NativeHeapZeroInitialized int getNativeHeapZeroInitialized() {
|
||||||
return nativeHeapZeroInit;
|
return nativeHeapZeroInitialized;
|
||||||
}
|
}
|
||||||
|
|
||||||
@DataClass.Generated.Member
|
@DataClass.Generated.Member
|
||||||
@@ -136,14 +144,11 @@ public class ParsedProcess implements Parcelable {
|
|||||||
// You can override field parcelling by defining methods like:
|
// You can override field parcelling by defining methods like:
|
||||||
// void parcelFieldName(Parcel dest, int flags) { ... }
|
// void parcelFieldName(Parcel dest, int flags) { ... }
|
||||||
|
|
||||||
byte flg = 0;
|
|
||||||
if (nativeHeapZeroInit != null) flg |= 0x10;
|
|
||||||
dest.writeByte(flg);
|
|
||||||
dest.writeString(name);
|
dest.writeString(name);
|
||||||
sParcellingForDeniedPermissions.parcel(deniedPermissions, dest, flags);
|
sParcellingForDeniedPermissions.parcel(deniedPermissions, dest, flags);
|
||||||
dest.writeInt(gwpAsanMode);
|
dest.writeInt(gwpAsanMode);
|
||||||
dest.writeInt(memtagMode);
|
dest.writeInt(memtagMode);
|
||||||
if (nativeHeapZeroInit != null) dest.writeBoolean(nativeHeapZeroInit);
|
dest.writeInt(nativeHeapZeroInitialized);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -157,12 +162,11 @@ public class ParsedProcess implements Parcelable {
|
|||||||
// You can override field unparcelling by defining methods like:
|
// You can override field unparcelling by defining methods like:
|
||||||
// static FieldType unparcelFieldName(Parcel in) { ... }
|
// static FieldType unparcelFieldName(Parcel in) { ... }
|
||||||
|
|
||||||
byte flg = in.readByte();
|
|
||||||
String _name = in.readString();
|
String _name = in.readString();
|
||||||
Set<String> _deniedPermissions = sParcellingForDeniedPermissions.unparcel(in);
|
Set<String> _deniedPermissions = sParcellingForDeniedPermissions.unparcel(in);
|
||||||
int _gwpAsanMode = in.readInt();
|
int _gwpAsanMode = in.readInt();
|
||||||
int _memtagMode = in.readInt();
|
int _memtagMode = in.readInt();
|
||||||
Boolean _nativeHeapZeroInit = (flg & 0x10) == 0 ? null : (Boolean) in.readBoolean();
|
int _nativeHeapZeroInitialized = in.readInt();
|
||||||
|
|
||||||
this.name = _name;
|
this.name = _name;
|
||||||
com.android.internal.util.AnnotationValidations.validate(
|
com.android.internal.util.AnnotationValidations.validate(
|
||||||
@@ -171,8 +175,14 @@ public class ParsedProcess implements Parcelable {
|
|||||||
com.android.internal.util.AnnotationValidations.validate(
|
com.android.internal.util.AnnotationValidations.validate(
|
||||||
NonNull.class, null, deniedPermissions);
|
NonNull.class, null, deniedPermissions);
|
||||||
this.gwpAsanMode = _gwpAsanMode;
|
this.gwpAsanMode = _gwpAsanMode;
|
||||||
|
com.android.internal.util.AnnotationValidations.validate(
|
||||||
|
ApplicationInfo.GwpAsanMode.class, null, gwpAsanMode);
|
||||||
this.memtagMode = _memtagMode;
|
this.memtagMode = _memtagMode;
|
||||||
this.nativeHeapZeroInit = _nativeHeapZeroInit;
|
com.android.internal.util.AnnotationValidations.validate(
|
||||||
|
ApplicationInfo.MemtagMode.class, null, memtagMode);
|
||||||
|
this.nativeHeapZeroInitialized = _nativeHeapZeroInitialized;
|
||||||
|
com.android.internal.util.AnnotationValidations.validate(
|
||||||
|
ApplicationInfo.NativeHeapZeroInitialized.class, null, nativeHeapZeroInitialized);
|
||||||
|
|
||||||
// onConstructed(); // You can define this method to get a callback
|
// onConstructed(); // You can define this method to get a callback
|
||||||
}
|
}
|
||||||
@@ -192,10 +202,10 @@ public class ParsedProcess implements Parcelable {
|
|||||||
};
|
};
|
||||||
|
|
||||||
@DataClass.Generated(
|
@DataClass.Generated(
|
||||||
time = 1611615591258L,
|
time = 1615850515058L,
|
||||||
codegenVersion = "1.0.22",
|
codegenVersion = "1.0.22",
|
||||||
sourceFile = "frameworks/base/core/java/android/content/pm/parsing/component/ParsedProcess.java",
|
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\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)")
|
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 @android.content.pm.ApplicationInfo.GwpAsanMode int gwpAsanMode\nprotected @android.content.pm.ApplicationInfo.MemtagMode int memtagMode\nprotected @android.content.pm.ApplicationInfo.NativeHeapZeroInitialized int nativeHeapZeroInitialized\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
|
@Deprecated
|
||||||
private void __metadata() {}
|
private void __metadata() {}
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package android.content.pm.parsing.component;
|
package android.content.pm.parsing.component;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.content.pm.parsing.ParsingPackage;
|
import android.content.pm.parsing.ParsingPackage;
|
||||||
import android.content.pm.parsing.ParsingUtils;
|
import android.content.pm.parsing.ParsingUtils;
|
||||||
import android.content.pm.parsing.result.ParseInput;
|
import android.content.pm.parsing.result.ParseInput;
|
||||||
@@ -106,9 +107,11 @@ public class ParsedProcessUtils {
|
|||||||
|
|
||||||
proc.gwpAsanMode = sa.getInt(R.styleable.AndroidManifestProcess_gwpAsanMode, -1);
|
proc.gwpAsanMode = sa.getInt(R.styleable.AndroidManifestProcess_gwpAsanMode, -1);
|
||||||
proc.memtagMode = sa.getInt(R.styleable.AndroidManifestProcess_memtagMode, -1);
|
proc.memtagMode = sa.getInt(R.styleable.AndroidManifestProcess_memtagMode, -1);
|
||||||
if (sa.hasValue(R.styleable.AndroidManifestProcess_nativeHeapZeroInit)) {
|
if (sa.hasValue(R.styleable.AndroidManifestProcess_nativeHeapZeroInitialized)) {
|
||||||
proc.nativeHeapZeroInit =
|
Boolean v = sa.getBoolean(
|
||||||
sa.getBoolean(R.styleable.AndroidManifestProcess_nativeHeapZeroInit, false);
|
R.styleable.AndroidManifestProcess_nativeHeapZeroInitialized, false);
|
||||||
|
proc.nativeHeapZeroInitialized =
|
||||||
|
v ? ApplicationInfo.ZEROINIT_ENABLED : ApplicationInfo.ZEROINIT_DISABLED;
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
sa.recycle();
|
sa.recycle();
|
||||||
|
|||||||
@@ -1560,6 +1560,20 @@
|
|||||||
<enum name="always" value="1" />
|
<enum name="always" value="1" />
|
||||||
</attr>
|
</attr>
|
||||||
|
|
||||||
|
<!-- Enable hardware memory tagging (ARM MTE) in this process.
|
||||||
|
When enabled, heap memory bugs like use-after-free and buffer overlow
|
||||||
|
are detected and result in an immediate ("sync" mode) or delayed ("async"
|
||||||
|
mode) crash instead of a silent memory corruption. Sync mode, while slower,
|
||||||
|
provides enhanced bug reports including stack traces at the time of allocation
|
||||||
|
and deallocation of memory, similar to AddressSanitizer.
|
||||||
|
|
||||||
|
See the <a href="https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/enhancing-memory-safety">ARM announcement</a>
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
<p>This attribute can be applied to a
|
||||||
|
{@link android.R.styleable#AndroidManifestProcess process} tag, or to an
|
||||||
|
{@link android.R.styleable#AndroidManifestApplication application} tag (to supply
|
||||||
|
a default setting for all application components). -->
|
||||||
<attr name="memtagMode">
|
<attr name="memtagMode">
|
||||||
<enum name="default" value="-1" />
|
<enum name="default" value="-1" />
|
||||||
<enum name="off" value="0" />
|
<enum name="off" value="0" />
|
||||||
@@ -1836,7 +1850,9 @@
|
|||||||
|
|
||||||
<attr name="memtagMode" />
|
<attr name="memtagMode" />
|
||||||
|
|
||||||
<attr name="nativeHeapZeroInit" format="boolean" />
|
<!-- If {@code true} enables automatic zero initialization of all native heap
|
||||||
|
allocations. -->
|
||||||
|
<attr name="nativeHeapZeroInitialized" format="boolean" />
|
||||||
|
|
||||||
<!-- @hide no longer used, kept to preserve padding -->
|
<!-- @hide no longer used, kept to preserve padding -->
|
||||||
<attr name="allowAutoRevokePermissionsExemption" format="boolean" />
|
<attr name="allowAutoRevokePermissionsExemption" format="boolean" />
|
||||||
@@ -2362,7 +2378,7 @@
|
|||||||
<attr name="process" />
|
<attr name="process" />
|
||||||
<attr name="gwpAsanMode" />
|
<attr name="gwpAsanMode" />
|
||||||
<attr name="memtagMode" />
|
<attr name="memtagMode" />
|
||||||
<attr name="nativeHeapZeroInit" />
|
<attr name="nativeHeapZeroInitialized" />
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
<!-- The <code>deny-permission</code> tag specifies that a permission is to be denied
|
<!-- The <code>deny-permission</code> tag specifies that a permission is to be denied
|
||||||
|
|||||||
@@ -3047,7 +3047,7 @@
|
|||||||
<!-- attribute definitions go here -->
|
<!-- attribute definitions go here -->
|
||||||
<public name="requireDeviceScreenOn" />
|
<public name="requireDeviceScreenOn" />
|
||||||
<public name="memtagMode" />
|
<public name="memtagMode" />
|
||||||
<public name="nativeHeapZeroInit" />
|
<public name="nativeHeapZeroInitialized" />
|
||||||
</public-group>
|
</public-group>
|
||||||
|
|
||||||
<public-group type="drawable" first-id="0x010800b5">
|
<public-group type="drawable" first-id="0x010800b5">
|
||||||
|
|||||||
@@ -1722,12 +1722,13 @@ public final class ProcessList {
|
|||||||
|
|
||||||
private boolean enableNativeHeapZeroInit(ProcessRecord app) {
|
private boolean enableNativeHeapZeroInit(ProcessRecord app) {
|
||||||
// Look at the process attribute first.
|
// Look at the process attribute first.
|
||||||
if (app.processInfo != null && app.processInfo.nativeHeapZeroInit != null) {
|
if (app.processInfo != null
|
||||||
return app.processInfo.nativeHeapZeroInit;
|
&& app.processInfo.nativeHeapZeroInitialized != ApplicationInfo.ZEROINIT_DEFAULT) {
|
||||||
|
return app.processInfo.nativeHeapZeroInitialized == ApplicationInfo.ZEROINIT_ENABLED;
|
||||||
}
|
}
|
||||||
// Then at the application attribute.
|
// Then at the application attribute.
|
||||||
if (app.info.isNativeHeapZeroInit() != null) {
|
if (app.info.getNativeHeapZeroInitialized() != ApplicationInfo.ZEROINIT_DEFAULT) {
|
||||||
return app.info.isNativeHeapZeroInit();
|
return app.info.getNativeHeapZeroInitialized() == ApplicationInfo.ZEROINIT_ENABLED;
|
||||||
}
|
}
|
||||||
// Compat feature last.
|
// Compat feature last.
|
||||||
if (mPlatformCompat.isChangeEnabled(NATIVE_HEAP_ZERO_INIT, app.info)) {
|
if (mPlatformCompat.isChangeEnabled(NATIVE_HEAP_ZERO_INIT, app.info)) {
|
||||||
|
|||||||
@@ -650,7 +650,7 @@ class ProcessRecord implements WindowProcessListener {
|
|||||||
if (procInfo != null && procInfo.deniedPermissions == null
|
if (procInfo != null && procInfo.deniedPermissions == null
|
||||||
&& procInfo.gwpAsanMode == ApplicationInfo.GWP_ASAN_DEFAULT
|
&& procInfo.gwpAsanMode == ApplicationInfo.GWP_ASAN_DEFAULT
|
||||||
&& procInfo.memtagMode == ApplicationInfo.MEMTAG_DEFAULT
|
&& procInfo.memtagMode == ApplicationInfo.MEMTAG_DEFAULT
|
||||||
&& procInfo.nativeHeapZeroInit == null) {
|
&& procInfo.nativeHeapZeroInitialized == ApplicationInfo.ZEROINIT_DEFAULT) {
|
||||||
// If this process hasn't asked for permissions to be denied, or for a
|
// If this process hasn't asked for permissions to be denied, or for a
|
||||||
// non-default GwpAsan mode, or any other non-default setting, then we don't
|
// non-default GwpAsan mode, or any other non-default setting, then we don't
|
||||||
// care about it.
|
// care about it.
|
||||||
|
|||||||
@@ -400,7 +400,7 @@ public class PackageInfoUtils {
|
|||||||
retProcs.put(proc.getName(),
|
retProcs.put(proc.getName(),
|
||||||
new ProcessInfo(proc.getName(), new ArraySet<>(proc.getDeniedPermissions()),
|
new ProcessInfo(proc.getName(), new ArraySet<>(proc.getDeniedPermissions()),
|
||||||
proc.getGwpAsanMode(), proc.getMemtagMode(),
|
proc.getGwpAsanMode(), proc.getMemtagMode(),
|
||||||
proc.getNativeHeapZeroInit()));
|
proc.getNativeHeapZeroInitialized()));
|
||||||
}
|
}
|
||||||
return retProcs;
|
return retProcs;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user