Loading cmds/installd/InstalldNativeService.cpp +41 −14 Original line number Diff line number Diff line Loading @@ -97,6 +97,7 @@ static constexpr const char* CODE_CACHE_DIR_POSTFIX = "/code_cache"; static constexpr int kVerityPageSize = 4096; static constexpr size_t kSha256Size = 32; static constexpr const char* kPropApkVerityMode = "ro.apk_verity.mode"; static constexpr const char* kFuseProp = "persist.sys.fuse"; namespace { Loading Loading @@ -588,12 +589,21 @@ binder::Status InstalldNativeService::clearAppData(const std::unique_ptr<std::st std::lock_guard<std::recursive_mutex> lock(mMountsLock); for (const auto& n : mStorageMounts) { auto extPath = n.second; if (android::base::GetBoolProperty(kFuseProp, false)) { std::regex re("^\\/mnt\\/pass_through\\/[0-9]+\\/emulated"); if (std::regex_match(extPath, re)) { extPath += "/" + std::to_string(userId); } } else { if (n.first.compare(0, 14, "/mnt/media_rw/") != 0) { extPath += StringPrintf("/%d", userId); } else if (userId != 0) { // TODO: support devices mounted under secondary users continue; } } if (flags & FLAG_CLEAR_CACHE_ONLY) { // Clear only cached data from shared storage auto path = StringPrintf("%s/Android/data/%s/cache", extPath.c_str(), pkgname); Loading Loading @@ -684,16 +694,26 @@ binder::Status InstalldNativeService::destroyAppData(const std::unique_ptr<std:: std::lock_guard<std::recursive_mutex> lock(mMountsLock); for (const auto& n : mStorageMounts) { auto extPath = n.second; if (android::base::GetBoolProperty(kFuseProp, false)) { std::regex re("^\\/mnt\\/pass_through\\/[0-9]+\\/emulated"); if (std::regex_match(extPath, re)) { extPath += "/" + std::to_string(userId); } } else { if (n.first.compare(0, 14, "/mnt/media_rw/") != 0) { extPath += StringPrintf("/%d", userId); } else if (userId != 0) { // TODO: support devices mounted under secondary users continue; } } auto path = StringPrintf("%s/Android/data/%s", extPath.c_str(), pkgname); if (delete_dir_contents_and_dir(path, true) != 0) { res = error("Failed to delete contents of " + path); } path = StringPrintf("%s/Android/media/%s", extPath.c_str(), pkgname); if (delete_dir_contents_and_dir(path, true) != 0) { res = error("Failed to delete contents of " + path); Loading Loading @@ -2574,6 +2594,12 @@ binder::Status InstalldNativeService::invalidateMounts() { std::getline(in, target, ' '); std::getline(in, ignored); if (android::base::GetBoolProperty(kFuseProp, false)) { if (target.compare(0, 17, "/mnt/pass_through") == 0) { LOG(DEBUG) << "Found storage mount " << source << " at " << target; mStorageMounts[source] = target; } } else { #if !BYPASS_SDCARDFS if (target.compare(0, 21, "/mnt/runtime/default/") == 0) { LOG(DEBUG) << "Found storage mount " << source << " at " << target; Loading @@ -2581,6 +2607,7 @@ binder::Status InstalldNativeService::invalidateMounts() { } #endif } } return ok(); } Loading Loading
cmds/installd/InstalldNativeService.cpp +41 −14 Original line number Diff line number Diff line Loading @@ -97,6 +97,7 @@ static constexpr const char* CODE_CACHE_DIR_POSTFIX = "/code_cache"; static constexpr int kVerityPageSize = 4096; static constexpr size_t kSha256Size = 32; static constexpr const char* kPropApkVerityMode = "ro.apk_verity.mode"; static constexpr const char* kFuseProp = "persist.sys.fuse"; namespace { Loading Loading @@ -588,12 +589,21 @@ binder::Status InstalldNativeService::clearAppData(const std::unique_ptr<std::st std::lock_guard<std::recursive_mutex> lock(mMountsLock); for (const auto& n : mStorageMounts) { auto extPath = n.second; if (android::base::GetBoolProperty(kFuseProp, false)) { std::regex re("^\\/mnt\\/pass_through\\/[0-9]+\\/emulated"); if (std::regex_match(extPath, re)) { extPath += "/" + std::to_string(userId); } } else { if (n.first.compare(0, 14, "/mnt/media_rw/") != 0) { extPath += StringPrintf("/%d", userId); } else if (userId != 0) { // TODO: support devices mounted under secondary users continue; } } if (flags & FLAG_CLEAR_CACHE_ONLY) { // Clear only cached data from shared storage auto path = StringPrintf("%s/Android/data/%s/cache", extPath.c_str(), pkgname); Loading Loading @@ -684,16 +694,26 @@ binder::Status InstalldNativeService::destroyAppData(const std::unique_ptr<std:: std::lock_guard<std::recursive_mutex> lock(mMountsLock); for (const auto& n : mStorageMounts) { auto extPath = n.second; if (android::base::GetBoolProperty(kFuseProp, false)) { std::regex re("^\\/mnt\\/pass_through\\/[0-9]+\\/emulated"); if (std::regex_match(extPath, re)) { extPath += "/" + std::to_string(userId); } } else { if (n.first.compare(0, 14, "/mnt/media_rw/") != 0) { extPath += StringPrintf("/%d", userId); } else if (userId != 0) { // TODO: support devices mounted under secondary users continue; } } auto path = StringPrintf("%s/Android/data/%s", extPath.c_str(), pkgname); if (delete_dir_contents_and_dir(path, true) != 0) { res = error("Failed to delete contents of " + path); } path = StringPrintf("%s/Android/media/%s", extPath.c_str(), pkgname); if (delete_dir_contents_and_dir(path, true) != 0) { res = error("Failed to delete contents of " + path); Loading Loading @@ -2574,6 +2594,12 @@ binder::Status InstalldNativeService::invalidateMounts() { std::getline(in, target, ' '); std::getline(in, ignored); if (android::base::GetBoolProperty(kFuseProp, false)) { if (target.compare(0, 17, "/mnt/pass_through") == 0) { LOG(DEBUG) << "Found storage mount " << source << " at " << target; mStorageMounts[source] = target; } } else { #if !BYPASS_SDCARDFS if (target.compare(0, 21, "/mnt/runtime/default/") == 0) { LOG(DEBUG) << "Found storage mount " << source << " at " << target; Loading @@ -2581,6 +2607,7 @@ binder::Status InstalldNativeService::invalidateMounts() { } #endif } } return ok(); } Loading