diff options
author | Christopher Tate <ctate@google.com> | 2013-10-04 19:40:09 -0700 |
---|---|---|
committer | Christopher Tate <ctate@google.com> | 2013-10-06 10:18:06 -0700 |
commit | 0fe85a9492b0800676ba38a76f29591ddd3fb777 (patch) | |
tree | c619f2e3425d1923a283e3fdef6bf8146073cff6 /services/java/com/android/server/pm | |
parent | fd65373dd7ba9e613f95dbf87988811c43a11518 (diff) | |
download | frameworks_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-x | services/java/com/android/server/pm/PackageManagerService.java | 18 |
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 |