Merge "SM: Change volume mountUserId for new user" into main am: cc299356d6 am: 88d2b411f7

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2616670

Change-Id: Ib4fafdbb5285c5a3a8a2df62c04d429c5d156e31
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Martijn Coenen
2023-07-17 09:18:29 +00:00
committed by Automerger Merge Worker

View File

@@ -1269,6 +1269,21 @@ class StorageManagerService extends IStorageManager.Stub
} }
} }
/**
* This method checks if the volume is public and the volume is visible and the volume it is
* trying to mount doesn't have the same mount user id as the current user being maintained by
* StorageManagerService and change the mount Id. The checks are same as
* {@link StorageManagerService#maybeRemountVolumes(int)}
* @param VolumeInfo object to consider for changing the mountId
*/
private void updateVolumeMountIdIfRequired(VolumeInfo vol) {
synchronized (mLock) {
if (!vol.isPrimary() && vol.isVisible() && vol.getMountUserId() != mCurrentUserId) {
vol.mountUserId = mCurrentUserId;
}
}
}
private boolean supportsBlockCheckpoint() throws RemoteException { private boolean supportsBlockCheckpoint() throws RemoteException {
enforcePermission(android.Manifest.permission.MOUNT_FORMAT_FILESYSTEMS); enforcePermission(android.Manifest.permission.MOUNT_FORMAT_FILESYSTEMS);
return mVold.supportsBlockCheckpoint(); return mVold.supportsBlockCheckpoint();
@@ -1382,13 +1397,14 @@ class StorageManagerService extends IStorageManager.Stub
} }
@Override @Override
public void onVolumeStateChanged(String volId, final int newState) { public void onVolumeStateChanged(String volId, final int newState, final int userId) {
synchronized (mLock) { synchronized (mLock) {
final VolumeInfo vol = mVolumes.get(volId); final VolumeInfo vol = mVolumes.get(volId);
if (vol != null) { if (vol != null) {
final int oldState = vol.state; final int oldState = vol.state;
vol.state = newState; vol.state = newState;
final VolumeInfo vInfo = new VolumeInfo(vol); final VolumeInfo vInfo = new VolumeInfo(vol);
vInfo.mountUserId = userId;
final SomeArgs args = SomeArgs.obtain(); final SomeArgs args = SomeArgs.obtain();
args.arg1 = vInfo; args.arg1 = vInfo;
args.argi1 = oldState; args.argi1 = oldState;
@@ -2232,7 +2248,7 @@ class StorageManagerService extends IStorageManager.Stub
if (isMountDisallowed(vol)) { if (isMountDisallowed(vol)) {
throw new SecurityException("Mounting " + volId + " restricted by policy"); throw new SecurityException("Mounting " + volId + " restricted by policy");
} }
updateVolumeMountIdIfRequired(vol);
mount(vol); mount(vol);
} }