From 9422a707800b8d58cedccbf927bf42a853068cbd Mon Sep 17 00:00:00 2001 From: Ricky Wai Date: Thu, 16 Apr 2020 18:10:32 +0100 Subject: [PATCH] Do not enable storage app data isolation on special mount options app These apps do not need to have storage app data isolation as their /storage is not mounted to /mnt/user Bug: 153540919 Test: atest AdoptableHostTest Test: atest FuseDaemonHostTest Change-Id: I3398dc75e9b827e7b9b43b70852cb4ca6bd7048e --- .../java/com/android/server/am/ProcessList.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java index e28464a27dc4e..c9ee47278796d 100644 --- a/services/core/java/com/android/server/am/ProcessList.java +++ b/services/core/java/com/android/server/am/ProcessList.java @@ -2181,6 +2181,17 @@ public final class ProcessList { return result; } + private boolean needsStorageDataIsolation(StorageManagerInternal storageManagerInternal, + ProcessRecord app) { + return mVoldAppDataIsolationEnabled && UserHandle.isApp(app.uid) + && !storageManagerInternal.isExternalStorageService(app.uid) + // Special mounting mode doesn't need to have data isolation as they won't + // access /mnt/user anyway. + && app.mountMode != Zygote.MOUNT_EXTERNAL_ANDROID_WRITABLE + && app.mountMode != Zygote.MOUNT_EXTERNAL_PASS_THROUGH + && app.mountMode != Zygote.MOUNT_EXTERNAL_INSTALLER; + } + private Process.ProcessStartResult startProcess(HostingRecord hostingRecord, String entryPoint, ProcessRecord app, int uid, int[] gids, int runtimeFlags, int zygotePolicyFlags, int mountExternal, String seInfo, String requiredAbi, String instructionSet, @@ -2237,8 +2248,7 @@ public final class ProcessList { int userId = UserHandle.getUserId(uid); StorageManagerInternal storageManagerInternal = LocalServices.getService( StorageManagerInternal.class); - if (mVoldAppDataIsolationEnabled && UserHandle.isApp(app.uid) - && !storageManagerInternal.isExternalStorageService(uid)) { + if (needsStorageDataIsolation(storageManagerInternal, app)) { bindMountAppStorageDirs = true; if (pkgDataInfoMap == null || !storageManagerInternal.prepareStorageDirs(userId, pkgDataInfoMap.keySet(),