diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index a4bc3bd9101c6..3c296ea8bff4c 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -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; }