Merge "[RESTRICT AUTOMERGE][pm] prevent system app downgrades of versions lower than preload" into sc-v2-dev

This commit is contained in:
Song Chun Fan
2023-02-01 21:33:45 +00:00
committed by Android (Google) Code Review

View File

@@ -26844,10 +26844,10 @@ public class PackageManagerService extends IPackageManager.Stub
// will be null whereas dataOwnerPkg will contain information about the package // will be null whereas dataOwnerPkg will contain information about the package
// which was uninstalled while keeping its data. // which was uninstalled while keeping its data.
AndroidPackage dataOwnerPkg = mPackages.get(packageName); AndroidPackage dataOwnerPkg = mPackages.get(packageName);
PackageSetting dataOwnerPs = mSettings.getPackageLPr(packageName);
if (dataOwnerPkg == null) { if (dataOwnerPkg == null) {
PackageSetting ps = mSettings.getPackageLPr(packageName); if (dataOwnerPs != null) {
if (ps != null) { dataOwnerPkg = dataOwnerPs.getPkg();
dataOwnerPkg = ps.pkg;
} }
} }
@@ -26871,12 +26871,30 @@ public class PackageManagerService extends IPackageManager.Stub
if (dataOwnerPkg != null) { if (dataOwnerPkg != null) {
if (!PackageManagerServiceUtils.isDowngradePermitted(installFlags, if (!PackageManagerServiceUtils.isDowngradePermitted(installFlags,
dataOwnerPkg.isDebuggable())) { dataOwnerPkg.isDebuggable())) {
// Downgrade is not permitted; a lower version of the app will not be allowed
try { try {
checkDowngrade(dataOwnerPkg, pkgLite); checkDowngrade(dataOwnerPkg, pkgLite);
} catch (PackageManagerException e) { } catch (PackageManagerException e) {
Slog.w(TAG, "Downgrade detected: " + e.getMessage()); Slog.w(TAG, "Downgrade detected: " + e.getMessage());
return PackageManager.INSTALL_FAILED_VERSION_DOWNGRADE; 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;
}
} }
} }
} }