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

Commit f47417fc authored by Song Chun Fan's avatar Song Chun Fan Committed by Android (Google) Code Review
Browse files

Merge "[RESTRICT AUTOMERGE][pm] prevent system app downgrades of versions...

Merge "[RESTRICT AUTOMERGE][pm] prevent system app downgrades of versions lower than preload" into sc-dev
parents 3f7bf47d cc9d3867
Loading
Loading
Loading
Loading
+21 −3
Original line number Diff line number Diff line
@@ -26715,10 +26715,10 @@ public class PackageManagerService extends IPackageManager.Stub
            // will be null whereas dataOwnerPkg will contain information about the package
            // which was uninstalled while keeping its data.
            AndroidPackage dataOwnerPkg = mPackages.get(packageName);
            PackageSetting dataOwnerPs = mSettings.getPackageLPr(packageName);
            if (dataOwnerPkg  == null) {
                PackageSetting ps = mSettings.getPackageLPr(packageName);
                if (ps != null) {
                    dataOwnerPkg = ps.pkg;
                if (dataOwnerPs != null) {
                    dataOwnerPkg = dataOwnerPs.getPkg();
                }
            }
@@ -26742,12 +26742,30 @@ public class PackageManagerService extends IPackageManager.Stub
            if (dataOwnerPkg != null) {
                if (!PackageManagerServiceUtils.isDowngradePermitted(installFlags,
                        dataOwnerPkg.isDebuggable())) {
                    // Downgrade is not permitted; a lower version of the app will not be allowed
                    try {
                        checkDowngrade(dataOwnerPkg, pkgLite);
                    } catch (PackageManagerException e) {
                        Slog.w(TAG, "Downgrade detected: " + e.getMessage());
                        return PackageManager.INSTALL_FAILED_VERSION_DOWNGRADE;
                    }
                } 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 = mSettings.getDisabledSystemPkgLPr(
                            dataOwnerPs);
                    if (disabledPs != null) {
                        dataOwnerPkg = disabledPs.getPkg();
                    }
                    try {
                        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 PackageManager.INSTALL_FAILED_VERSION_DOWNGRADE;
                    }
                }
            }
        }