Tell vold about users sharing storage with each other.

In some cases (eg clone profiles), users can see each others volumes.
Vold needs to know this information to setup a mount infrastructure that
avoids page cache inconsistencies.

Bug: 228271997
Test: manual
Change-Id: Ie41bd3b52e105e8bb17f6d5985f00ed2a359bc1b
This commit is contained in:
Martijn Coenen
2022-07-12 08:10:22 +00:00
parent 8ff4152a9c
commit e9e8dbc7df

View File

@@ -888,7 +888,15 @@ class StorageManagerService extends IStorageManager.Stub
if (Intent.ACTION_USER_ADDED.equals(action)) {
final UserManager um = mContext.getSystemService(UserManager.class);
final int userSerialNumber = um.getUserSerialNumber(userId);
mVold.onUserAdded(userId, userSerialNumber);
final UserInfo userInfo = um.getUserInfo(userId);
if (userInfo.isCloneProfile()) {
// Only clone profiles share storage with their parent
mVold.onUserAdded(userId, userSerialNumber,
userInfo.profileGroupId /* sharesStorageWithUserId */);
} else {
mVold.onUserAdded(userId, userSerialNumber,
-1 /* shareStorageWithUserId */);
}
} else if (Intent.ACTION_USER_REMOVED.equals(action)) {
synchronized (mVolumes) {
final int size = mVolumes.size();
@@ -1137,7 +1145,11 @@ class StorageManagerService extends IStorageManager.Stub
// Tell vold about all existing and started users
for (UserInfo user : users) {
mVold.onUserAdded(user.id, user.serialNumber);
if (user.isCloneProfile()) {
mVold.onUserAdded(user.id, user.serialNumber, user.profileGroupId);
} else {
mVold.onUserAdded(user.id, user.serialNumber, -1);
}
}
for (int userId : systemUnlockedUsers) {
mVold.onUserStarted(userId);