Fix duplicate verity bug am: b4416c9ade
Original change: https://android-review.googlesource.com/c/platform/system/update_engine/+/2172124
Change-Id: I68a2c9912495196645e32b175478051bcce93887
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/payload_generator/generate_delta_main.cc b/payload_generator/generate_delta_main.cc
index ef36a6d..49c1e9c 100644
--- a/payload_generator/generate_delta_main.cc
+++ b/payload_generator/generate_delta_main.cc
@@ -726,8 +726,20 @@
if (payload_config.is_delta &&
payload_config.version.minor >= kVerityMinorPayloadVersion &&
- !FLAGS_disable_verity_computation)
+ !FLAGS_disable_verity_computation) {
CHECK(payload_config.target.LoadVerityConfig());
+ for (size_t i = 0; i < payload_config.target.partitions.size(); ++i) {
+ if (payload_config.source.partitions[i].fs_interface != nullptr) {
+ continue;
+ }
+ if (!payload_config.target.partitions[i].verity.IsEmpty()) {
+ LOG(INFO) << "Partition " << payload_config.target.partitions[i].name
+ << " is installed in full OTA, disaling verity for this "
+ "specific partition.";
+ payload_config.target.partitions[i].verity.Clear();
+ }
+ }
+ }
LOG(INFO) << "Generating " << (payload_config.is_delta ? "delta" : "full")
<< " update";
diff --git a/payload_generator/payload_generation_config.cc b/payload_generator/payload_generation_config.cc
index d520123..387cc3a 100644
--- a/payload_generator/payload_generation_config.cc
+++ b/payload_generator/payload_generation_config.cc
@@ -29,7 +29,6 @@
#include "bsdiff/constants.h"
#include "payload_consumer/payload_constants.h"
#include "update_engine/common/utils.h"
-#include "update_engine/payload_consumer/delta_performer.h"
#include "update_engine/payload_generator/boot_img_filesystem.h"
#include "update_engine/payload_generator/delta_diff_generator.h"
#include "update_engine/payload_generator/delta_diff_utils.h"
@@ -54,6 +53,16 @@
fec_extent.num_blocks() == 0 && fec_roots == 0;
}
+void VerityConfig::Clear() {
+ hash_tree_data_extent.Clear();
+ hash_tree_extent.Clear();
+ hash_tree_algorithm.clear();
+ hash_tree_salt.clear();
+ fec_data_extent.Clear();
+ fec_extent.Clear();
+ fec_roots = 0;
+}
+
bool PartitionConfig::ValidateExists() const {
TEST_AND_RETURN_FALSE(!path.empty());
TEST_AND_RETURN_FALSE(utils::FileExists(path.c_str()));
diff --git a/payload_generator/payload_generation_config.h b/payload_generator/payload_generation_config.h
index 7124cb0..1e8794b 100644
--- a/payload_generator/payload_generation_config.h
+++ b/payload_generator/payload_generation_config.h
@@ -59,6 +59,9 @@
// Whether the verity config is empty.
bool IsEmpty() const;
+ // Clears this config, subsequent calls to "IsEmpty" will return true.
+ void Clear();
+
// The extent for data covered by verity hash tree.
Extent hash_tree_data_extent;