diff options
author | Divya Jyothi <divya.jyothi@intel.com> | 2015-06-25 20:19:37 -0700 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2015-07-01 03:49:00 +0000 |
commit | b4c205bf51cfebeac1ddc7617dba24d8111bc9ed (patch) | |
tree | c1399d4ecbae939623505eed9b955e1b91f43e3f /common/flash.c | |
parent | d2dabdae5d2b348f3c5fe3d13c64834451e214b5 (diff) | |
download | chrome-ec-b4c205bf51cfebeac1ddc7617dba24d8111bc9ed.tar.gz |
vboot_hash: Abort hash calculation on flash write
If flash is being written, any pending hash calculation is likely to
be invalid.
BRANCH=None
BUG=chrome-os-partner:38103
TEST=on Cyan, run hundreds of flashrom cycles to make sure there are no
read, erase or write errors
Change-Id: I915f8db7998c56fc12e7d85173232882fb7ed80d
Signed-off-by: Divya Jyothi <divya.jyothi@intel.com>
Reviewed-on: https://chromium-review.googlesource.com/282211
Reviewed-by: Shawn N <shawnn@chromium.org>
Commit-Queue: Bernie Thompson <bhthompson@chromium.org>
Tested-by: Bernie Thompson <bhthompson@chromium.org>
Diffstat (limited to 'common/flash.c')
-rw-r--r-- | common/flash.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/common/flash.c b/common/flash.c index 6d903eca95..b5dad96438 100644 --- a/common/flash.c +++ b/common/flash.c @@ -313,7 +313,15 @@ int flash_write(int offset, int size, const char *data) return EC_ERROR_INVAL; /* Invalid range */ #ifdef CONFIG_VBOOT_HASH - vboot_hash_invalidate(offset, size); + /* + * Abort hash calculations when flashrom flash updates + * are in progress.Otherwise invalidate the pre-computed hash, + * since it's likely to change after flash write + */ + if (vboot_hash_in_progress()) + vboot_hash_abort(); + else + vboot_hash_invalidate(offset, size); #endif return flash_physical_write(offset, size, data); @@ -325,7 +333,15 @@ int flash_erase(int offset, int size) return EC_ERROR_INVAL; /* Invalid range */ #ifdef CONFIG_VBOOT_HASH - vboot_hash_invalidate(offset, size); + /* + * Abort hash calculations when flashrom flash updates + * are in progress.Otherwise invalidate the pre-computed hash, + * since it's likely to be wrong after erase. + */ + if (vboot_hash_in_progress()) + vboot_hash_abort(); + else + vboot_hash_invalidate(offset, size); #endif return flash_physical_erase(offset, size); |