summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Christopher Tate <ctate@google.com> 2013-10-06 21:26:19 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2013-10-06 21:26:19 +0000
commiteb09f9903807208d651a6cae38b9c9bc03984556 (patch)
tree3d9df526b61c758f8448ae7e763d4ac644ff5493
parent4bc5909a035b8b92be051762db2ee97cf55ea861 (diff)
parent0fe85a9492b0800676ba38a76f29591ddd3fb777 (diff)
Merge "Make sure to maintain privilege when downgrading bundled apps" into klp-dev
-rwxr-xr-xservices/java/com/android/server/pm/PackageManagerService.java18
1 files changed, 16 insertions, 2 deletions
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index d239be7574be..e84f90ec4b5c 100755
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -9147,6 +9147,17 @@ public class PackageManagerService extends IPackageManager.Stub {
}
}
+ boolean locationIsPrivileged(File path) {
+ try {
+ final String privilegedAppDir = new File(Environment.getRootDirectory(), "priv-app")
+ .getCanonicalPath();
+ return path.getCanonicalPath().startsWith(privilegedAppDir);
+ } catch (IOException e) {
+ Slog.e(TAG, "Unable to access code path " + path);
+ }
+ return false;
+ }
+
/*
* Tries to delete system package.
*/
@@ -9202,9 +9213,12 @@ public class PackageManagerService extends IPackageManager.Stub {
}
// Install the system package
if (DEBUG_REMOVE) Slog.d(TAG, "Re-installing system package: " + disabledPs);
+ int parseFlags = PackageParser.PARSE_MUST_BE_APK | PackageParser.PARSE_IS_SYSTEM;
+ if (locationIsPrivileged(disabledPs.codePath)) {
+ parseFlags |= PackageParser.PARSE_IS_PRIVILEGED;
+ }
PackageParser.Package newPkg = scanPackageLI(disabledPs.codePath,
- PackageParser.PARSE_MUST_BE_APK | PackageParser.PARSE_IS_SYSTEM,
- SCAN_MONITOR | SCAN_NO_PATHS, 0, null);
+ parseFlags, SCAN_MONITOR | SCAN_NO_PATHS, 0, null);
if (newPkg == null) {
Slog.w(TAG, "Failed to restore system package:" + newPs.name