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

Commit adcb5222 authored by Chad Brubaker's avatar Chad Brubaker
Browse files

Add update packages permission

This subset of INSTALL_PACKAGES allows a privileged application to
install updates to existing applications but not install new
applications.

When combined with INSTALL_SELF_UPDATES this allows privileged apps to
be granted finely scoped install privileges based on their intended
usage instead of the more broad INSTALL_PACKAGES permission.

Test: WIP
Bug: 68731532
Change-Id: Ifbb6f5a18d9e8ff06270fd79ed031b99242c6fa3
parent 5fd1c97e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -73,6 +73,7 @@ package android {
    field public static final java.lang.String INSTALL_GRANT_RUNTIME_PERMISSIONS = "android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS";
    field public static final java.lang.String INSTALL_LOCATION_PROVIDER = "android.permission.INSTALL_LOCATION_PROVIDER";
    field public static final java.lang.String INSTALL_PACKAGES = "android.permission.INSTALL_PACKAGES";
    field public static final java.lang.String INSTALL_PACKAGE_UPDATES = "android.permission.INSTALL_PACKAGE_UPDATES";
    field public static final java.lang.String INSTALL_SELF_UPDATES = "android.permission.INSTALL_SELF_UPDATES";
    field public static final java.lang.String INTENT_FILTER_VERIFICATION_AGENT = "android.permission.INTENT_FILTER_VERIFICATION_AGENT";
    field public static final java.lang.String INTERACT_ACROSS_USERS = "android.permission.INTERACT_ACROSS_USERS";
+8 −0
Original line number Diff line number Diff line
@@ -2813,6 +2813,14 @@
    <permission android:name="android.permission.INSTALL_SELF_UPDATES"
        android:protectionLevel="signature|privileged" />

    <!-- @SystemApi Allows an application to install updates. This is a limited version
         of {@link android.Manifest.permission#INSTALL_PACKAGES}.
        <p>Not for use by third-party applications.
        @hide
    -->
    <permission android:name="android.permission.INSTALL_PACKAGE_UPDATES"
        android:protectionLevel="signature|privileged" />

    <!-- @SystemApi Allows an application to clear user data.
         <p>Not for use by third-party applications
         @hide
+6 −2
Original line number Diff line number Diff line
@@ -340,9 +340,13 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
        final boolean isSelfUpdatePermissionGranted =
                (mPm.checkUidPermission(android.Manifest.permission.INSTALL_SELF_UPDATES,
                        mInstallerUid) == PackageManager.PERMISSION_GRANTED);
        final boolean isUpdatePermissionGranted =
                (mPm.checkUidPermission(android.Manifest.permission.INSTALL_PACKAGE_UPDATES,
                        mInstallerUid) == PackageManager.PERMISSION_GRANTED);
        final int targetPackageUid = mPm.getPackageUid(mPackageName, 0, userId);
        final boolean isPermissionGranted = isInstallPermissionGranted
                || (isSelfUpdatePermissionGranted
                    && mPm.getPackageUid(mPackageName, 0, userId) == mInstallerUid);
                || (isUpdatePermissionGranted && targetPackageUid != -1)
                || (isSelfUpdatePermissionGranted && targetPackageUid == mInstallerUid);
        final boolean isInstallerRoot = (mInstallerUid == Process.ROOT_UID);
        final boolean isInstallerSystem = (mInstallerUid == Process.SYSTEM_UID);
        final boolean forcePermissionPrompt =