Loading core/java/android/os/ZygoteProcess.java +2 −0 Original line number Original line Diff line number Diff line Loading @@ -402,6 +402,8 @@ public class ZygoteProcess { argsForZygote.add("--mount-external-full"); argsForZygote.add("--mount-external-full"); } else if (mountExternal == Zygote.MOUNT_EXTERNAL_INSTALLER) { } else if (mountExternal == Zygote.MOUNT_EXTERNAL_INSTALLER) { argsForZygote.add("--mount-external-installer"); argsForZygote.add("--mount-external-installer"); } else if (mountExternal == Zygote.MOUNT_EXTERNAL_LEGACY) { argsForZygote.add("--mount-external-legacy"); } } argsForZygote.add("--target-sdk-version=" + targetSdkVersion); argsForZygote.add("--target-sdk-version=" + targetSdkVersion); Loading core/java/com/android/internal/os/Zygote.java +5 −0 Original line number Original line Diff line number Diff line Loading @@ -81,6 +81,11 @@ public final class Zygote { public static final int MOUNT_EXTERNAL_READ = IVold.REMOUNT_MODE_READ; public static final int MOUNT_EXTERNAL_READ = IVold.REMOUNT_MODE_READ; /** Read-write external storage should be mounted. */ /** Read-write external storage should be mounted. */ public static final int MOUNT_EXTERNAL_WRITE = IVold.REMOUNT_MODE_WRITE; public static final int MOUNT_EXTERNAL_WRITE = IVold.REMOUNT_MODE_WRITE; /** * Mount mode for apps that are already installed on the device before the isolated_storage * feature is enabled. */ public static final int MOUNT_EXTERNAL_LEGACY = IVold.REMOUNT_MODE_LEGACY; /** /** * Mount mode for package installers which should give them access to * Mount mode for package installers which should give them access to * all obb dirs in addition to their package sandboxes * all obb dirs in addition to their package sandboxes Loading core/java/com/android/internal/os/ZygoteConnection.java +3 −1 Original line number Original line Diff line number Diff line Loading @@ -690,6 +690,8 @@ class ZygoteConnection { mountExternal = Zygote.MOUNT_EXTERNAL_FULL; mountExternal = Zygote.MOUNT_EXTERNAL_FULL; } else if (arg.equals("--mount-external-installer")) { } else if (arg.equals("--mount-external-installer")) { mountExternal = Zygote.MOUNT_EXTERNAL_INSTALLER; mountExternal = Zygote.MOUNT_EXTERNAL_INSTALLER; } else if (arg.equals("--mount-external-legacy")) { mountExternal = Zygote.MOUNT_EXTERNAL_LEGACY; } else if (arg.equals("--query-abi-list")) { } else if (arg.equals("--query-abi-list")) { abiListQuery = true; abiListQuery = true; } else if (arg.equals("--get-pid")) { } else if (arg.equals("--get-pid")) { Loading core/jni/com_android_internal_os_Zygote.cpp +6 −4 Original line number Original line Diff line number Diff line Loading @@ -109,8 +109,9 @@ enum MountExternalKind { MOUNT_EXTERNAL_DEFAULT = 1, MOUNT_EXTERNAL_DEFAULT = 1, MOUNT_EXTERNAL_READ = 2, MOUNT_EXTERNAL_READ = 2, MOUNT_EXTERNAL_WRITE = 3, MOUNT_EXTERNAL_WRITE = 3, MOUNT_EXTERNAL_INSTALLER = 4, MOUNT_EXTERNAL_LEGACY = 4, MOUNT_EXTERNAL_FULL = 5, MOUNT_EXTERNAL_INSTALLER = 5, MOUNT_EXTERNAL_FULL = 6, }; }; // Must match values in com.android.internal.os.Zygote. // Must match values in com.android.internal.os.Zygote. Loading Loading @@ -548,8 +549,9 @@ static bool MountEmulatedStorage(uid_t uid, jint mount_mode, } } if (GetBoolProperty(kIsolatedStorageSnapshot, GetBoolProperty(kIsolatedStorage, false))) { if (GetBoolProperty(kIsolatedStorageSnapshot, GetBoolProperty(kIsolatedStorage, false))) { if (mount_mode == MOUNT_EXTERNAL_FULL) { if (mount_mode == MOUNT_EXTERNAL_FULL || mount_mode == MOUNT_EXTERNAL_LEGACY) { storageSource = "/mnt/runtime/write"; storageSource = (mount_mode == MOUNT_EXTERNAL_FULL) ? "/mnt/runtime/full" : "/mnt/runtime/write"; if (TEMP_FAILURE_RETRY(mount(storageSource.string(), "/storage", if (TEMP_FAILURE_RETRY(mount(storageSource.string(), "/storage", NULL, MS_BIND | MS_REC | MS_SLAVE, NULL)) == -1) { NULL, MS_BIND | MS_REC | MS_SLAVE, NULL)) == -1) { *error_msg = CREATE_ERROR("Failed to mount %s to /storage: %s", *error_msg = CREATE_ERROR("Failed to mount %s to /storage: %s", Loading services/core/java/com/android/server/StorageManagerService.java +3 −3 Original line number Original line Diff line number Diff line Loading @@ -3288,7 +3288,8 @@ class StorageManagerService extends IStorageManager.Stub } } final int mountMode = mAmInternal.getStorageMountMode(pid, uid); final int mountMode = mAmInternal.getStorageMountMode(pid, uid); if (mountMode == Zygote.MOUNT_EXTERNAL_FULL) { if (mountMode == Zygote.MOUNT_EXTERNAL_FULL || mountMode == Zygote.MOUNT_EXTERNAL_LEGACY) { return path; return path; } } Loading Loading @@ -3663,8 +3664,7 @@ class StorageManagerService extends IStorageManager.Stub return Zygote.MOUNT_EXTERNAL_FULL; return Zygote.MOUNT_EXTERNAL_FULL; } else if (mIAppOpsService.checkOperation(OP_LEGACY_STORAGE, uid, } else if (mIAppOpsService.checkOperation(OP_LEGACY_STORAGE, uid, packageName) == MODE_ALLOWED) { packageName) == MODE_ALLOWED) { // TODO: define a specific "legacy" mount mode return Zygote.MOUNT_EXTERNAL_LEGACY; return Zygote.MOUNT_EXTERNAL_FULL; } else if (mIPackageManager.checkUidPermission(INSTALL_PACKAGES, uid) } else if (mIPackageManager.checkUidPermission(INSTALL_PACKAGES, uid) == PERMISSION_GRANTED || mIAppOpsService.checkOperation( == PERMISSION_GRANTED || mIAppOpsService.checkOperation( OP_REQUEST_INSTALL_PACKAGES, uid, packageName) == MODE_ALLOWED) { OP_REQUEST_INSTALL_PACKAGES, uid, packageName) == MODE_ALLOWED) { Loading Loading
core/java/android/os/ZygoteProcess.java +2 −0 Original line number Original line Diff line number Diff line Loading @@ -402,6 +402,8 @@ public class ZygoteProcess { argsForZygote.add("--mount-external-full"); argsForZygote.add("--mount-external-full"); } else if (mountExternal == Zygote.MOUNT_EXTERNAL_INSTALLER) { } else if (mountExternal == Zygote.MOUNT_EXTERNAL_INSTALLER) { argsForZygote.add("--mount-external-installer"); argsForZygote.add("--mount-external-installer"); } else if (mountExternal == Zygote.MOUNT_EXTERNAL_LEGACY) { argsForZygote.add("--mount-external-legacy"); } } argsForZygote.add("--target-sdk-version=" + targetSdkVersion); argsForZygote.add("--target-sdk-version=" + targetSdkVersion); Loading
core/java/com/android/internal/os/Zygote.java +5 −0 Original line number Original line Diff line number Diff line Loading @@ -81,6 +81,11 @@ public final class Zygote { public static final int MOUNT_EXTERNAL_READ = IVold.REMOUNT_MODE_READ; public static final int MOUNT_EXTERNAL_READ = IVold.REMOUNT_MODE_READ; /** Read-write external storage should be mounted. */ /** Read-write external storage should be mounted. */ public static final int MOUNT_EXTERNAL_WRITE = IVold.REMOUNT_MODE_WRITE; public static final int MOUNT_EXTERNAL_WRITE = IVold.REMOUNT_MODE_WRITE; /** * Mount mode for apps that are already installed on the device before the isolated_storage * feature is enabled. */ public static final int MOUNT_EXTERNAL_LEGACY = IVold.REMOUNT_MODE_LEGACY; /** /** * Mount mode for package installers which should give them access to * Mount mode for package installers which should give them access to * all obb dirs in addition to their package sandboxes * all obb dirs in addition to their package sandboxes Loading
core/java/com/android/internal/os/ZygoteConnection.java +3 −1 Original line number Original line Diff line number Diff line Loading @@ -690,6 +690,8 @@ class ZygoteConnection { mountExternal = Zygote.MOUNT_EXTERNAL_FULL; mountExternal = Zygote.MOUNT_EXTERNAL_FULL; } else if (arg.equals("--mount-external-installer")) { } else if (arg.equals("--mount-external-installer")) { mountExternal = Zygote.MOUNT_EXTERNAL_INSTALLER; mountExternal = Zygote.MOUNT_EXTERNAL_INSTALLER; } else if (arg.equals("--mount-external-legacy")) { mountExternal = Zygote.MOUNT_EXTERNAL_LEGACY; } else if (arg.equals("--query-abi-list")) { } else if (arg.equals("--query-abi-list")) { abiListQuery = true; abiListQuery = true; } else if (arg.equals("--get-pid")) { } else if (arg.equals("--get-pid")) { Loading
core/jni/com_android_internal_os_Zygote.cpp +6 −4 Original line number Original line Diff line number Diff line Loading @@ -109,8 +109,9 @@ enum MountExternalKind { MOUNT_EXTERNAL_DEFAULT = 1, MOUNT_EXTERNAL_DEFAULT = 1, MOUNT_EXTERNAL_READ = 2, MOUNT_EXTERNAL_READ = 2, MOUNT_EXTERNAL_WRITE = 3, MOUNT_EXTERNAL_WRITE = 3, MOUNT_EXTERNAL_INSTALLER = 4, MOUNT_EXTERNAL_LEGACY = 4, MOUNT_EXTERNAL_FULL = 5, MOUNT_EXTERNAL_INSTALLER = 5, MOUNT_EXTERNAL_FULL = 6, }; }; // Must match values in com.android.internal.os.Zygote. // Must match values in com.android.internal.os.Zygote. Loading Loading @@ -548,8 +549,9 @@ static bool MountEmulatedStorage(uid_t uid, jint mount_mode, } } if (GetBoolProperty(kIsolatedStorageSnapshot, GetBoolProperty(kIsolatedStorage, false))) { if (GetBoolProperty(kIsolatedStorageSnapshot, GetBoolProperty(kIsolatedStorage, false))) { if (mount_mode == MOUNT_EXTERNAL_FULL) { if (mount_mode == MOUNT_EXTERNAL_FULL || mount_mode == MOUNT_EXTERNAL_LEGACY) { storageSource = "/mnt/runtime/write"; storageSource = (mount_mode == MOUNT_EXTERNAL_FULL) ? "/mnt/runtime/full" : "/mnt/runtime/write"; if (TEMP_FAILURE_RETRY(mount(storageSource.string(), "/storage", if (TEMP_FAILURE_RETRY(mount(storageSource.string(), "/storage", NULL, MS_BIND | MS_REC | MS_SLAVE, NULL)) == -1) { NULL, MS_BIND | MS_REC | MS_SLAVE, NULL)) == -1) { *error_msg = CREATE_ERROR("Failed to mount %s to /storage: %s", *error_msg = CREATE_ERROR("Failed to mount %s to /storage: %s", Loading
services/core/java/com/android/server/StorageManagerService.java +3 −3 Original line number Original line Diff line number Diff line Loading @@ -3288,7 +3288,8 @@ class StorageManagerService extends IStorageManager.Stub } } final int mountMode = mAmInternal.getStorageMountMode(pid, uid); final int mountMode = mAmInternal.getStorageMountMode(pid, uid); if (mountMode == Zygote.MOUNT_EXTERNAL_FULL) { if (mountMode == Zygote.MOUNT_EXTERNAL_FULL || mountMode == Zygote.MOUNT_EXTERNAL_LEGACY) { return path; return path; } } Loading Loading @@ -3663,8 +3664,7 @@ class StorageManagerService extends IStorageManager.Stub return Zygote.MOUNT_EXTERNAL_FULL; return Zygote.MOUNT_EXTERNAL_FULL; } else if (mIAppOpsService.checkOperation(OP_LEGACY_STORAGE, uid, } else if (mIAppOpsService.checkOperation(OP_LEGACY_STORAGE, uid, packageName) == MODE_ALLOWED) { packageName) == MODE_ALLOWED) { // TODO: define a specific "legacy" mount mode return Zygote.MOUNT_EXTERNAL_LEGACY; return Zygote.MOUNT_EXTERNAL_FULL; } else if (mIPackageManager.checkUidPermission(INSTALL_PACKAGES, uid) } else if (mIPackageManager.checkUidPermission(INSTALL_PACKAGES, uid) == PERMISSION_GRANTED || mIAppOpsService.checkOperation( == PERMISSION_GRANTED || mIAppOpsService.checkOperation( OP_REQUEST_INSTALL_PACKAGES, uid, packageName) == MODE_ALLOWED) { OP_REQUEST_INSTALL_PACKAGES, uid, packageName) == MODE_ALLOWED) { Loading