Merge "bootloader_message: Add a magic header to the Virtual A/B message block."
am: f78b7a7b94

Change-Id: I81378cf209b929390c88bc83e51fd1f7bfa6fcb3
diff --git a/boot_control/libboot_control.cpp b/boot_control/libboot_control.cpp
index 7021839..ab9ce97 100644
--- a/boot_control/libboot_control.cpp
+++ b/boot_control/libboot_control.cpp
@@ -365,13 +365,15 @@
     return false;
   }
 
-  if (message.version == MISC_VIRTUAL_AB_MESSAGE_VERSION) {
+  if (message.version == MISC_VIRTUAL_AB_MESSAGE_VERSION &&
+      message.magic == MISC_VIRTUAL_AB_MAGIC_HEADER) {
     // Already initialized.
     return true;
   }
 
   message = {};
   message.version = MISC_VIRTUAL_AB_MESSAGE_VERSION;
+  message.magic = MISC_VIRTUAL_AB_MAGIC_HEADER;
   if (!WriteMiscVirtualAbMessage(message, &err)) {
     LOG(ERROR) << "Could not write merge status: " << err;
     return false;
diff --git a/bootloader_message/include/bootloader_message/bootloader_message.h b/bootloader_message/include/bootloader_message/bootloader_message.h
index a27e80b..9a482d4 100644
--- a/bootloader_message/include/bootloader_message/bootloader_message.h
+++ b/bootloader_message/include/bootloader_message/bootloader_message.h
@@ -189,12 +189,14 @@
 // must be added to the end.
 struct misc_virtual_ab_message {
   uint8_t version;
+  uint32_t magic;
   uint8_t merge_status;  // IBootControl 1.1, MergeStatus enum.
   uint8_t source_slot;   // Slot number when merge_status was written.
-  uint8_t reserved[61];
+  uint8_t reserved[57];
 } __attribute__((packed));
 
-#define MISC_VIRTUAL_AB_MESSAGE_VERSION 1
+#define MISC_VIRTUAL_AB_MESSAGE_VERSION 2
+#define MISC_VIRTUAL_AB_MAGIC_HEADER 0x56740AB0
 
 #if (__STDC_VERSION__ >= 201112L) || defined(__cplusplus)
 static_assert(sizeof(struct misc_virtual_ab_message) == 64,