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

Commit b4efb7b3 authored by Songchun Fan's avatar Songchun Fan Committed by Automerger Merge Worker
Browse files

[RESTRICT AUTOMERGE][pm] prevent system app downgrades of versions lower than...

[RESTRICT AUTOMERGE][pm] prevent system app downgrades of versions lower than preload am: d7c72817

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21159680



Change-Id: I69ea588e52956b1e08f5549000eb2b1907268ab6
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 7053ca07 d7c72817
Loading
Loading
Loading
Loading
+22 −3
Original line number Diff line number Diff line
@@ -2425,10 +2425,10 @@ final class InstallPackageHelper {
            // will be null whereas dataOwnerPkg will contain information about the package
            // which was uninstalled while keeping its data.
            AndroidPackage dataOwnerPkg = mPm.mPackages.get(packageName);
            PackageSetting dataOwnerPs = mPm.mSettings.getPackageLPr(packageName);
            if (dataOwnerPkg  == null) {
                PackageSetting ps = mPm.mSettings.getPackageLPr(packageName);
                if (ps != null) {
                    dataOwnerPkg = ps.getPkg();
                if (dataOwnerPs != null) {
                    dataOwnerPkg = dataOwnerPs.getPkg();
                }
            }

@@ -2456,6 +2456,7 @@ final class InstallPackageHelper {
            if (dataOwnerPkg != null && !dataOwnerPkg.isSdkLibrary()) {
                if (!PackageManagerServiceUtils.isDowngradePermitted(installFlags,
                        dataOwnerPkg.isDebuggable())) {
                    // Downgrade is not permitted; a lower version of the app will not be allowed
                    try {
                        PackageManagerServiceUtils.checkDowngrade(dataOwnerPkg, pkgLite);
                    } catch (PackageManagerException e) {
@@ -2464,6 +2465,24 @@ final class InstallPackageHelper {
                        return Pair.create(
                                PackageManager.INSTALL_FAILED_VERSION_DOWNGRADE, errorMsg);
                    }
                } else if (dataOwnerPs.isSystem()) {
                    // Downgrade is permitted, but system apps can't be downgraded below
                    // the version preloaded onto the system image
                    final PackageSetting disabledPs = mPm.mSettings.getDisabledSystemPkgLPr(
                            dataOwnerPs);
                    if (disabledPs != null) {
                        dataOwnerPkg = disabledPs.getPkg();
                    }
                    try {
                        PackageManagerServiceUtils.checkDowngrade(dataOwnerPkg, pkgLite);
                    } catch (PackageManagerException e) {
                        String errorMsg = "System app: " + packageName + " cannot be downgraded to"
                                + " older than its preloaded version on the system image. "
                                + e.getMessage();
                        Slog.w(TAG, errorMsg);
                        return Pair.create(
                                PackageManager.INSTALL_FAILED_VERSION_DOWNGRADE, errorMsg);
                    }
                }
            }
        }