From 6349b8f0dc1e7182bb78f65949ab21b2a82cd392 Mon Sep 17 00:00:00 2001 From: Nicolas Boichat Date: Thu, 20 Sep 2018 10:36:49 -0700 Subject: 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 Reviewed-on: https://chromium-review.googlesource.com/1236917 Commit-Ready: Nicolas Norvez Reviewed-by: Randall Spangler --- common/rollback.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'common/rollback.c') 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) -- cgit v1.2.1