diff options
| author | 2013-09-13 16:58:36 -0700 | |
|---|---|---|
| committer | 2013-09-13 16:58:36 -0700 | |
| commit | 86b391cd03ba2c3e71e78ce2ccf8dd073ac409cf (patch) | |
| tree | 50432a84f4bdefb1b3222ec3d87b8d5d782009c8 | |
| parent | 7770dcc3d351a494d0f5fe44feb776cc512e9b18 (diff) | |
Prune shared users that the system declares but does not use
Bug 10184643
Change-Id: I72c5177c621c24fac34bf8744eb6c5108b6d3464
| -rwxr-xr-x | services/java/com/android/server/pm/PackageManagerService.java | 3 | ||||
| -rw-r--r-- | services/java/com/android/server/pm/Settings.java | 13 |
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. |