From 25e8bc3efd94e6110f46c9f8aa6d7a0ab456c995 Mon Sep 17 00:00:00 2001 From: Marius Schilder Date: Thu, 22 Feb 2018 17:45:44 -0800 Subject: g: optionally check board_id match at upgrade time CONFIG_IGNORE_G_UPDATE_CHECKS currently drops all upgrade checks. Now with CONFIG_BOARD_ID_SUPPORT only check for board_id match. CR50_DEV still retains full no check behavior. TEST=buildall -j8 BRANCH=none BUG=none Change-Id: I0d085a26c814cd0f35450f0a0db06fe8525ab896 Reviewed-on: https://chromium-review.googlesource.com/933589 Commit-Ready: Marius Schilder Tested-by: Marius Schilder Reviewed-by: Marius Schilder Reviewed-by: Vadim Bendebury --- chip/g/upgrade_fw.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/chip/g/upgrade_fw.c b/chip/g/upgrade_fw.c index caa5b88818..d350753fa1 100644 --- a/chip/g/upgrade_fw.c +++ b/chip/g/upgrade_fw.c @@ -318,6 +318,23 @@ static int contents_allowed(uint32_t block_offset, size_t body_size, void *upgrade_data, uint8_t *error_code) { +#ifndef CR50_DEV +#ifdef CONFIG_BOARD_ID_SUPPORT + if (block_offset == valid_sections.rw_base_offset) { + /* This block is a rw header of the new image. */ + if (body_size < sizeof(struct SignedHeader)) { + CPRINTF("%s: block too short\n", __func__); + *error_code = UPGRADE_TRUNCATED_HEADER_ERROR; + return 0; + } + if (board_id_mismatch(upgrade_data)) { + CPRINTF("%s: rejecting Board ID mismatch.\n", __func__); + *error_code = UPGRADE_BOARD_ID_ERROR; + return 0; + } + } +#endif +#endif return 1; } #endif -- cgit v1.2.1