diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index 0eefbfed1fbd7..12c9d4b37eed4 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -4185,15 +4185,16 @@ public final class Settings implements Watchable, Snappable { // such as APEX continue; } - // Need to create a data directory for all apps installed for this user. - // Accumulate all required args and call the installer after mPackages lock - // has been released + // We need to create the DE data directory for all apps installed for this user. + // (CE storage is not ready yet; the CE data directories will be created later, + // when the user is "unlocked".) Accumulate all required args, and call the + // installer after the mPackages lock has been released. final String seInfo = AndroidPackageUtils.getSeInfo(ps.getPkg(), ps); final boolean usesSdk = !ps.getPkg().getUsesSdkLibraries().isEmpty(); final CreateAppDataArgs args = Installer.buildCreateAppDataArgs( ps.getVolumeUuid(), ps.getPackageName(), userHandle, - StorageManager.FLAG_STORAGE_CE | StorageManager.FLAG_STORAGE_DE, - ps.getAppId(), seInfo, ps.getPkg().getTargetSdkVersion(), usesSdk); + StorageManager.FLAG_STORAGE_DE, ps.getAppId(), seInfo, + ps.getPkg().getTargetSdkVersion(), usesSdk); batch.createAppData(args); } else { // Make sure the app is excluded from storage mapping for this user diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 4966f94d6df00..2bfee8cfc2887 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -4666,9 +4666,12 @@ public class UserManagerService extends IUserManager.Stub { storage.createUserKey(userId, userInfo.serialNumber, userInfo.isEphemeral()); t.traceEnd(); + // Only prepare DE storage here. CE storage will be prepared later, when the user is + // unlocked. We do this to ensure that CE storage isn't prepared before the CE key is + // saved to disk. This also matches what is done for user 0. t.traceBegin("prepareUserData"); mUserDataPreparer.prepareUserData(userId, userInfo.serialNumber, - StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE); + StorageManager.FLAG_STORAGE_DE); t.traceEnd(); t.traceBegin("LSS.createNewUser");