Loading install/include/install/wipe_device.h +1 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ // Wipes the current A/B device, with a secure wipe of all the partitions in RECOVERY_WIPE. bool WipeAbDevice(Device* device, size_t wipe_package_size); bool WipeAbDevice(Device* device, Package* wipe_package); // Reads the "recovery.wipe" entry in the zip archive returns a list of partitions to wipe. std::vector<std::string> GetWipePartitionList(Package* wipe_package); install/install.cpp +17 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ #include "install/spl_check.h" #include "install/wipe_data.h" #include "install/wipe_device.h" #include "otautil/error_code.h" #include "otautil/package.h" #include "otautil/paths.h" Loading @@ -71,6 +72,8 @@ static constexpr float VERIFICATION_PROGRESS_FRACTION = 0.25; // The charater used to separate dynamic fingerprints. e.x. sargo|aosp-sargo static const char* FINGERPRING_SEPARATOR = "|"; static constexpr auto&& RELEASE_KEYS_TAG = "release-keys"; // If brick packages are smaller than |MEMORY_PACKAGE_LIMIT|, read the entire package into memory static constexpr size_t MEMORY_PACKAGE_LIMIT = 1024 * 1024; static std::condition_variable finish_log_temperature; static bool isInStringList(const std::string& target_token, const std::string& str_list, Loading Loading @@ -382,7 +385,20 @@ static InstallResult TryUpdateBinary(Package* package, bool* wipe_cache, return INSTALL_CORRUPT; } bool package_is_ab = get_value(metadata, "ota-type") == OtaTypeToString(OtaType::AB); const bool package_is_ab = get_value(metadata, "ota-type") == OtaTypeToString(OtaType::AB); const bool package_is_brick = get_value(metadata, "ota-type") == OtaTypeToString(OtaType::BRICK); if (package_is_brick) { LOG(INFO) << "Installing a brick package"; if (package->GetType() == PackageType::kFile && package->GetPackageSize() < MEMORY_PACKAGE_LIMIT) { std::vector<uint8_t> content(package->GetPackageSize()); if (package->ReadFullyAtOffset(content.data(), content.size(), 0)) { auto memory_package = Package::CreateMemoryPackage(std::move(content), {}); return WipeAbDevice(device, memory_package.get()) ? INSTALL_SUCCESS : INSTALL_ERROR; } } return WipeAbDevice(device, package) ? INSTALL_SUCCESS : INSTALL_ERROR; } bool device_supports_ab = android::base::GetBoolProperty("ro.build.ab_update", false); bool ab_device_supports_nonab = android::base::GetBoolProperty("ro.virtual_ab.allow_non_ab", false); Loading install/wipe_device.cpp +6 −2 Original line number Diff line number Diff line Loading @@ -182,13 +182,17 @@ bool WipeAbDevice(Device* device, size_t wipe_package_size) { LOG(ERROR) << "Failed to open wipe package"; return false; } return WipeAbDevice(device, wipe_package.get()); } if (!CheckWipePackage(wipe_package.get(), ui)) { bool WipeAbDevice(Device* device, Package* wipe_package) { auto ui = device->GetUI(); if (!CheckWipePackage(wipe_package, ui)) { LOG(ERROR) << "Failed to verify wipe package"; return false; } auto partition_list = GetWipePartitionList(wipe_package.get()); auto partition_list = GetWipePartitionList(wipe_package); if (partition_list.empty()) { LOG(ERROR) << "Empty wipe ab partition list"; return false; Loading Loading
install/include/install/wipe_device.h +1 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ // Wipes the current A/B device, with a secure wipe of all the partitions in RECOVERY_WIPE. bool WipeAbDevice(Device* device, size_t wipe_package_size); bool WipeAbDevice(Device* device, Package* wipe_package); // Reads the "recovery.wipe" entry in the zip archive returns a list of partitions to wipe. std::vector<std::string> GetWipePartitionList(Package* wipe_package);
install/install.cpp +17 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ #include "install/spl_check.h" #include "install/wipe_data.h" #include "install/wipe_device.h" #include "otautil/error_code.h" #include "otautil/package.h" #include "otautil/paths.h" Loading @@ -71,6 +72,8 @@ static constexpr float VERIFICATION_PROGRESS_FRACTION = 0.25; // The charater used to separate dynamic fingerprints. e.x. sargo|aosp-sargo static const char* FINGERPRING_SEPARATOR = "|"; static constexpr auto&& RELEASE_KEYS_TAG = "release-keys"; // If brick packages are smaller than |MEMORY_PACKAGE_LIMIT|, read the entire package into memory static constexpr size_t MEMORY_PACKAGE_LIMIT = 1024 * 1024; static std::condition_variable finish_log_temperature; static bool isInStringList(const std::string& target_token, const std::string& str_list, Loading Loading @@ -382,7 +385,20 @@ static InstallResult TryUpdateBinary(Package* package, bool* wipe_cache, return INSTALL_CORRUPT; } bool package_is_ab = get_value(metadata, "ota-type") == OtaTypeToString(OtaType::AB); const bool package_is_ab = get_value(metadata, "ota-type") == OtaTypeToString(OtaType::AB); const bool package_is_brick = get_value(metadata, "ota-type") == OtaTypeToString(OtaType::BRICK); if (package_is_brick) { LOG(INFO) << "Installing a brick package"; if (package->GetType() == PackageType::kFile && package->GetPackageSize() < MEMORY_PACKAGE_LIMIT) { std::vector<uint8_t> content(package->GetPackageSize()); if (package->ReadFullyAtOffset(content.data(), content.size(), 0)) { auto memory_package = Package::CreateMemoryPackage(std::move(content), {}); return WipeAbDevice(device, memory_package.get()) ? INSTALL_SUCCESS : INSTALL_ERROR; } } return WipeAbDevice(device, package) ? INSTALL_SUCCESS : INSTALL_ERROR; } bool device_supports_ab = android::base::GetBoolProperty("ro.build.ab_update", false); bool ab_device_supports_nonab = android::base::GetBoolProperty("ro.virtual_ab.allow_non_ab", false); Loading
install/wipe_device.cpp +6 −2 Original line number Diff line number Diff line Loading @@ -182,13 +182,17 @@ bool WipeAbDevice(Device* device, size_t wipe_package_size) { LOG(ERROR) << "Failed to open wipe package"; return false; } return WipeAbDevice(device, wipe_package.get()); } if (!CheckWipePackage(wipe_package.get(), ui)) { bool WipeAbDevice(Device* device, Package* wipe_package) { auto ui = device->GetUI(); if (!CheckWipePackage(wipe_package, ui)) { LOG(ERROR) << "Failed to verify wipe package"; return false; } auto partition_list = GetWipePartitionList(wipe_package.get()); auto partition_list = GetWipePartitionList(wipe_package); if (partition_list.empty()) { LOG(ERROR) << "Empty wipe ab partition list"; return false; Loading