Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 44db1aca authored by Martijn Coenen's avatar Martijn Coenen
Browse files

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
parent ed464576
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -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;
            }