diff options
| author | 2016-11-02 15:26:01 -0600 | |
|---|---|---|
| committer | 2016-11-02 22:06:28 +0000 | |
| commit | 6b0079d3bc970d48e71cf9211d178e447f7f8a7c (patch) | |
| tree | 9ca7c0ce655604184dc101ee11ef1ff679f1fca7 | |
| parent | 336791758a3003a2068b3063f562c978b8bf1e4d (diff) | |
Public volumes belong to a single user.
When a public (vfat) device is inserted, it's strongly associated
with the current foreground user, and no other users should be able
to access it, since otherwise that would be a cross-user data leak.
To use the device under a different user, switch users and then
eject/remount the device.
Test: verified user isolation of USB drive
Bug: 32523490
Change-Id: I590c791996f1fea8d78f625dc942d149f1f41614
| -rw-r--r-- | packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java | 3 | ||||
| -rw-r--r-- | services/core/java/com/android/server/MountService.java | 9 |
2 files changed, 10 insertions, 2 deletions
diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java index 18335b6586a8..d41d0e5b089b 100644 --- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java +++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java @@ -135,7 +135,8 @@ public class ExternalStorageProvider extends DocumentsProvider { final VolumeInfo privateVol = mStorageManager.findPrivateForEmulated(volume); title = mStorageManager.getBestVolumeDescription(privateVol); } - } else if (volume.getType() == VolumeInfo.TYPE_PUBLIC) { + } else if (volume.getType() == VolumeInfo.TYPE_PUBLIC + && volume.getMountUserId() == userId) { rootId = volume.getFsUuid(); title = mStorageManager.getBestVolumeDescription(volume); } else { diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java index 5e674145da34..6c33cff693bd 100644 --- a/services/core/java/com/android/server/MountService.java +++ b/services/core/java/com/android/server/MountService.java @@ -169,6 +169,11 @@ class MountService extends IMountService.Stub } @Override + public void onSwitchUser(int userHandle) { + mMountService.mCurrentUserId = userHandle; + } + + @Override public void onStartUser(int userHandle) { mMountService.onStartUser(userHandle); } @@ -307,6 +312,8 @@ class MountService extends IMountService.Stub @GuardedBy("mLock") private String mMoveTargetUuid; + private volatile int mCurrentUserId = UserHandle.USER_OWNER; + private VolumeInfo findVolumeByIdOrThrow(String id) { synchronized (mLock) { final VolumeInfo vol = mVolumes.get(id); @@ -1189,7 +1196,7 @@ class MountService extends IMountService.Stub vol.mountFlags |= VolumeInfo.MOUNT_FLAG_VISIBLE; } - vol.mountUserId = UserHandle.USER_OWNER; + vol.mountUserId = mCurrentUserId; mHandler.obtainMessage(H_VOLUME_MOUNT, vol).sendToTarget(); } else if (vol.type == VolumeInfo.TYPE_PRIVATE) { |