aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKelvin Zhang <zhangkelvin@google.com>2022-04-15 20:39:29 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-04-15 20:39:29 +0000
commit384dd713d64cc6e2cb1d0dac70ac44378e3f7786 (patch)
tree119bc5a8390aaeb3b03179154e19b15d92ec1a7c
parent9a79f4529f218714f6d46de8eccddcfacd723691 (diff)
parent3a0abd0b471d9a47a582b59e5902ba8776dfb34c (diff)
downloadupdate_engine-384dd713d64cc6e2cb1d0dac70ac44378e3f7786.tar.gz
Fix crash on ota_extractor am: 93e3810b0c am: 4e54b254b0 am: 3a0abd0b47
Original change: https://android-review.googlesource.com/c/platform/system/update_engine/+/2063610 Change-Id: Id01ee7144658c2bbf7a91363bbb1c5c81386b76f Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--aosp/ota_extractor.cc14
1 files changed, 11 insertions, 3 deletions
diff --git a/aosp/ota_extractor.cc b/aosp/ota_extractor.cc
index 7492bc5a..4a57370f 100644
--- a/aosp/ota_extractor.cc
+++ b/aosp/ota_extractor.cc
@@ -118,15 +118,21 @@ bool ExtractImagesFromOTA(const DeltaArchiveManifest& manifest,
<< " size: " << partition.new_partition_info().size();
const auto output_path =
output_dir_path.Append(partition.partition_name() + ".img").value();
- const auto input_path =
- input_dir_path.Append(partition.partition_name() + ".img").value();
auto out_fd =
std::make_shared<chromeos_update_engine::EintrSafeFileDescriptor>();
TEST_AND_RETURN_FALSE_ERRNO(
out_fd->Open(output_path.c_str(), O_RDWR | O_CREAT, 0644));
auto in_fd =
std::make_shared<chromeos_update_engine::EintrSafeFileDescriptor>();
- TEST_AND_RETURN_FALSE_ERRNO(in_fd->Open(input_path.c_str(), O_RDONLY));
+ if (partition.has_old_partition_info()) {
+ const auto input_path =
+ input_dir_path.Append(partition.partition_name() + ".img").value();
+ LOG(INFO) << "Incremental OTA detected for partition "
+ << partition.partition_name() << " opening source image "
+ << input_path;
+ CHECK(in_fd->Open(input_path.c_str(), O_RDONLY))
+ << " failed to open " << input_path;
+ }
for (const auto& op : partition.operations()) {
if (op.has_src_sha256_hash()) {
@@ -159,9 +165,11 @@ bool ExtractImagesFromOTA(const DeltaArchiveManifest& manifest,
TEST_AND_RETURN_FALSE(executor.ExecuteReplaceOperation(
op, std::move(direct_writer), blob.data(), blob.size()));
} else if (op.type() == InstallOperation::SOURCE_COPY) {
+ CHECK(in_fd->IsOpen());
TEST_AND_RETURN_FALSE(executor.ExecuteSourceCopyOperation(
op, std::move(direct_writer), in_fd));
} else {
+ CHECK(in_fd->IsOpen());
TEST_AND_RETURN_FALSE(executor.ExecuteDiffOperation(
op, std::move(direct_writer), in_fd, blob.data(), blob.size()));
}