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

Commit 6dd6c5a6 authored by Aurimas Liutikas's avatar Aurimas Liutikas Committed by Gerrit Code Review
Browse files

Merge "Cleanup nativeHeapZeroInit and memtagMode implementation."

parents afbb23d1 487d3f6e
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -978,7 +978,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 = 16844314; // 0x101061a
    field public static final int nativeHeapZeroInitialized = 16844314; // 0x101061a
    field public static final int navigationBarColor = 16843858; // 0x1010452
    field public static final int navigationBarDividerColor = 16844141; // 0x101056d
    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 int getGwpAsanMode();
    method public int getMemtagMode();
    method @Nullable public Boolean isNativeHeapZeroInit();
    method public int getNativeHeapZeroInitialized();
    method public boolean isProfileableByShell();
    method public boolean isResourceOverlay();
    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_OFF = 0; // 0x0
    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 backupAgentName;
    field public int category;
+57 −15
Original line number Diff line number Diff line
@@ -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
     * unspecified. Processes can override this setting.
     */
    private @GwpAsanMode int gwpAsanMode;
    private @GwpAsanMode int gwpAsanMode = GWP_ASAN_DEFAULT;

    /**
     * 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
     * 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.
     */
    @Nullable
    private Boolean nativeHeapZeroInit;
    private @NativeHeapZeroInitialized int nativeHeapZeroInitialized = ZEROINIT_DEFAULT;

    /**
     * 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) {
                pw.println(prefix + "memtagMode=" + memtagMode);
            }
            if (nativeHeapZeroInit != null) {
                pw.println(prefix + "nativeHeapZeroInit=" + nativeHeapZeroInit);
            if (nativeHeapZeroInitialized != ZEROINIT_DEFAULT) {
                pw.println(prefix + "nativeHeapZeroInitialized=" + nativeHeapZeroInitialized);
            }
        }
        super.dumpBack(pw, prefix);
@@ -1638,8 +1663,9 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
            if (memtagMode != MEMTAG_DEFAULT) {
                proto.write(ApplicationInfoProto.Detail.ENABLE_MEMTAG, memtagMode);
            }
            if (nativeHeapZeroInit != null) {
                proto.write(ApplicationInfoProto.Detail.NATIVE_HEAP_ZERO_INIT, nativeHeapZeroInit);
            if (nativeHeapZeroInitialized != ZEROINIT_DEFAULT) {
                proto.write(ApplicationInfoProto.Detail.NATIVE_HEAP_ZERO_INIT,
                        nativeHeapZeroInitialized);
            }
            proto.end(detailToken);
        }
@@ -1752,7 +1778,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
        zygotePreloadName = orig.zygotePreloadName;
        gwpAsanMode = orig.gwpAsanMode;
        memtagMode = orig.memtagMode;
        nativeHeapZeroInit = orig.nativeHeapZeroInit;
        nativeHeapZeroInitialized = orig.nativeHeapZeroInitialized;
    }

    public String toString() {
@@ -1838,7 +1864,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
        dest.writeString8(zygotePreloadName);
        dest.writeInt(gwpAsanMode);
        dest.writeInt(memtagMode);
        sForBoolean.parcel(nativeHeapZeroInit, dest, parcelableFlags);
        dest.writeInt(nativeHeapZeroInitialized);
    }

    public static final @android.annotation.NonNull Parcelable.Creator<ApplicationInfo> CREATOR
@@ -1921,7 +1947,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
        zygotePreloadName = source.readString8();
        gwpAsanMode = 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 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} */ public void setNativeHeapZeroInitialized(@NativeHeapZeroInitialized int value) {
        nativeHeapZeroInitialized = value;
    }

    /** {@hide} */
    @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; }
    @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
    public int getMemtagMode() { return memtagMode; }
    @Nullable
    public Boolean isNativeHeapZeroInit() { return nativeHeapZeroInit; }
    public int getMemtagMode() {
        return memtagMode;
    }

    /**
     * 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;
    }
}
+14 −12
Original line number Diff line number Diff line
@@ -62,8 +62,7 @@ public class ProcessInfo implements Parcelable {
    /**
     * Enable automatic zero-initialization of native heap memory allocations.
     */
    @Nullable
    public Boolean nativeHeapZeroInit;
    public @ApplicationInfo.NativeHeapZeroInitialized int nativeHeapZeroInitialized;

    @Deprecated
    public ProcessInfo(@NonNull ProcessInfo orig) {
@@ -71,7 +70,7 @@ public class ProcessInfo implements Parcelable {
        this.deniedPermissions = orig.deniedPermissions;
        this.gwpAsanMode = orig.gwpAsanMode;
        this.memtagMode = orig.memtagMode;
        this.nativeHeapZeroInit = orig.nativeHeapZeroInit;
        this.nativeHeapZeroInitialized = orig.nativeHeapZeroInitialized;
    }


@@ -101,7 +100,7 @@ public class ProcessInfo implements Parcelable {
     * @param memtagMode
     *   Indicates if the process has requested Memtag to be enabled (in sync or async mode),
     *   disabled, or left unspecified.
     * @param nativeHeapZeroInit
     * @param nativeHeapZeroInitialized
     *   Enable automatic zero-initialization of native heap memory allocations.
     */
    @DataClass.Generated.Member
@@ -110,7 +109,7 @@ public class ProcessInfo implements Parcelable {
            @Nullable ArraySet<String> deniedPermissions,
            @ApplicationInfo.GwpAsanMode int gwpAsanMode,
            @ApplicationInfo.MemtagMode int memtagMode,
            @Nullable Boolean nativeHeapZeroInit) {
            @ApplicationInfo.NativeHeapZeroInitialized int nativeHeapZeroInitialized) {
        this.name = name;
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, name);
@@ -121,7 +120,9 @@ public class ProcessInfo implements Parcelable {
        this.memtagMode = memtagMode;
        com.android.internal.util.AnnotationValidations.validate(
                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
    }
@@ -145,13 +146,12 @@ 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);
        dest.writeInt(nativeHeapZeroInitialized);
    }

    @Override
@@ -170,7 +170,7 @@ public class ProcessInfo implements Parcelable {
        ArraySet<String> _deniedPermissions = sParcellingForDeniedPermissions.unparcel(in);
        int _gwpAsanMode = in.readInt();
        int _memtagMode = in.readInt();
        Boolean _nativeHeapZeroInit = (flg & 0x10) == 0 ? null : (Boolean) in.readBoolean();
        int _nativeHeapZeroInitialized = in.readInt();

        this.name = _name;
        com.android.internal.util.AnnotationValidations.validate(
@@ -182,7 +182,9 @@ public class ProcessInfo implements Parcelable {
        this.memtagMode = _memtagMode;
        com.android.internal.util.AnnotationValidations.validate(
                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
    }
@@ -202,10 +204,10 @@ public class ProcessInfo implements Parcelable {
    };

    @DataClass.Generated(
            time = 1611614699049L,
            time = 1615850184524L,
            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\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
    private void __metadata() {}

+5 −3
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.content.pm.parsing;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.ConfigurationInfo;
import android.content.pm.FeatureGroupInfo;
import android.content.pm.FeatureInfo;
@@ -239,11 +240,12 @@ public interface ParsingPackage extends ParsingPackageRead {

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

+20 −15
Original line number Diff line number Diff line
@@ -417,12 +417,14 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
    private int autoRevokePermissions;
    private boolean preserveLegacyExternalStorage;

    protected int gwpAsanMode;
    protected int memtagMode;
    @ApplicationInfo.GwpAsanMode
    private int gwpAsanMode;

    @Nullable
    @DataClass.ParcelWith(ForBoolean.class)
    private Boolean nativeHeapZeroInit;
    @ApplicationInfo.MemtagMode
    private int memtagMode;

    @ApplicationInfo.NativeHeapZeroInitialized
    private int nativeHeapZeroInitialized;

    // TODO(chiuwinson): Non-null
    @Nullable
@@ -934,7 +936,7 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
        appInfo.crossProfile = isCrossProfile();
        appInfo.setGwpAsanMode(gwpAsanMode);
        appInfo.setMemtagMode(memtagMode);
        appInfo.setNativeHeapZeroInit(nativeHeapZeroInit);
        appInfo.setNativeHeapZeroInitialized(nativeHeapZeroInitialized);
        appInfo.setBaseCodePath(baseCodePath);
        appInfo.setBaseResourcePath(baseCodePath);
        appInfo.setCodePath(codePath);
@@ -1121,7 +1123,7 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
        dest.writeInt(this.gwpAsanMode);
        dest.writeSparseIntArray(this.minExtensionVersions);
        dest.writeInt(this.memtagMode);
        sForBoolean.parcel(this.nativeHeapZeroInit, dest, flags);
        dest.writeInt(this.nativeHeapZeroInitialized);
    }

    public ParsingPackageImpl(Parcel in) {
@@ -1284,7 +1286,7 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
        this.gwpAsanMode = in.readInt();
        this.minExtensionVersions = in.readSparseIntArray();
        this.memtagMode = in.readInt();
        this.nativeHeapZeroInit = sForBoolean.unparcel(in);
        this.nativeHeapZeroInitialized = in.readInt();
    }

    public static final Parcelable.Creator<ParsingPackageImpl> CREATOR =
@@ -2012,20 +2014,22 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
        return directBootAware;
    }

    @ApplicationInfo.GwpAsanMode
    @Override
    public int getGwpAsanMode() {
        return gwpAsanMode;
    }

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

    @Nullable
    @ApplicationInfo.NativeHeapZeroInitialized
    @Override
    public Boolean isNativeHeapZeroInit() {
        return nativeHeapZeroInit;
    public int getNativeHeapZeroInitialized() {
        return nativeHeapZeroInitialized;
    }

    @Override
@@ -2495,20 +2499,21 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
    }

    @Override
    public ParsingPackageImpl setGwpAsanMode(int value) {
    public ParsingPackageImpl setGwpAsanMode(@ApplicationInfo.GwpAsanMode int value) {
        gwpAsanMode = value;
        return this;
    }

    @Override
    public ParsingPackageImpl setMemtagMode(int value) {
    public ParsingPackageImpl setMemtagMode(@ApplicationInfo.MemtagMode int value) {
        memtagMode = value;
        return this;
    }

    @Override
    public ParsingPackageImpl setNativeHeapZeroInit(@Nullable Boolean value) {
        nativeHeapZeroInit = value;
    public ParsingPackageImpl setNativeHeapZeroInitialized(
            @ApplicationInfo.NativeHeapZeroInitialized int value) {
        nativeHeapZeroInitialized = value;
        return this;
    }

Loading