Determine pass_through mount mode based on UID.
We previously using the packagename, but if we start the media process for another package (eg DownloadProvider, which is hosted in the same process), then the packagename won't match, and we would mount the FUSE mount instead. Bug: 13789012 Test: atest AdoptableHostTest Change-Id: I9b5fea07f3620b28595274a264f96d9f891f6715
This commit is contained in:
@@ -354,8 +354,7 @@ class StorageManagerService extends IStorageManager.Stub
|
||||
@GuardedBy("mLock")
|
||||
private String mMoveTargetUuid;
|
||||
|
||||
@Nullable
|
||||
private volatile String mMediaStoreAuthorityPackageName = null;
|
||||
private volatile int mMediaStoreAuthorityAppId = -1;
|
||||
|
||||
private volatile int mCurrentUserId = UserHandle.USER_SYSTEM;
|
||||
|
||||
@@ -1697,7 +1696,7 @@ class StorageManagerService extends IStorageManager.Stub
|
||||
| PackageManager.MATCH_DIRECT_BOOT_UNAWARE,
|
||||
UserHandle.getUserId(UserHandle.USER_SYSTEM));
|
||||
if (provider != null) {
|
||||
mMediaStoreAuthorityPackageName = provider.packageName;
|
||||
mMediaStoreAuthorityAppId = UserHandle.getAppId(provider.applicationInfo.uid);
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -3724,8 +3723,10 @@ class StorageManagerService extends IStorageManager.Stub
|
||||
return Zygote.MOUNT_EXTERNAL_NONE;
|
||||
}
|
||||
|
||||
if (mIsFuseEnabled && packageName.equals(mMediaStoreAuthorityPackageName)) {
|
||||
// Determine if caller requires pass_through mount
|
||||
if (mIsFuseEnabled && mMediaStoreAuthorityAppId == UserHandle.getAppId(uid)) {
|
||||
// Determine if caller requires pass_through mount; note that we do this for
|
||||
// all processes that share a UID with MediaProvider; but this is fine, since
|
||||
// those processes anyway share the same rights as MediaProvider.
|
||||
return Zygote.MOUNT_EXTERNAL_PASS_THROUGH;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user