summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Boichat <drinkcat@chromium.org>2018-09-20 10:36:49 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-09-21 00:51:19 -0700
commit6349b8f0dc1e7182bb78f65949ab21b2a82cd392 (patch)
treeb8155bbd1426b6bbd091ae0b5204233cae8a019a
parent98d566d282af038f190942baa2ef29cbd1b1dab2 (diff)
downloadchrome-ec-6349b8f0dc1e7182bb78f65949ab21b2a82cd392.tar.gz
rollback: Unlock rollback before writing to it
Unprotect the MPU before we write to the rollback block, else the EC crashes. BRANCH=nocturne BUG=b:116216642 TEST=ectool --name=cros_fp reboot_ec; sleep 0.5; \ ectool --name=cros_fp rwsigaction abort && \ ectool --name=cros_fp addentropy reset && \ ectool --name=cros_fp reboot_ec TEST=Flash EC RW with rollback version 1, no crash, rollback version is incremented Change-Id: I2f7a057d4a94be97c52a8acaa4b9d864cabf280c Signed-off-by: Nicolas Boichat <drinkcat@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1236917 Commit-Ready: Nicolas Norvez <norvez@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r--common/rollback.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/common/rollback.c b/common/rollback.c
index 53d840ec46..2f4ba88c1c 100644
--- a/common/rollback.c
+++ b/common/rollback.c
@@ -249,7 +249,7 @@ static int rollback_update(int32_t next_min_version,
struct rollback_data *data = (struct rollback_data *)block;
BUILD_ASSERT(sizeof(block) >= sizeof(*data));
uintptr_t offset;
- int region;
+ int region, ret;
if (flash_get_protect() & EC_FLASH_PROTECT_ROLLBACK_NOW)
return EC_ERROR_ACCESS_DENIED;
@@ -305,10 +305,11 @@ static int rollback_update(int32_t next_min_version,
if (flash_erase(offset, CONFIG_FLASH_ERASE_SIZE))
return EC_ERROR_UNKNOWN;
- if (flash_write(offset, sizeof(block), block))
- return EC_ERROR_UNKNOWN;
+ unlock_rollback();
+ ret = flash_write(offset, sizeof(block), block);
+ lock_rollback();
- return EC_SUCCESS;
+ return ret;
}
int rollback_update_version(int32_t next_min_version)