diff options
3 files changed, 21 insertions, 3 deletions
diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp index 4b30359e671a..924dc4b3a051 100644 --- a/core/jni/com_android_internal_os_Zygote.cpp +++ b/core/jni/com_android_internal_os_Zygote.cpp @@ -1653,7 +1653,9 @@ static void SpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArray gids, uid, process_name, managed_nice_name, fail_fn); isolateJitProfile(env, pkg_data_info_list, uid, process_name, managed_nice_name, fail_fn); } - if ((mount_external != MOUNT_EXTERNAL_INSTALLER) && mount_storage_dirs) { + if (mount_external != MOUNT_EXTERNAL_INSTALLER && + mount_external != MOUNT_EXTERNAL_PASS_THROUGH && + mount_storage_dirs) { BindMountStorageDirs(env, pkg_data_info_list, uid, process_name, managed_nice_name, fail_fn); } diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index 9aefc8dc78ec..b0a586d122ea 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -220,6 +220,10 @@ class StorageManagerService extends IStorageManager.Stub private static final boolean ENABLE_ISOLATED_STORAGE = StorageManager.hasIsolatedStorage(); + // A system property to control if obb app data isolation is enabled in vold. + private static final String ANDROID_VOLD_APP_DATA_ISOLATION_ENABLED_PROPERTY = + "persist.sys.vold_app_data_isolation_enabled"; + /** * If {@code 1}, enables the isolated storage feature. If {@code -1}, * disables the isolated storage feature. If {@code 0}, uses the default @@ -596,6 +600,8 @@ class StorageManagerService extends IStorageManager.Stub private final boolean mIsFuseEnabled; + private final boolean mVoldAppDataIsolationEnabled; + @GuardedBy("mLock") private final Set<Integer> mUidsWithLegacyExternalStorage = new ArraySet<>(); // Not guarded by lock, always used on the ActivityManager thread @@ -1516,7 +1522,7 @@ class StorageManagerService extends IStorageManager.Stub if (vol.type == VolumeInfo.TYPE_EMULATED) { if (newState != VolumeInfo.STATE_MOUNTED) { mFuseMountedUser.remove(vol.getMountUserId()); - } else { + } else if (mVoldAppDataIsolationEnabled){ final int userId = vol.getMountUserId(); mFuseMountedUser.add(userId); // Async remount app storage so it won't block the main thread. @@ -1740,6 +1746,8 @@ class StorageManagerService extends IStorageManager.Stub // incorrect until #updateFusePropFromSettings where we set the correct value and reboot if // different mIsFuseEnabled = SystemProperties.getBoolean(PROP_FUSE, DEFAULT_FUSE_ENABLED); + mVoldAppDataIsolationEnabled = mIsFuseEnabled && SystemProperties.getBoolean( + ANDROID_VOLD_APP_DATA_ISOLATION_ENABLED_PROPERTY, false); mContext = context; mResolver = mContext.getContentResolver(); mCallbacks = new Callbacks(FgThread.get().getLooper()); diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java index 786e9cf66bfa..89fa02bbbd64 100644 --- a/services/core/java/com/android/server/am/ProcessList.java +++ b/services/core/java/com/android/server/am/ProcessList.java @@ -154,6 +154,9 @@ public final class ProcessList { static final String ANDROID_VOLD_APP_DATA_ISOLATION_ENABLED_PROPERTY = "persist.sys.vold_app_data_isolation_enabled"; + // A system property to control if fuse is enabled. + static final String ANDROID_FUSE_ENABLED = "persist.sys.fuse"; + // The minimum time we allow between crashes, for us to consider this // application to be bad and stop and its services and reject broadcasts. static final int MIN_CRASH_INTERVAL = 60 * 1000; @@ -707,8 +710,13 @@ public final class ProcessList { // want some apps enabled while some apps disabled mAppDataIsolationEnabled = SystemProperties.getBoolean(ANDROID_APP_DATA_ISOLATION_ENABLED_PROPERTY, true); - mVoldAppDataIsolationEnabled = SystemProperties.getBoolean( + boolean fuseEnabled = SystemProperties.getBoolean(ANDROID_FUSE_ENABLED, false); + boolean voldAppDataIsolationEnabled = SystemProperties.getBoolean( ANDROID_VOLD_APP_DATA_ISOLATION_ENABLED_PROPERTY, false); + if (!fuseEnabled && voldAppDataIsolationEnabled) { + Slog.e(TAG, "Fuse is not enabled while vold app data isolation is enabled"); + } + mVoldAppDataIsolationEnabled = fuseEnabled && voldAppDataIsolationEnabled; mAppDataIsolationWhitelistedApps = new ArrayList<>( SystemConfig.getInstance().getAppDataIsolationWhitelistedApps()); |