From 01b3bcaa79f886fdf5c56e12b292c155cc64fc0f Mon Sep 17 00:00:00 2001 From: Yasin Kilicdere Date: Mon, 13 May 2024 17:51:30 +0100 Subject: Move UMS.markEphemeralUsersForRemoval earlier in the boot. When the device is rebooted with an ephemeral user existing, after the reboot UserManager.getAliveUsers() was containing that user as well, which was causing a FATAL exception in BiometricScheduler during boot. This CL fixes that issue by moving the markEphemeralUsersForRemoval earlier. Bug: 327972305 Test: atest CtsMultiUserHostTestCases Flag: None Change-Id: I240025cdd27a7b9b3eb89b241e14cbd75aad5d26 --- .../com/android/server/pm/UserManagerService.java | 24 +++++++--------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 3c702b4125b7..4003662a7933 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -1060,8 +1060,6 @@ public class UserManagerService extends IUserManager.Stub { if (isAutoLockingPrivateSpaceOnRestartsEnabled()) { autoLockPrivateSpace(); } - - markEphemeralUsersForRemoval(); } private boolean isAutoLockingPrivateSpaceOnRestartsEnabled() { @@ -1098,21 +1096,6 @@ public class UserManagerService extends IUserManager.Stub { } } - /** Marks all ephemeral users as slated for deletion. **/ - private void markEphemeralUsersForRemoval() { - synchronized (mUsersLock) { - final int userSize = mUsers.size(); - for (int i = 0; i < userSize; i++) { - final UserInfo ui = mUsers.valueAt(i).info; - if (ui.isEphemeral() && !ui.preCreated && ui.id != UserHandle.USER_SYSTEM) { - addRemovingUserIdLocked(ui.id); - ui.partial = true; - ui.flags |= UserInfo.FLAG_DISABLED; - } - } - } - } - /* Prunes out any partially created or partially removed users. */ private void cleanupPartialUsers() { ArrayList partials = new ArrayList<>(); @@ -4223,6 +4206,13 @@ public class UserManagerService extends IUserManager.Stub { || mNextSerialNumber <= userData.info.id) { mNextSerialNumber = userData.info.id + 1; } + if (userData.info.isEphemeral() && !userData.info.preCreated + && userData.info.id != UserHandle.USER_SYSTEM) { + // Mark ephemeral user as slated for deletion. + addRemovingUserIdLocked(userData.info.id); + userData.info.partial = true; + userData.info.flags |= UserInfo.FLAG_DISABLED; + } } } } else if (name.equals(TAG_GUEST_RESTRICTIONS)) { -- cgit v1.2.3-59-g8ed1b