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

Commit 804a79e7 authored by Evgenii Stepanov's avatar Evgenii Stepanov Committed by Android (Google) Code Review
Browse files

Merge "Implement memtagMode and nativeHeapZeroInit manifest attrs." into sc-dev

parents c5de3da2 6415a150
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -964,6 +964,7 @@ package android {
    field public static final int measureWithLargestChild = 16843476; // 0x10102d4
    field public static final int mediaRouteButtonStyle = 16843693; // 0x10103ad
    field public static final int mediaRouteTypes = 16843694; // 0x10103ae
    field public static final int memtagMode = 16844324; // 0x1010624
    field public static final int menuCategory = 16843230; // 0x10101de
    field public static final int mimeGroup = 16844309; // 0x1010615
    field public static final int mimeType = 16842790; // 0x1010026
@@ -987,6 +988,7 @@ package android {
    field public static final int multiArch = 16843918; // 0x101048e
    field public static final int multiprocess = 16842771; // 0x1010013
    field public static final int name = 16842755; // 0x1010003
    field public static final int nativeHeapZeroInit = 16844325; // 0x1010625
    field public static final int navigationBarColor = 16843858; // 0x1010452
    field public static final int navigationBarDividerColor = 16844141; // 0x101056d
    field public static final int navigationContentDescription = 16843969; // 0x10104c1
@@ -11641,6 +11643,8 @@ package android.content.pm {
    method public void dump(android.util.Printer, String);
    method public static CharSequence getCategoryTitle(android.content.Context, int);
    method public int getGwpAsanMode();
    method public int getMemtagMode();
    method @Nullable public Boolean isNativeHeapZeroInit();
    method public boolean isProfileableByShell();
    method public boolean isResourceOverlay();
    method public boolean isVirtualPreload();
@@ -11690,6 +11694,10 @@ package android.content.pm {
    field public static final int GWP_ASAN_ALWAYS = 1; // 0x1
    field public static final int GWP_ASAN_DEFAULT = -1; // 0xffffffff
    field public static final int GWP_ASAN_NEVER = 0; // 0x0
    field public static final int MEMTAG_ASYNC = 1; // 0x1
    field public static final int MEMTAG_DEFAULT = -1; // 0xffffffff
    field public static final int MEMTAG_OFF = 0; // 0x0
    field public static final int MEMTAG_SYNC = 2; // 0x2
    field public String appComponentFactory;
    field public String backupAgentName;
    field public int category;
+73 −0
Original line number Diff line number Diff line
@@ -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 
@@ -1335,6 +1339,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.
@@ -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; }
}
+39 −5
Original line number Diff line number Diff line
@@ -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() {}

+4 −0
Original line number Diff line number Diff line
@@ -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);
+34 −0
Original line number Diff line number Diff line
@@ -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();
    }

@@ -2061,6 +2072,17 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
        return gwpAsanMode;
    }

    @Override
    public int getMemtagMode() {
        return memtagMode;
    }

    @Nullable
    @Override
    public Boolean isNativeHeapZeroInit() {
        return nativeHeapZeroInit;
    }

    @Override
    public boolean isPartiallyDirectBootAware() {
        return getBoolean(Booleans.PARTIALLY_DIRECT_BOOT_AWARE);
@@ -2492,6 +2514,18 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
        return this;
    }

    @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);
Loading