mirror of
https://github.com/Divested-Mobile/DivestOS-Build.git
synced 2024-12-14 10:24:32 -05:00
86 lines
5.0 KiB
Diff
86 lines
5.0 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
From: Songchun Fan <schfan@google.com>
|
||
|
Date: Thu, 26 Jan 2023 17:43:24 -0800
|
||
|
Subject: [PATCH] prevent system app downgrades of versions lower than preload
|
||
|
|
||
|
Also remove misleading commandline output.
|
||
|
|
||
|
BUG: 256202273
|
||
|
|
||
|
Test: manual
|
||
|
1. Install preload system app v90, reboot
|
||
|
2. (W/O data, W/ Flag, 90->80 NOK) adb install -d ~/Downloads/PrivApplication_80.apk
|
||
|
Performing Streamed Install
|
||
|
adb: failed to install /usr/local/google/home/schfan/Downloads/PrivApplication_80.apk: Failure [INSTALL_FAILED_VERSION_DOWNGRADE: System app: com.example.privapplication cannot be downgraded to older than its preloaded version on the system image. Update version code 80 is older than current 90]
|
||
|
3. (90->100) Install data app v100
|
||
|
4. (W/ data, W/O Flag, 100->90 NOK) adb install ~/Downloads/PrivApplication_90.apk
|
||
|
Performing Streamed Install
|
||
|
adb: failed to install /usr/local/google/home/schfan/Downloads/PrivApplication_90.apk: Failure [INSTALL_FAILED_VERSION_DOWNGRADE: Downgrade detected: Update version code 90 is older than current 100]
|
||
|
5. (W/ data, W/ Flag, 100->90 downgrade OK) adb install -d ~/Downloads/PrivApplication_90.apk
|
||
|
Performing Streamed Install
|
||
|
Success
|
||
|
6. (90->100) Install v100
|
||
|
6. (W/data, W/ Flag, 100->80 NOK) adb install -d ~/Downloads/PrivApplication_80.apk
|
||
|
Performing Streamed Install
|
||
|
adb: failed to install /usr/local/google/home/schfan/Downloads/PrivApplication_80.apk: Failure [INSTALL_FAILED_VERSION_DOWNGRADE: System app: com.example.privapplication cannot be downgraded to older than its preloaded version on the system image. Update version code 80 is older than current 90]
|
||
|
|
||
|
Change-Id: I5a8ee9e29a3a58f6e3fd188e0122355744b8b0ce
|
||
|
(cherry picked from commit a4484d7f1be1fa413258fe18644d61f85611f586)
|
||
|
(cherry picked from commit on googleplex-android-review.googlesource.com host: aec76152d65cfd5774f6c0dcf4cb6009ba48c1ee)
|
||
|
Merged-In: I5a8ee9e29a3a58f6e3fd188e0122355744b8b0ce
|
||
|
---
|
||
|
.../server/pm/PackageManagerService.java | 26 ++++++++++++++++---
|
||
|
1 file changed, 23 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
|
||
|
index ef97d61d26d7..37b85cf4fe79 100644
|
||
|
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
|
||
|
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
|
||
|
@@ -15281,10 +15281,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.
|
||
|
PackageParser.Package dataOwnerPkg = installedPkg;
|
||
|
+ PackageSetting dataOwnerPs = mSettings.mPackages.get(packageName);
|
||
|
if (dataOwnerPkg == null) {
|
||
|
- PackageSetting ps = mSettings.mPackages.get(packageName);
|
||
|
- if (ps != null) {
|
||
|
- dataOwnerPkg = ps.pkg;
|
||
|
+ if (dataOwnerPs != null) {
|
||
|
+ dataOwnerPkg = dataOwnerPs.pkg;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@@ -15308,12 +15308,32 @@ public class PackageManagerService extends IPackageManager.Stub
|
||
|
if (dataOwnerPkg != null) {
|
||
|
if (!PackageManagerServiceUtils.isDowngradePermitted(installFlags,
|
||
|
dataOwnerPkg.applicationInfo.flags)) {
|
||
|
+ // 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 PackageHelper.RECOMMEND_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.pkg;
|
||
|
+ }
|
||
|
+ 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 PackageHelper.RECOMMEND_FAILED_VERSION_DOWNGRADE;
|
||
|
+ }
|
||
|
}
|
||
|
}
|
||
|
|