diff options
author | Marius Schilder <mschilder@google.com> | 2018-02-22 17:45:44 -0800 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2018-03-03 00:29:33 +0000 |
commit | 4b3102f61692294c8eec3769460f7e4a1b36d477 (patch) | |
tree | d718b1260527a5ff2a6b1f0629d79ca40f6664e1 /chip | |
parent | 7aba679f39efeaa2824c62db65bdfae7a0d9884f (diff) | |
download | chrome-ec-4b3102f61692294c8eec3769460f7e4a1b36d477.tar.gz |
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
Reviewed-on: https://chromium-review.googlesource.com/933589
Commit-Ready: Marius Schilder <mschilder@chromium.org>
Tested-by: Marius Schilder <mschilder@chromium.org>
Reviewed-by: Marius Schilder <mschilder@chromium.org>
Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
(cherry picked from commit 25e8bc3efd94e6110f46c9f8aa6d7a0ab456c995)
Change-Id: I70764d802a2945bc2c82c41a20f76043fdc944ed
Reviewed-on: https://chromium-review.googlesource.com/947424
Reviewed-by: Furquan Shaikh <furquan@chromium.org>
Commit-Queue: Furquan Shaikh <furquan@chromium.org>
Tested-by: Furquan Shaikh <furquan@chromium.org>
Trybot-Ready: Furquan Shaikh <furquan@chromium.org>
Diffstat (limited to 'chip')
-rw-r--r-- | chip/g/upgrade_fw.c | 17 |
1 files changed, 17 insertions, 0 deletions
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 |