Loading core/jni/com_android_internal_os_Zygote.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ #endif #define LOG_TAG "Zygote" #define ATRACE_TAG ATRACE_TAG_DALVIK #include <async_safe/log.h> Loading Loading @@ -73,6 +74,7 @@ #include <cutils/multiuser.h> #include <private/android_filesystem_config.h> #include <utils/String8.h> #include <utils/Trace.h> #include <selinux/android.h> #include <seccomp_policy.h> #include <stats_event_list.h> Loading Loading @@ -590,6 +592,8 @@ static void SetSchedulerPolicy(fail_fn_t fail_fn) { } static int UnmountTree(const char* path) { ATRACE_CALL(); size_t path_len = strlen(path); FILE* fp = setmntent("/proc/mounts", "r"); Loading Loading @@ -632,6 +636,8 @@ static void CreateDir(const std::string& dir, } static void CreatePkgSandboxTarget(userid_t user_id, fail_fn_t fail_fn) { ATRACE_CALL(); // Create /mnt/user/0/package std::string pkg_sandbox_dir = StringPrintf("/mnt/user/%d", user_id); CreateDir(pkg_sandbox_dir, 0751, AID_ROOT, AID_ROOT, fail_fn); Loading @@ -655,6 +661,8 @@ static void MountPkgSpecificDir(const std::string& mnt_source_root, uid_t uid, const char* dir_name, fail_fn_t fail_fn) { ATRACE_CALL(); std::string mnt_source_dir = StringPrintf("%s/Android/%s/%s", mnt_source_root.c_str(), dir_name, package_name.c_str()); Loading @@ -667,6 +675,8 @@ static void MountPkgSpecificDir(const std::string& mnt_source_root, static void CreateSubDirs(int parent_fd, const std::string& parent_path, const std::vector<std::string>& sub_dirs, fail_fn_t fail_fn) { ATRACE_CALL(); for (auto& dir_name : sub_dirs) { struct stat sb; if (TEMP_FAILURE_RETRY(fstatat(parent_fd, dir_name.c_str(), &sb, 0)) == 0) { Loading @@ -691,6 +701,8 @@ static void EnsurePkgSpecificDirs(const std::string& path, const std::vector<std::string>& package_names, bool create_sandbox_dir, fail_fn_t fail_fn) { ATRACE_CALL(); std::string android_dir = StringPrintf("%s/Android", path.c_str()); android::base::unique_fd android_fd(open(android_dir.c_str(), O_RDONLY | O_DIRECTORY | O_CLOEXEC)); Loading Loading @@ -734,6 +746,7 @@ static void EnsurePkgSpecificDirs(const std::string& path, } static void CreatePkgSandboxSource(const std::string& sandbox_source, fail_fn_t fail_fn) { ATRACE_CALL(); struct stat sb; if (TEMP_FAILURE_RETRY(stat(sandbox_source.c_str(), &sb)) == 0) { Loading @@ -756,6 +769,8 @@ static void CreatePkgSandboxSource(const std::string& sandbox_source, fail_fn_t static void PreparePkgSpecificDirs(const std::vector<std::string>& package_names, bool mount_all_obbs, const std::string& sandbox_id, userid_t user_id, uid_t uid, fail_fn_t fail_fn) { ATRACE_CALL(); std::unique_ptr<DIR, decltype(&closedir)> dirp(opendir("/storage"), closedir); if (!dirp) { fail_fn(CREATE_ERROR("Failed to opendir /storage: %s", strerror(errno))); Loading Loading @@ -812,6 +827,8 @@ static void HandleMountModeInstaller(int mount_mode, userid_t user_id, const std::string& sandbox_id, fail_fn_t fail_fn) { ATRACE_CALL(); std::string obb_mount_dir = StringPrintf("/mnt/user/%d/obb_mount", user_id); std::string obb_mount_file = StringPrintf("%s/%s", obb_mount_dir.c_str(), sandbox_id.c_str()); if (mount_mode == MOUNT_EXTERNAL_INSTALLER) { Loading Loading @@ -849,6 +866,7 @@ static void MountEmulatedStorage(uid_t uid, jint mount_mode, const std::string& sandbox_id, fail_fn_t fail_fn) { // See storage config details at http://source.android.com/tech/storage/ ATRACE_CALL(); String8 storage_source; if (mount_mode == MOUNT_EXTERNAL_DEFAULT) { Loading Loading
core/jni/com_android_internal_os_Zygote.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ #endif #define LOG_TAG "Zygote" #define ATRACE_TAG ATRACE_TAG_DALVIK #include <async_safe/log.h> Loading Loading @@ -73,6 +74,7 @@ #include <cutils/multiuser.h> #include <private/android_filesystem_config.h> #include <utils/String8.h> #include <utils/Trace.h> #include <selinux/android.h> #include <seccomp_policy.h> #include <stats_event_list.h> Loading Loading @@ -590,6 +592,8 @@ static void SetSchedulerPolicy(fail_fn_t fail_fn) { } static int UnmountTree(const char* path) { ATRACE_CALL(); size_t path_len = strlen(path); FILE* fp = setmntent("/proc/mounts", "r"); Loading Loading @@ -632,6 +636,8 @@ static void CreateDir(const std::string& dir, } static void CreatePkgSandboxTarget(userid_t user_id, fail_fn_t fail_fn) { ATRACE_CALL(); // Create /mnt/user/0/package std::string pkg_sandbox_dir = StringPrintf("/mnt/user/%d", user_id); CreateDir(pkg_sandbox_dir, 0751, AID_ROOT, AID_ROOT, fail_fn); Loading @@ -655,6 +661,8 @@ static void MountPkgSpecificDir(const std::string& mnt_source_root, uid_t uid, const char* dir_name, fail_fn_t fail_fn) { ATRACE_CALL(); std::string mnt_source_dir = StringPrintf("%s/Android/%s/%s", mnt_source_root.c_str(), dir_name, package_name.c_str()); Loading @@ -667,6 +675,8 @@ static void MountPkgSpecificDir(const std::string& mnt_source_root, static void CreateSubDirs(int parent_fd, const std::string& parent_path, const std::vector<std::string>& sub_dirs, fail_fn_t fail_fn) { ATRACE_CALL(); for (auto& dir_name : sub_dirs) { struct stat sb; if (TEMP_FAILURE_RETRY(fstatat(parent_fd, dir_name.c_str(), &sb, 0)) == 0) { Loading @@ -691,6 +701,8 @@ static void EnsurePkgSpecificDirs(const std::string& path, const std::vector<std::string>& package_names, bool create_sandbox_dir, fail_fn_t fail_fn) { ATRACE_CALL(); std::string android_dir = StringPrintf("%s/Android", path.c_str()); android::base::unique_fd android_fd(open(android_dir.c_str(), O_RDONLY | O_DIRECTORY | O_CLOEXEC)); Loading Loading @@ -734,6 +746,7 @@ static void EnsurePkgSpecificDirs(const std::string& path, } static void CreatePkgSandboxSource(const std::string& sandbox_source, fail_fn_t fail_fn) { ATRACE_CALL(); struct stat sb; if (TEMP_FAILURE_RETRY(stat(sandbox_source.c_str(), &sb)) == 0) { Loading @@ -756,6 +769,8 @@ static void CreatePkgSandboxSource(const std::string& sandbox_source, fail_fn_t static void PreparePkgSpecificDirs(const std::vector<std::string>& package_names, bool mount_all_obbs, const std::string& sandbox_id, userid_t user_id, uid_t uid, fail_fn_t fail_fn) { ATRACE_CALL(); std::unique_ptr<DIR, decltype(&closedir)> dirp(opendir("/storage"), closedir); if (!dirp) { fail_fn(CREATE_ERROR("Failed to opendir /storage: %s", strerror(errno))); Loading Loading @@ -812,6 +827,8 @@ static void HandleMountModeInstaller(int mount_mode, userid_t user_id, const std::string& sandbox_id, fail_fn_t fail_fn) { ATRACE_CALL(); std::string obb_mount_dir = StringPrintf("/mnt/user/%d/obb_mount", user_id); std::string obb_mount_file = StringPrintf("%s/%s", obb_mount_dir.c_str(), sandbox_id.c_str()); if (mount_mode == MOUNT_EXTERNAL_INSTALLER) { Loading Loading @@ -849,6 +866,7 @@ static void MountEmulatedStorage(uid_t uid, jint mount_mode, const std::string& sandbox_id, fail_fn_t fail_fn) { // See storage config details at http://source.android.com/tech/storage/ ATRACE_CALL(); String8 storage_source; if (mount_mode == MOUNT_EXTERNAL_DEFAULT) { Loading