aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-09-13 23:23:01 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-09-13 23:23:01 +0000
commit435a046b3bef8555b6e3650f366e381fed2c8ae0 (patch)
tree37505ece70596555ab809612c28053aae4c66b02
parentcb80f5301e6b97e3693d9caa8b9eb641ef751f81 (diff)
parent1814bb4b82f3e1915da8b2547fa6cab4aee6d7c1 (diff)
downloadupdate_engine-android-14.0.0_r18.tar.gz
Change-Id: I097bfab0216fa003add9a2db95ff21127f57b552
-rw-r--r--aosp/hardware_android.cc5
-rw-r--r--payload_consumer/filesystem_verifier_action.cc7
-rw-r--r--payload_consumer/filesystem_verifier_action_unittest.cc7
-rw-r--r--payload_consumer/postinstall_runner_action.cc7
4 files changed, 18 insertions, 8 deletions
diff --git a/aosp/hardware_android.cc b/aosp/hardware_android.cc
index 624cfc99..f8732abd 100644
--- a/aosp/hardware_android.cc
+++ b/aosp/hardware_android.cc
@@ -85,7 +85,7 @@ void SetVbmetaDigestProp(const std::string& value) {
}
std::string CalculateVbmetaDigestForInactiveSlot() {
- AvbSlotVerifyData* avb_slot_data;
+ AvbSlotVerifyData* avb_slot_data{};
auto suffix = fs_mgr_get_other_slot_suffix();
const char* requested_partitions[] = {nullptr};
@@ -105,8 +105,9 @@ std::string CalculateVbmetaDigestForInactiveSlot() {
avb_slot_verify_data_calculate_vbmeta_digest(
avb_slot_data, AVB_DIGEST_TYPE_SHA256, vbmeta_digest);
- std::string encoded_digest =
+ const std::string encoded_digest =
base::HexEncode(vbmeta_digest, AVB_SHA256_DIGEST_SIZE);
+ LOG(INFO) << "vbmeta digest for target slot: " << encoded_digest;
return base::ToLowerASCII(encoded_digest);
}
diff --git a/payload_consumer/filesystem_verifier_action.cc b/payload_consumer/filesystem_verifier_action.cc
index dfbe5137..abfae729 100644
--- a/payload_consumer/filesystem_verifier_action.cc
+++ b/payload_consumer/filesystem_verifier_action.cc
@@ -136,6 +136,13 @@ void FilesystemVerifierAction::Cleanup(ErrorCode code) {
partition_fd_.reset();
// This memory is not used anymore.
buffer_.clear();
+ if (code == ErrorCode::kSuccess && !cancelled_) {
+ if (!dynamic_control_->FinishUpdate(install_plan_.powerwash_required)) {
+ LOG(ERROR) << "Failed to FinishUpdate("
+ << install_plan_.powerwash_required << ")";
+ code = ErrorCode::kFilesystemVerifierError;
+ }
+ }
// If we didn't write verity, partitions were maped. Releaase resource now.
if (!install_plan_.write_verity &&
diff --git a/payload_consumer/filesystem_verifier_action_unittest.cc b/payload_consumer/filesystem_verifier_action_unittest.cc
index b2ed158e..3c3997da 100644
--- a/payload_consumer/filesystem_verifier_action_unittest.cc
+++ b/payload_consumer/filesystem_verifier_action_unittest.cc
@@ -32,6 +32,7 @@
#include <libsnapshot/snapshot_writer.h>
#include <sys/stat.h>
+#include "gmock/gmock-spec-builders.h"
#include "update_engine/common/dynamic_partition_control_stub.h"
#include "update_engine/common/hash_calculator.h"
#include "update_engine/common/mock_dynamic_partition_control.h"
@@ -556,12 +557,13 @@ void FilesystemVerifierActionTest::DoTestVABC(bool clear_target_hash,
install_plan_.write_verity = true;
ASSERT_NO_FATAL_FAILURE(SetHashWithVerity(&part));
}
+ NiceMock<MockDynamicPartitionControl> dynamic_control;
if (clear_target_hash) {
part.target_hash.clear();
+ } else {
+ EXPECT_CALL(dynamic_control, FinishUpdate(0)).WillOnce(Return(true));
}
- NiceMock<MockDynamicPartitionControl> dynamic_control;
-
EnableVABC(&dynamic_control, part.name);
auto open_cow = [part]() {
auto cow_fd = std::make_unique<EintrSafeFileDescriptor>();
@@ -661,6 +663,7 @@ TEST_F(FilesystemVerifierActionTest, VABC_Verity_ReadAfterWrite) {
part.readonly_target_path = target_part_.path();
NiceMock<MockDynamicPartitionControl> dynamic_control;
EnableVABC(&dynamic_control, part.name);
+ ON_CALL(dynamic_control, FinishUpdate(_)).WillByDefault(Return(true));
// b/186196758 is only visible if we repeatedely run FS verification w/o
// writing verity
diff --git a/payload_consumer/postinstall_runner_action.cc b/payload_consumer/postinstall_runner_action.cc
index a6fa4b30..fa4654df 100644
--- a/payload_consumer/postinstall_runner_action.cc
+++ b/payload_consumer/postinstall_runner_action.cc
@@ -109,7 +109,7 @@ void PostinstallRunnerAction::PerformAction() {
auto dynamic_control = boot_control_->GetDynamicPartitionControl();
CHECK(dynamic_control);
- // Mount snapshot partitions for Virtual AB Compression Compression.
+ // Mount snapshot partitions for Virtual AB Compression
if (dynamic_control->UpdateUsesSnapshotCompression()) {
// Before calling MapAllPartitions to map snapshot devices, all CowWriters
// must be closed, and MapAllPartitions() should be called.
@@ -434,9 +434,8 @@ void PostinstallRunnerAction::CompletePostinstall(ErrorCode error_code) {
// steps succeeded.
if (error_code == ErrorCode::kSuccess) {
if (install_plan_.switch_slot_on_reboot) {
- if (!boot_control_->GetDynamicPartitionControl()->FinishUpdate(
- install_plan_.powerwash_required) ||
- !boot_control_->SetActiveBootSlot(install_plan_.target_slot)) {
+ if (!boot_control_->SetActiveBootSlot(install_plan_.target_slot)) {
+ LOG(ERROR) << "Failed to switch slot to " << install_plan_.target_slot;
error_code = ErrorCode::kPostinstallRunnerError;
} else {
// Schedules warm reset on next reboot, ignores the error.