summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Christopher Tate <ctate@google.com> 2013-09-13 16:58:36 -0700
committer Christopher Tate <ctate@google.com> 2013-09-13 16:58:36 -0700
commit86b391cd03ba2c3e71e78ce2ccf8dd073ac409cf (patch)
tree50432a84f4bdefb1b3222ec3d87b8d5d782009c8
parent7770dcc3d351a494d0f5fe44feb776cc512e9b18 (diff)
Prune shared users that the system declares but does not use
Bug 10184643 Change-Id: I72c5177c621c24fac34bf8744eb6c5108b6d3464
-rwxr-xr-xservices/java/com/android/server/pm/PackageManagerService.java3
-rw-r--r--services/java/com/android/server/pm/Settings.java13
2 files changed, 16 insertions, 0 deletions
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index 39fc4ad3ba37..7cc568e25d99 100755
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -1349,6 +1349,9 @@ public class PackageManagerService extends IPackageManager.Stub {
//delete tmp files
deleteTempPackageFiles();
+ // Remove any shared userIDs that have no associated packages
+ mSettings.pruneSharedUsersLPw();
+
if (!mOnlyCore) {
EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_DATA_SCAN_START,
SystemClock.uptimeMillis());
diff --git a/services/java/com/android/server/pm/Settings.java b/services/java/com/android/server/pm/Settings.java
index 92026b2bb6ba..8e0c92a2084f 100644
--- a/services/java/com/android/server/pm/Settings.java
+++ b/services/java/com/android/server/pm/Settings.java
@@ -351,6 +351,19 @@ final class Settings {
return null;
}
+ void pruneSharedUsersLPw() {
+ ArrayList<String> removeStage = new ArrayList<String>();
+ for (Map.Entry<String,SharedUserSetting> entry : mSharedUsers.entrySet()) {
+ final SharedUserSetting sus = entry.getValue();
+ if (sus == null || sus.packages.size() == 0) {
+ removeStage.add(entry.getKey());
+ }
+ }
+ for (int i = 0; i < removeStage.size(); i++) {
+ mSharedUsers.remove(removeStage.get(i));
+ }
+ }
+
// Transfer ownership of permissions from one package to another.
void transferPermissionsLPw(String origPkg, String newPkg) {
// Transfer ownership of permissions to the new package.