summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server/pm
diff options
context:
space:
mode:
authorChristopher Tate <ctate@google.com>2013-10-04 19:40:09 -0700
committerChristopher Tate <ctate@google.com>2013-10-06 10:18:06 -0700
commit0fe85a9492b0800676ba38a76f29591ddd3fb777 (patch)
treec619f2e3425d1923a283e3fdef6bf8146073cff6 /services/java/com/android/server/pm
parentfd65373dd7ba9e613f95dbf87988811c43a11518 (diff)
downloadframeworks_base-0fe85a9492b0800676ba38a76f29591ddd3fb777.zip
frameworks_base-0fe85a9492b0800676ba38a76f29591ddd3fb777.tar.gz
frameworks_base-0fe85a9492b0800676ba38a76f29591ddd3fb777.tar.bz2
Make sure to maintain privilege when downgrading bundled apps
When reparsing because the data-volume update has been removed, be sure to apply privilege when the bundled fallback APK should be allowed it. Bug 10958159 Change-Id: Ibad52a5644606b27f4ebc5d5d7c1a671283b0752
Diffstat (limited to 'services/java/com/android/server/pm')
-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 f093f2b..1c54245 100755
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -9120,6 +9120,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.
*/
@@ -9175,9 +9186,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