summaryrefslogtreecommitdiff
path: root/services/java/com/android/server/pm
diff options
context:
space:
mode:
authorChristopher Tate <ctate@google.com>2013-10-22 16:45:51 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-10-22 16:45:51 -0700
commit037fa2489ff4d8646e4df67950fc93a80345d879 (patch)
treea802099ac0287a6c75cf3bc34eae59064ac37e11 /services/java/com/android/server/pm
parent004aa0714a1dbad33ee11c210edf7371e424b26b (diff)
parentd34e1155226e8885d51c05209c7c87503528a2db (diff)
am d34e1155: am 5f474fcb: Merge "Edge case: overriden system package moved & became privileged in OTA" into klp-dev
* commit 'd34e1155226e8885d51c05209c7c87503528a2db': Edge case: overriden system package moved & became privileged in OTA
Diffstat (limited to 'services/java/com/android/server/pm')
-rwxr-xr-xservices/java/com/android/server/pm/PackageManagerService.java8
-rw-r--r--services/java/com/android/server/pm/Settings.java12
2 files changed, 13 insertions, 7 deletions
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index fb533c65ce20..ca91fe617b56 100755
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -3585,7 +3585,13 @@ public class PackageManagerService extends IPackageManager.Stub {
+ ps.name + " changing from " + updatedPkg.codePathString
+ " to " + scanFile);
updatedPkg.codePath = scanFile;
- updatedPkg.codePathString = scanFile.toString();
+ updatedPkg.codePathString = scanFile.toString();
+ // This is the point at which we know that the system-disk APK
+ // for this package has moved during a reboot (e.g. due to an OTA),
+ // so we need to reevaluate it for privilege policy.
+ if (locationIsPrivileged(scanFile)) {
+ updatedPkg.pkgFlags |= ApplicationInfo.FLAG_PRIVILEGED;
+ }
}
updatedPkg.pkg = pkg;
mLastScanError = PackageManager.INSTALL_FAILED_DUPLICATE_PACKAGE;
diff --git a/services/java/com/android/server/pm/Settings.java b/services/java/com/android/server/pm/Settings.java
index 42d615d0be20..43d966b79fcb 100644
--- a/services/java/com/android/server/pm/Settings.java
+++ b/services/java/com/android/server/pm/Settings.java
@@ -426,12 +426,12 @@ final class Settings {
+ "; replacing with new");
p = null;
} else {
- if ((pkgFlags&ApplicationInfo.FLAG_SYSTEM) != 0) {
- // If what we are scanning is a system package, then
- // make it so, regardless of whether it was previously
- // installed only in the data partition.
- p.pkgFlags |= ApplicationInfo.FLAG_SYSTEM;
- }
+ // If what we are scanning is a system (and possibly privileged) package,
+ // then make it so, regardless of whether it was previously installed only
+ // in the data partition.
+ final int sysPrivFlags = pkgFlags
+ & (ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_PRIVILEGED);
+ p.pkgFlags |= sysPrivFlags;
}
}
if (p == null) {