Fix logic error in downgrade of system apps
A logic error would allow not deleting data when uninstalling a system
app upgrade that's of a newer release than the on on the system
partition. If the system app had a database upgrade and this happened,
you might be in trouble.
Luckily it appears no one ever does this in code. You'd have to manually
get there doing:
adb uninstall -k updated.system.package
Change-Id: I3110fedf2d147975a0635c71898d985dd642a2c1
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index 387f458..1141fdce 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -6181,18 +6181,15 @@
}
// Delete the updated package
outInfo.isRemovedPackageSystemUpdate = true;
- boolean deleteCodeAndResources = false;
- if (ps.versionCode < p.mVersionCode) {
+ final boolean deleteCodeAndResources;
+ if (ps.versionCode < p.mVersionCode) {
// Delete code and resources for downgrades
deleteCodeAndResources = true;
- if ((flags & PackageManager.DONT_DELETE_DATA) == 0) {
- flags &= ~PackageManager.DONT_DELETE_DATA;
- }
+ flags &= ~PackageManager.DONT_DELETE_DATA;
} else {
// Preserve data by setting flag
- if ((flags & PackageManager.DONT_DELETE_DATA) == 0) {
- flags |= PackageManager.DONT_DELETE_DATA;
- }
+ deleteCodeAndResources = false;
+ flags |= PackageManager.DONT_DELETE_DATA;
}
boolean ret = deleteInstalledPackageLI(p, deleteCodeAndResources, flags, outInfo);
if (!ret) {