Loading cmds/installd/InstalldNativeService.cpp +41 −14 Original line number Diff line number Diff line Loading @@ -101,6 +101,7 @@ static constexpr const char* IDMAP_SUFFIX = "@idmap"; 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 @@ -592,12 +593,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 @@ -688,16 +698,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 @@ -2778,6 +2798,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 @@ -2785,6 +2811,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 @@ -101,6 +101,7 @@ static constexpr const char* IDMAP_SUFFIX = "@idmap"; 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 @@ -592,12 +593,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 @@ -688,16 +698,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 @@ -2778,6 +2798,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 @@ -2785,6 +2811,7 @@ binder::Status InstalldNativeService::invalidateMounts() { } #endif } } return ok(); } Loading