summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author dcashman <dcashman@google.com> 2015-06-08 18:20:35 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2015-06-08 18:20:47 +0000
commitb5766468538de200d26012d96019db26bccac5d4 (patch)
tree58ea5f78d0f601224046fde796b7f0502a0b5054
parent266894644a160a93949cb82f5f969bef4ad91532 (diff)
parentf61ae2de25a2dd09024bf5a8462b4408203c928b (diff)
Merge "Add SYSTEM_DIR check to upgrade-key-set verification." into mnc-dev
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java13
1 files changed, 10 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 939bb1a7d66d..604ac97838e2 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -6166,9 +6166,16 @@ public class PackageManagerService extends IPackageManager.Stub {
}
} else {
if (!checkUpgradeKeySetLP(pkgSetting, pkg)) {
- throw new PackageManagerException(INSTALL_FAILED_UPDATE_INCOMPATIBLE, "Package "
- + pkg.packageName + " upgrade keys do not match the "
- + "previously installed version");
+ if ((parseFlags & PackageParser.PARSE_IS_SYSTEM_DIR) == 0) {
+ throw new PackageManagerException(INSTALL_FAILED_UPDATE_INCOMPATIBLE,
+ "Package " + pkg.packageName + " upgrade keys do not match the "
+ + "previously installed version");
+ } else {
+ pkgSetting.signatures.mSignatures = pkg.mSignatures;
+ String msg = "System package " + pkg.packageName
+ + " signature changed; retaining data.";
+ reportSettingsProblem(Log.WARN, msg);
+ }
} else {
// We just determined the app is signed correctly, so bring
// over the latest parsed certs.