diff options
| author | 2019-02-24 10:24:09 -0800 | |
|---|---|---|
| committer | 2019-02-24 10:24:09 -0800 | |
| commit | e51005da04b634802aad99e9e5e5f23eb1e7aeee (patch) | |
| tree | 886fba1a675cc57e1cc634af6284e028a19c93b5 | |
| parent | da1cd64264b7fffb516f0cde9d20197498a88e4c (diff) | |
Look for visible vols for a user under /mnt/user/<userId>/package/.
Currently, we pass down visisble volumes for a user to zygote so that
it can set up appropriate bind mounts after forking. This method has
atleast a couple of race conditions, so instead make zygote just
look under /mnt/user/<userId>/package for volumes that need to be
handled for a particular user.
Bug: 126069494
Test: manual
Test: atest cts/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java
Test: atest cts/tests/app/src/android/app/cts/DownloadManagerTest.java
Test: atest cts/tests/tests/provider/src/android/provider/cts/MediaStore*
Change-Id: Iab47eb34d38a25dfda4a686db9b7203ad4885a93
9 files changed, 45 insertions, 123 deletions
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index 9e97e375753c..cd43b42c8ca5 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -505,7 +505,6 @@ public class Process { * @param invokeWith null-ok the command to invoke with. * @param packageName null-ok the name of the package this process belongs to. * @param packagesForUid null-ok all the packages with the same uid as this process. - * @param visibleVols null-ok storage volumes that can be accessed by this process. * @param zygoteArgs Additional arguments to supply to the zygote process. * * @return An object that describes the result of the attempt to start the process. @@ -525,13 +524,12 @@ public class Process { @Nullable String invokeWith, @Nullable String packageName, @Nullable String[] packagesForUid, - @Nullable String[] visibleVols, @Nullable String sandboxId, @Nullable String[] zygoteArgs) { return ZYGOTE_PROCESS.start(processClass, niceName, uid, gid, gids, runtimeFlags, mountExternal, targetSdkVersion, seInfo, abi, instructionSet, appDataDir, invokeWith, packageName, - packagesForUid, visibleVols, sandboxId, /*useBlastulaPool=*/ true, zygoteArgs); + packagesForUid, sandboxId, /*useBlastulaPool=*/ true, zygoteArgs); } /** @hide */ @@ -547,13 +545,12 @@ public class Process { @Nullable String invokeWith, @Nullable String packageName, @Nullable String[] packagesForUid, - @Nullable String[] visibleVols, @Nullable String sandboxId, @Nullable String[] zygoteArgs) { return WebViewZygote.getProcess().start(processClass, niceName, uid, gid, gids, runtimeFlags, mountExternal, targetSdkVersion, seInfo, abi, instructionSet, appDataDir, invokeWith, packageName, - packagesForUid, visibleVols, sandboxId, /*useBlastulaPool=*/ false, zygoteArgs); + packagesForUid, sandboxId, /*useBlastulaPool=*/ false, zygoteArgs); } /** diff --git a/core/java/android/os/ZygoteProcess.java b/core/java/android/os/ZygoteProcess.java index de378b0cd1bf..370381c9cb10 100644 --- a/core/java/android/os/ZygoteProcess.java +++ b/core/java/android/os/ZygoteProcess.java @@ -305,7 +305,6 @@ public class ZygoteProcess { * @param invokeWith null-ok the command to invoke with. * @param packageName null-ok the name of the package this process belongs to. * @param packagesForUid null-ok all the packages with the same uid as this process. - * @param visibleVols null-ok storage volumes that can be accessed by this process. * @param zygoteArgs Additional arguments to supply to the zygote process. * * @return An object that describes the result of the attempt to start the process. @@ -323,7 +322,6 @@ public class ZygoteProcess { @Nullable String invokeWith, @Nullable String packageName, @Nullable String[] packagesForUid, - @Nullable String[] visibleVols, @Nullable String sandboxId, boolean useBlastulaPool, @Nullable String[] zygoteArgs) { @@ -339,7 +337,7 @@ public class ZygoteProcess { return startViaZygote(processClass, niceName, uid, gid, gids, runtimeFlags, mountExternal, targetSdkVersion, seInfo, abi, instructionSet, appDataDir, invokeWith, /*startChildZygote=*/false, - packageName, packagesForUid, visibleVols, sandboxId, + packageName, packagesForUid, sandboxId, useBlastulaPool, zygoteArgs); } catch (ZygoteStartFailedEx ex) { Log.e(LOG_TAG, @@ -531,7 +529,6 @@ public class ZygoteProcess { * that has its state cloned from this zygote process. * @param packageName null-ok the name of the package this process belongs to. * @param packagesForUid null-ok all the packages with the same uid as this process. - * @param visibleVols null-ok storage volumes that can be accessed by this process. * @param extraArgs Additional arguments to supply to the zygote process. * @return An object that describes the result of the attempt to start the process. * @throws ZygoteStartFailedEx if process start failed for any reason @@ -550,7 +547,6 @@ public class ZygoteProcess { boolean startChildZygote, @Nullable String packageName, @Nullable String[] packagesForUid, - @Nullable String[] visibleVols, @Nullable String sandboxId, boolean useBlastulaPool, @Nullable String[] extraArgs) @@ -638,19 +634,6 @@ public class ZygoteProcess { argsForZygote.add(sb.toString()); } - if (visibleVols != null && visibleVols.length > 0) { - final StringBuilder sb = new StringBuilder(); - sb.append("--visible-vols="); - - for (int i = 0; i < visibleVols.length; ++i) { - if (i != 0) { - sb.append(','); - } - sb.append(visibleVols[i]); - } - argsForZygote.add(sb.toString()); - } - if (sandboxId != null) { argsForZygote.add("--sandbox-id=" + sandboxId); } @@ -1061,7 +1044,7 @@ public class ZygoteProcess { gids, runtimeFlags, 0 /* mountExternal */, 0 /* targetSdkVersion */, seInfo, abi, instructionSet, null /* appDataDir */, null /* invokeWith */, true /* startChildZygote */, null /* packageName */, - null /* packagesForUid */, null /* visibleVolumes */, null /* sandboxId */, + null /* packagesForUid */, null /* sandboxId */, false /* useBlastulaPool */, extraArgs); } catch (ZygoteStartFailedEx ex) { throw new RuntimeException("Starting child-zygote through Zygote failed", ex); diff --git a/core/java/android/os/storage/StorageManagerInternal.java b/core/java/android/os/storage/StorageManagerInternal.java index 03b2c2c4c6f2..f1c313838731 100644 --- a/core/java/android/os/storage/StorageManagerInternal.java +++ b/core/java/android/os/storage/StorageManagerInternal.java @@ -109,11 +109,6 @@ public abstract class StorageManagerInternal { @Nullable String sharedUserId, int userId); /** - * @return Labels of storage volumes that are visible to the given userId. - */ - public abstract String[] getVisibleVolumesForUser(int userId); - - /** * A listener for reset events in the StorageManagerService. */ public interface ResetListener { diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java index 0604ab2f7237..b2fecaf52a5c 100644 --- a/core/java/com/android/internal/os/Zygote.java +++ b/core/java/com/android/internal/os/Zygote.java @@ -236,14 +236,14 @@ public final class Zygote { public static int forkAndSpecialize(int uid, int gid, int[] gids, int runtimeFlags, int[][] rlimits, int mountExternal, String seInfo, String niceName, int[] fdsToClose, int[] fdsToIgnore, boolean startChildZygote, String instructionSet, String appDataDir, - String packageName, String[] packagesForUID, String[] visibleVolIDs, String sandboxId) { + String packageName, String[] packagesForUID, String sandboxId) { ZygoteHooks.preFork(); // Resets nice priority for zygote process. resetNicePriority(); int pid = nativeForkAndSpecialize( uid, gid, gids, runtimeFlags, rlimits, mountExternal, seInfo, niceName, fdsToClose, fdsToIgnore, startChildZygote, instructionSet, appDataDir, packageName, - packagesForUID, visibleVolIDs, sandboxId); + packagesForUID, sandboxId); // Enable tracing as soon as possible for the child process. if (pid == 0) { Trace.setTracingEnabled(true, runtimeFlags); @@ -258,7 +258,7 @@ public final class Zygote { private static native int nativeForkAndSpecialize(int uid, int gid, int[] gids, int runtimeFlags, int[][] rlimits, int mountExternal, String seInfo, String niceName, int[] fdsToClose, int[] fdsToIgnore, boolean startChildZygote, String instructionSet, - String appDataDir, String packageName, String[] packagesForUID, String[] visibleVolIDs, + String appDataDir, String packageName, String[] packagesForUID, String sandboxId); /** @@ -285,11 +285,11 @@ public final class Zygote { public static void specializeBlastula(int uid, int gid, int[] gids, int runtimeFlags, int[][] rlimits, int mountExternal, String seInfo, String niceName, boolean startChildZygote, String instructionSet, String appDataDir, String packageName, - String[] packagesForUID, String[] visibleVolIDs, String sandboxId) { + String[] packagesForUID, String sandboxId) { nativeSpecializeBlastula(uid, gid, gids, runtimeFlags, rlimits, mountExternal, seInfo, niceName, startChildZygote, instructionSet, appDataDir, - packageName, packagesForUID, visibleVolIDs, sandboxId); + packageName, packagesForUID, sandboxId); // Enable tracing as soon as possible for the child process. Trace.setTracingEnabled(true, runtimeFlags); @@ -309,7 +309,7 @@ public final class Zygote { private static native void nativeSpecializeBlastula(int uid, int gid, int[] gids, int runtimeFlags, int[][] rlimits, int mountExternal, String seInfo, String niceName, boolean startChildZygote, String instructionSet, String appDataDir, String packageName, - String[] packagesForUID, String[] visibleVolIDs, String sandboxId); + String[] packagesForUID, String sandboxId); /** * Called to do any initialization before starting an application. @@ -600,7 +600,7 @@ public final class Zygote { args.mRuntimeFlags, rlimits, args.mMountExternal, args.mSeInfo, args.mNiceName, args.mStartChildZygote, args.mInstructionSet, args.mAppDataDir, args.mPackageName, - args.mPackagesForUid, args.mVisibleVolIds, args.mSandboxId); + args.mPackagesForUid, args.mSandboxId); if (args.mNiceName != null) { Process.setArgV0(args.mNiceName); diff --git a/core/java/com/android/internal/os/ZygoteArguments.java b/core/java/com/android/internal/os/ZygoteArguments.java index c24a9e084293..55b2e87bb24f 100644 --- a/core/java/com/android/internal/os/ZygoteArguments.java +++ b/core/java/com/android/internal/os/ZygoteArguments.java @@ -116,9 +116,6 @@ class ZygoteArguments { /** from --packages-for-uid */ String[] mPackagesForUid; - /** from --visible-vols */ - String[] mVisibleVolIds; - /** from --sandbox-id */ String mSandboxId; @@ -395,8 +392,6 @@ class ZygoteArguments { mPackageName = arg.substring(arg.indexOf('=') + 1); } else if (arg.startsWith("--packages-for-uid=")) { mPackagesForUid = arg.substring(arg.indexOf('=') + 1).split(","); - } else if (arg.startsWith("--visible-vols=")) { - mVisibleVolIds = arg.substring(arg.indexOf('=') + 1).split(","); } else if (arg.startsWith("--sandbox-id=")) { if (mSandboxId != null) { throw new IllegalArgumentException("Duplicate arg specified"); diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java index 8a878e22a7e3..7e1fddc54295 100644 --- a/core/java/com/android/internal/os/ZygoteConnection.java +++ b/core/java/com/android/internal/os/ZygoteConnection.java @@ -258,7 +258,7 @@ class ZygoteConnection { parsedArgs.mRuntimeFlags, rlimits, parsedArgs.mMountExternal, parsedArgs.mSeInfo, parsedArgs.mNiceName, fdsToClose, fdsToIgnore, parsedArgs.mStartChildZygote, parsedArgs.mInstructionSet, parsedArgs.mAppDataDir, parsedArgs.mPackageName, - parsedArgs.mPackagesForUid, parsedArgs.mVisibleVolIds, parsedArgs.mSandboxId); + parsedArgs.mPackagesForUid, parsedArgs.mSandboxId); try { if (pid == 0) { diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp index 73e67896443c..656fdcf0f141 100644 --- a/core/jni/com_android_internal_os_Zygote.cpp +++ b/core/jni/com_android_internal_os_Zygote.cpp @@ -736,10 +736,19 @@ static void CreatePkgSandboxSource(const std::string& sandbox_source, fail_fn_t } static void PreparePkgSpecificDirs(const std::vector<std::string>& package_names, - const std::vector<std::string>& volume_labels, bool mount_all_obbs, const std::string& sandbox_id, userid_t user_id, uid_t uid, fail_fn_t fail_fn) { - for (auto& label : volume_labels) { + std::unique_ptr<DIR, decltype(&closedir)> dirp(opendir("/storage"), closedir); + if (!dirp) { + fail_fn(CREATE_ERROR("Failed to opendir /storage: %s", strerror(errno))); + } + struct dirent* ent; + while ((ent = readdir(dirp.get()))) { + if (!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..") || !strcmp(ent->d_name, "self")) { + continue; + } + std::string label(ent->d_name); + std::string mnt_source = StringPrintf("/mnt/runtime/write/%s", label.c_str()); std::string mnt_target = StringPrintf("/storage/%s", label.c_str()); if (label == "emulated") { @@ -819,7 +828,7 @@ static void HandleMountModeInstaller(int mount_mode, static void MountEmulatedStorage(uid_t uid, jint mount_mode, bool force_mount_namespace, const std::string& package_name, const std::vector<std::string>& packages_for_uid, - const std::vector<std::string>& visible_vol_ids, const std::string& sandbox_id, + const std::string& sandbox_id, fail_fn_t fail_fn) { // See storage config details at http://source.android.com/tech/storage/ @@ -878,16 +887,16 @@ static void MountEmulatedStorage(uid_t uid, jint mount_mode, userid_t user_id = multiuser_get_user_id(uid); CreatePkgSandboxTarget(user_id, fail_fn); - std::string pkgSandboxDir = StringPrintf("/mnt/user/%d/package", user_id); - if (TEMP_FAILURE_RETRY(mount(pkgSandboxDir.c_str(), "/storage", + std::string pkg_sandbox_dir = StringPrintf("/mnt/user/%d/package", user_id); + if (TEMP_FAILURE_RETRY(mount(pkg_sandbox_dir.c_str(), "/storage", nullptr, MS_BIND | MS_REC | MS_SLAVE, nullptr)) == -1) { fail_fn(CREATE_ERROR("Failed to mount %s to /storage: %s", - pkgSandboxDir.c_str(), strerror(errno))); + pkg_sandbox_dir.c_str(), strerror(errno))); } HandleMountModeInstaller(mount_mode, user_id, sandbox_id, fail_fn); - PreparePkgSpecificDirs(packages_for_uid, visible_vol_ids, + PreparePkgSpecificDirs(packages_for_uid, mount_mode == MOUNT_EXTERNAL_INSTALLER, sandbox_id, user_id, uid, fail_fn); } } else { @@ -900,16 +909,16 @@ static void MountEmulatedStorage(uid_t uid, jint mount_mode, // Mount user-specific symlink helper into place userid_t user_id = multiuser_get_user_id(uid); - const String8 userSource(String8::format("/mnt/user/%d", user_id)); - if (fs_prepare_dir(userSource.string(), 0751, 0, 0) == -1) { + const String8 user_source(String8::format("/mnt/user/%d", user_id)); + if (fs_prepare_dir(user_source.string(), 0751, 0, 0) == -1) { fail_fn(CREATE_ERROR("fs_prepare_dir failed on %s", - userSource.string())); + user_source.string())); } - if (TEMP_FAILURE_RETRY(mount(userSource.string(), "/storage/self", + if (TEMP_FAILURE_RETRY(mount(user_source.string(), "/storage/self", nullptr, MS_BIND, nullptr)) == -1) { fail_fn(CREATE_ERROR("Failed to mount %s to /storage/self: %s", - userSource.string(), strerror(errno))); + user_source.string(), strerror(errno))); } } } @@ -1224,7 +1233,7 @@ static void SpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArray gids, bool is_child_zygote, jstring managed_instruction_set, jstring managed_app_data_dir, jstring managed_package_name, jobjectArray managed_pacakges_for_uid, - jobjectArray managed_visible_vol_ids, jstring managed_sandbox_id) { + jstring managed_sandbox_id) { const char* process_name = is_system_server ? "system_server" : "zygote"; auto fail_fn = std::bind(ZygoteFailure, env, process_name, managed_nice_name, _1); auto extract_fn = std::bind(ExtractJString, env, process_name, managed_nice_name, _1); @@ -1272,12 +1281,8 @@ static void SpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArray gids, ExtractJStringArray(env, process_name, managed_nice_name, managed_pacakges_for_uid). value_or(std::vector<std::string>()); - std::vector<std::string> visible_vol_ids = - ExtractJStringArray(env, process_name, managed_nice_name, managed_visible_vol_ids). - value_or(std::vector<std::string>()); - MountEmulatedStorage(uid, mount_external, use_native_bridge, package_name.value(), - packages_for_uid, visible_vol_ids, sandbox_id.value_or(""), fail_fn); + packages_for_uid, sandbox_id.value_or(""), fail_fn); // If this zygote isn't root, it won't be able to create a process group, // since the directory is owned by root. @@ -1580,7 +1585,7 @@ static jint com_android_internal_os_Zygote_nativeForkAndSpecialize( jint mount_external, jstring se_info, jstring nice_name, jintArray managed_fds_to_close, jintArray managed_fds_to_ignore, jboolean is_child_zygote, jstring instruction_set, jstring app_data_dir, jstring package_name, - jobjectArray packages_for_uid, jobjectArray visible_vol_ids, jstring sandbox_id) { + jobjectArray packages_for_uid, jstring sandbox_id) { jlong capabilities = CalculateCapabilities(env, uid, gid, gids, is_child_zygote); if (UNLIKELY(managed_fds_to_close == nullptr)) { @@ -1612,7 +1617,7 @@ static jint com_android_internal_os_Zygote_nativeForkAndSpecialize( capabilities, capabilities, mount_external, se_info, nice_name, false, is_child_zygote == JNI_TRUE, instruction_set, app_data_dir, - package_name, packages_for_uid, visible_vol_ids, sandbox_id); + package_name, packages_for_uid, sandbox_id); } return pid; } @@ -1638,7 +1643,7 @@ static jint com_android_internal_os_Zygote_nativeForkSystemServer( SpecializeCommon(env, uid, gid, gids, runtime_flags, rlimits, permitted_capabilities, effective_capabilities, MOUNT_EXTERNAL_DEFAULT, nullptr, nullptr, true, - false, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); + false, nullptr, nullptr, nullptr, nullptr, nullptr); } else if (pid > 0) { // The zygote process checks whether the child process has died or not. ALOGI("System server process %d has been created", pid); @@ -1792,7 +1797,7 @@ static void com_android_internal_os_Zygote_nativeSpecializeBlastula( jint runtime_flags, jobjectArray rlimits, jint mount_external, jstring se_info, jstring nice_name, jboolean is_child_zygote, jstring instruction_set, jstring app_data_dir, - jstring package_name, jobjectArray packages_for_uid, jobjectArray visible_vol_ids, + jstring package_name, jobjectArray packages_for_uid, jstring sandbox_id) { jlong capabilities = CalculateCapabilities(env, uid, gid, gids, is_child_zygote); @@ -1800,7 +1805,7 @@ static void com_android_internal_os_Zygote_nativeSpecializeBlastula( capabilities, capabilities, mount_external, se_info, nice_name, false, is_child_zygote == JNI_TRUE, instruction_set, app_data_dir, - package_name, packages_for_uid, visible_vol_ids, sandbox_id); + package_name, packages_for_uid, sandbox_id); } /** @@ -1891,7 +1896,7 @@ static const JNINativeMethod gMethods[] = { { "nativeSecurityInit", "()V", (void *) com_android_internal_os_Zygote_nativeSecurityInit }, { "nativeForkAndSpecialize", - "(II[II[[IILjava/lang/String;Ljava/lang/String;[I[IZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)I", + "(II[II[[IILjava/lang/String;Ljava/lang/String;[I[IZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)I", (void *) com_android_internal_os_Zygote_nativeForkAndSpecialize }, { "nativeForkSystemServer", "(II[II[[IJJ)I", (void *) com_android_internal_os_Zygote_nativeForkSystemServer }, @@ -1906,7 +1911,7 @@ static const JNINativeMethod gMethods[] = { { "nativeForkBlastula", "(II[I)I", (void *) com_android_internal_os_Zygote_nativeForkBlastula }, { "nativeSpecializeBlastula", - "(II[II[[IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V", + "(II[II[[IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V", (void *) com_android_internal_os_Zygote_nativeSpecializeBlastula }, { "nativeGetSocketFDs", "(Z)V", (void *) com_android_internal_os_Zygote_nativeGetSocketFDs }, diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index a5eab8550e71..ada3947477de 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -347,12 +347,6 @@ class StorageManagerService extends IStorageManager.Stub @GuardedBy("mPackagesLock") private final SparseArray<ArraySet<String>> mPackages = new SparseArray<>(); - /** - * List of volumes visible to any user. - * TODO: may be have a map of userId -> volumes? - */ - private final CopyOnWriteArrayList<VolumeInfo> mVisibleVols = new CopyOnWriteArrayList<>(); - private volatile int mCurrentUserId = UserHandle.USER_SYSTEM; /** Holding lock for AppFuse business */ @@ -956,8 +950,6 @@ class StorageManagerService extends IStorageManager.Stub addInternalVolumeLocked(); } - mVisibleVols.clear(); - try { mVold.reset(); @@ -1895,9 +1887,6 @@ class StorageManagerService extends IStorageManager.Stub private void mount(VolumeInfo vol) { try { mVold.mount(vol.id, vol.mountFlags, vol.mountUserId); - if ((vol.mountFlags & VolumeInfo.MOUNT_FLAG_VISIBLE) != 0) { - mVisibleVols.add(vol); - } } catch (Exception e) { Slog.wtf(TAG, e); } @@ -1914,9 +1903,6 @@ class StorageManagerService extends IStorageManager.Stub private void unmount(VolumeInfo vol) { try { mVold.unmount(vol.id); - if ((vol.mountFlags & VolumeInfo.MOUNT_FLAG_VISIBLE) != 0) { - mVisibleVols.remove(vol); - } } catch (Exception e) { Slog.wtf(TAG, e); } @@ -3851,14 +3837,6 @@ class StorageManagerService extends IStorageManager.Stub pw.decreaseIndent(); pw.println(); - pw.println("mVisibleVols:"); - pw.increaseIndent(); - for (int i = 0; i < mVisibleVols.size(); i++) { - mVisibleVols.get(i).dump(pw); - } - pw.decreaseIndent(); - - pw.println(); pw.println("Primary storage UUID: " + mPrimaryStorageUuid); pw.println(); @@ -4056,38 +4034,9 @@ class StorageManagerService extends IStorageManager.Stub } @Override - public String[] getVisibleVolumesForUser(int userId) { - synchronized (mLock) { - if (!ArrayUtils.contains(mSystemUnlockedUsers, userId)) { - return EmptyArray.STRING; - } - } - final ArrayList<String> visibleVolsForUser = new ArrayList<>(); - for (int i = mVisibleVols.size() - 1; i >= 0; --i) { - final VolumeInfo vol = mVisibleVols.get(i); - if (vol.isVisibleForUser(userId)) { - visibleVolsForUser.add(getVolumeLabel(vol)); - } - } - return visibleVolsForUser.toArray(new String[visibleVolsForUser.size()]); - } - - @Override public String getSandboxId(String packageName) { return StorageManagerService.this.getSandboxId(packageName, mPmInternal.getSharedUserIdForPackage(packageName)); } - - private String getVolumeLabel(VolumeInfo vol) { - // STOPSHIP: Label needs to part of VolumeInfo and need to be passed on from vold - switch (vol.getType()) { - case VolumeInfo.TYPE_EMULATED: - return "emulated"; - case VolumeInfo.TYPE_PUBLIC: - return vol.fsUuid == null ? vol.id : vol.fsUuid; - default: - return null; - } - } } } diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java index 3a61dd987cf5..30798a87a060 100644 --- a/services/core/java/com/android/server/am/ProcessList.java +++ b/services/core/java/com/android/server/am/ProcessList.java @@ -1764,8 +1764,6 @@ public final class ProcessList { .getPackagesForUid(uid); final StorageManagerInternal storageManagerInternal = LocalServices.getService(StorageManagerInternal.class); - final String[] visibleVolIds = storageManagerInternal - .getVisibleVolumesForUser(UserHandle.getUserId(uid)); final String sandboxId = storageManagerInternal.getSandboxId(app.info.packageName); Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "Start proc: " + app.processName); @@ -1776,7 +1774,7 @@ public final class ProcessList { app.processName, uid, uid, gids, runtimeFlags, mountExternal, app.info.targetSdkVersion, seInfo, requiredAbi, instructionSet, app.info.dataDir, null, app.info.packageName, - packageNames, visibleVolIds, sandboxId, + packageNames, sandboxId, new String[] {PROC_START_SEQ_IDENT + app.startSeq}); } else if (hostingType.equals("app_zygote")) { final AppZygote appZygote = createAppZygoteForProcessIfNeeded(app); @@ -1785,14 +1783,14 @@ public final class ProcessList { app.processName, uid, uid, gids, runtimeFlags, mountExternal, app.info.targetSdkVersion, seInfo, requiredAbi, instructionSet, app.info.dataDir, null, app.info.packageName, - packageNames, visibleVolIds, sandboxId, /*useBlastulaPool=*/ false, + packageNames, sandboxId, /*useBlastulaPool=*/ false, new String[] {PROC_START_SEQ_IDENT + app.startSeq}); } else { startResult = Process.start(entryPoint, app.processName, uid, uid, gids, runtimeFlags, mountExternal, app.info.targetSdkVersion, seInfo, requiredAbi, instructionSet, app.info.dataDir, invokeWith, app.info.packageName, - packageNames, visibleVolIds, sandboxId, + packageNames, sandboxId, new String[] {PROC_START_SEQ_IDENT + app.startSeq}); } checkSlow(startTime, "startProcess: returned from zygote!"); |