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

Commit b2bee16b authored by Essence Cain's avatar Essence Cain
Browse files

Modify isEmergencyInstallEnabled() to check for priv-only permissions that...

Modify isEmergencyInstallEnabled() to check for priv-only permissions that allow apps to update themselves
and to verify for system apps before triggering an emergency install.

Bug: 321080601
Test: atest PackageManagerShellCommandInstallTest
Change-Id: I4ae8ece44af8c1672bdb81f4033abd0c890f6cf3
parent b58670e1
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -964,13 +964,22 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {

    private boolean isEmergencyInstallerEnabled(String packageName, Computer snapshot) {
        final PackageStateInternal ps = snapshot.getPackageStateInternal(packageName);
        if (ps == null || ps.getPkg() == null) {
        if (ps == null || ps.getPkg() == null || !ps.isSystem()) {
            return false;
        }
        int uid = UserHandle.getUid(userId, ps.getAppId());
        String emergencyInstaller = ps.getPkg().getEmergencyInstaller();
        if (emergencyInstaller == null || !ArrayUtils.contains(
                snapshot.getPackagesForUid(mInstallerUid),
                emergencyInstaller)) {
                snapshot.getPackagesForUid(mInstallerUid), emergencyInstaller)) {
            return false;
        }
        // Only system installers can have an emergency installer
        if (PackageManager.PERMISSION_GRANTED
                != snapshot.checkUidPermission(Manifest.permission.INSTALL_PACKAGES, uid)
                && PackageManager.PERMISSION_GRANTED
                != snapshot.checkUidPermission(Manifest.permission.INSTALL_PACKAGE_UPDATES, uid)
                && PackageManager.PERMISSION_GRANTED
                != snapshot.checkUidPermission(Manifest.permission.INSTALL_SELF_UPDATES, uid)) {
            return false;
        }
        return (snapshot.checkUidPermission(Manifest.permission.EMERGENCY_INSTALL_PACKAGES,