summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/os/ZygoteProcess.java2
-rw-r--r--core/java/com/android/internal/os/Zygote.java5
-rw-r--r--core/java/com/android/internal/os/ZygoteConnection.java4
-rw-r--r--core/jni/com_android_internal_os_Zygote.cpp10
-rw-r--r--services/core/java/com/android/server/StorageManagerService.java6
-rw-r--r--services/tests/servicestests/src/com/android/server/StorageManagerServiceTest.java16
6 files changed, 35 insertions, 8 deletions
diff --git a/core/java/android/os/ZygoteProcess.java b/core/java/android/os/ZygoteProcess.java
index 99a85eaefe53..ec7782177c73 100644
--- a/core/java/android/os/ZygoteProcess.java
+++ b/core/java/android/os/ZygoteProcess.java
@@ -402,6 +402,8 @@ public class ZygoteProcess {
argsForZygote.add("--mount-external-full");
} else if (mountExternal == Zygote.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);
diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java
index f5746ca65f5e..705bae4f24ef 100644
--- a/core/java/com/android/internal/os/Zygote.java
+++ b/core/java/com/android/internal/os/Zygote.java
@@ -82,6 +82,11 @@ public final class Zygote {
/** Read-write external storage should be mounted. */
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
* all obb dirs in addition to their package sandboxes
*/
diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java
index 5990d72d89b4..ced798cb6445 100644
--- a/core/java/com/android/internal/os/ZygoteConnection.java
+++ b/core/java/com/android/internal/os/ZygoteConnection.java
@@ -688,8 +688,10 @@ class ZygoteConnection {
mountExternal = Zygote.MOUNT_EXTERNAL_WRITE;
} else if (arg.equals("--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;
+ } else if (arg.equals("--mount-external-legacy")) {
+ mountExternal = Zygote.MOUNT_EXTERNAL_LEGACY;
} else if (arg.equals("--query-abi-list")) {
abiListQuery = true;
} else if (arg.equals("--get-pid")) {
diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp
index 7aee8338d3c4..e81b6276ef5f 100644
--- a/core/jni/com_android_internal_os_Zygote.cpp
+++ b/core/jni/com_android_internal_os_Zygote.cpp
@@ -109,8 +109,9 @@ enum MountExternalKind {
MOUNT_EXTERNAL_DEFAULT = 1,
MOUNT_EXTERNAL_READ = 2,
MOUNT_EXTERNAL_WRITE = 3,
- MOUNT_EXTERNAL_INSTALLER = 4,
- MOUNT_EXTERNAL_FULL = 5,
+ MOUNT_EXTERNAL_LEGACY = 4,
+ MOUNT_EXTERNAL_INSTALLER = 5,
+ MOUNT_EXTERNAL_FULL = 6,
};
// Must match values in com.android.internal.os.Zygote.
@@ -548,8 +549,9 @@ static bool MountEmulatedStorage(uid_t uid, jint mount_mode,
}
if (GetBoolProperty(kIsolatedStorageSnapshot, GetBoolProperty(kIsolatedStorage, false))) {
- if (mount_mode == MOUNT_EXTERNAL_FULL) {
- storageSource = "/mnt/runtime/write";
+ if (mount_mode == MOUNT_EXTERNAL_FULL || mount_mode == MOUNT_EXTERNAL_LEGACY) {
+ storageSource = (mount_mode == MOUNT_EXTERNAL_FULL)
+ ? "/mnt/runtime/full" : "/mnt/runtime/write";
if (TEMP_FAILURE_RETRY(mount(storageSource.string(), "/storage",
NULL, MS_BIND | MS_REC | MS_SLAVE, NULL)) == -1) {
*error_msg = CREATE_ERROR("Failed to mount %s to /storage: %s",
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index 25e107642d04..7731c04a94b8 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -3288,7 +3288,8 @@ class StorageManagerService extends IStorageManager.Stub
}
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;
}
@@ -3663,8 +3664,7 @@ class StorageManagerService extends IStorageManager.Stub
return Zygote.MOUNT_EXTERNAL_FULL;
} else if (mIAppOpsService.checkOperation(OP_LEGACY_STORAGE, uid,
packageName) == MODE_ALLOWED) {
- // TODO: define a specific "legacy" mount mode
- return Zygote.MOUNT_EXTERNAL_FULL;
+ return Zygote.MOUNT_EXTERNAL_LEGACY;
} else if (mIPackageManager.checkUidPermission(INSTALL_PACKAGES, uid)
== PERMISSION_GRANTED || mIAppOpsService.checkOperation(
OP_REQUEST_INSTALL_PACKAGES, uid, packageName) == MODE_ALLOWED) {
diff --git a/services/tests/servicestests/src/com/android/server/StorageManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/StorageManagerServiceTest.java
index ec5d93edc126..68f696b26a26 100644
--- a/services/tests/servicestests/src/com/android/server/StorageManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/StorageManagerServiceTest.java
@@ -227,6 +227,22 @@ public class StorageManagerServiceTest {
}
@Test
+ public void testPackageInLegacyMode() throws Exception {
+ setStorageMountMode(PID_RED, UID_COLORS, Zygote.MOUNT_EXTERNAL_LEGACY);
+
+ // Both app and system have the same view
+ assertTranslation(
+ "/storage/emulated/0/Android/data/com.red/foo.jpg",
+ "/storage/emulated/0/Android/data/com.red/foo.jpg",
+ PID_RED, UID_COLORS);
+
+ assertTranslation(
+ "/storage/emulated/0/Android/sandbox/com.grey/bar.jpg",
+ "/storage/emulated/0/Android/sandbox/com.grey/bar.jpg",
+ PID_RED, UID_COLORS);
+ }
+
+ @Test
public void testInstallerPackage() throws Exception {
setStorageMountMode(PID_GREY, UID_GREY, Zygote.MOUNT_EXTERNAL_INSTALLER);