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

Commit acd05fa3 authored by Jerry Chang's avatar Jerry Chang
Browse files

Prevent system reset staged installer bypass flag unexpactly

Perform stage installer check and consume bypass flag only when it's
creating stage session and was not calling from system/shell.

Fix: 159412477
Fix: 159684099
Test: atest CtsStagedInstallHostTestCases
Change-Id: Ic5439ad57b3c475d36746b1b36a99618c5b09ad6
parent cdaa4f3c
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -589,13 +589,13 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
            }
        }

        if (params.isStaged && !isCalledBySystemOrShell(callingUid)) {
            if (mBypassNextStagedInstallerCheck) {
                mBypassNextStagedInstallerCheck = false;
        } else if (params.isStaged
                && !isCalledBySystemOrShell(callingUid)
                && !isWhitelistedStagedInstaller(requestedInstallerPackageName)) {
            } else if (!isStagedInstallerAllowed(requestedInstallerPackageName)) {
                throw new SecurityException("Installer not allowed to commit staged install");
            }
        }

        if (!params.isMultiPackage) {
            // Only system components can circumvent runtime permissions when installing.
@@ -725,7 +725,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
                || callingUid == Process.SHELL_UID;
    }

    private boolean isWhitelistedStagedInstaller(String installerName) {
    private boolean isStagedInstallerAllowed(String installerName) {
        return SystemConfig.getInstance().getWhitelistedStagedInstallers().contains(installerName);
    }