bootloader_message: Add a magic header to the Virtual A/B message block.

This adds a sanity check in addition to the version number in case misc
contains random bits.

Bug: 139156011
Test: manual test
Change-Id: Ie4f3731d2b1795340881c88e0c4eec9cd4432653
This commit is contained in:
David Anderson 2019-11-20 15:47:07 -08:00
parent ca18e7fe5a
commit 682d2a5db2
2 changed files with 7 additions and 3 deletions

View file

@ -365,13 +365,15 @@ bool InitMiscVirtualAbMessageIfNeeded() {
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;

View file

@ -189,12 +189,14 @@ static_assert(sizeof(struct bootloader_control) ==
// 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,