Snap for 7679530 from 4660ec71bfebd51800e9bdf535040c352b0471b9 to mainline-extservices-release

Change-Id: Ia54b94297470ab49af7d41bbfa3b0541044d52cb
diff --git a/Android.bp b/Android.bp
index d89255d..d74e78f 100644
--- a/Android.bp
+++ b/Android.bp
@@ -147,7 +147,6 @@
 cc_library_static {
     name: "update_metadata-protos",
     host_supported: true,
-    ramdisk_available: true,
     recovery_available: true,
 
     srcs: ["update_engine/update_metadata.proto"],
diff --git a/aosp/cleanup_previous_update_action.cc b/aosp/cleanup_previous_update_action.cc
index dde6b89..53cb993 100644
--- a/aosp/cleanup_previous_update_action.cc
+++ b/aosp/cleanup_previous_update_action.cc
@@ -409,6 +409,14 @@
   merge_stats_->set_boot_complete_to_merge_start_time_ms(
       merge_start_time.count() - merge_stats_->boot_complete_time_ms());
 
+  auto source_build_fingerprint = snapshot_->ReadSourceBuildFingerprint();
+  merge_stats_->set_source_build_fingerprint(source_build_fingerprint);
+
+  if (!merge_stats_->WriteState()) {
+    LOG(ERROR) << "Failed to write merge stats; record may be unreliable if "
+                  "merge is interrupted.";
+  }
+
   if (snapshot_->InitiateMerge()) {
     WaitForMergeOrSchedule();
     return;
@@ -477,6 +485,9 @@
   // However, we have saved the flag in the snapshot report.
   bool vab_compression_used = report.compression_enabled();
 
+  auto target_build_fingerprint =
+      android::base::GetProperty("ro.build.fingerprint", "");
+
   LOG(INFO) << "Reporting merge stats: "
             << android::snapshot::UpdateState_Name(report.state()) << " in "
             << passed_ms.count() << "ms (resumed " << report.resume_count()
@@ -494,7 +505,9 @@
                              report.estimated_cow_size_bytes(),
                              report.boot_complete_time_ms(),
                              report.boot_complete_to_merge_start_time_ms(),
-                             static_cast<int32_t>(report.merge_failure_code()));
+                             static_cast<int32_t>(report.merge_failure_code()),
+                             report.source_build_fingerprint().c_str(),
+                             target_build_fingerprint.c_str());
 #endif
 }
 
diff --git a/payload_consumer/filesystem_verifier_action.cc b/payload_consumer/filesystem_verifier_action.cc
index 22c8e0b..8b39f6d 100644
--- a/payload_consumer/filesystem_verifier_action.cc
+++ b/payload_consumer/filesystem_verifier_action.cc
@@ -358,8 +358,10 @@
 
   offset_ = 0;
   filesystem_data_end_ = partition_size_;
-  CHECK_LE(partition.hash_tree_offset, partition.fec_offset)
-      << " Hash tree is expected to come before FEC data";
+  if (partition.fec_offset > 0) {
+    CHECK_LE(partition.hash_tree_offset, partition.fec_offset)
+        << " Hash tree is expected to come before FEC data";
+  }
   if (partition.hash_tree_offset != 0) {
     filesystem_data_end_ = partition.hash_tree_offset;
   } else if (partition.fec_offset != 0) {