diff options
author | Vadim Bendebury <vbendeb@chromium.org> | 2020-05-14 18:39:38 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-06-24 23:29:58 +0000 |
commit | 0cb53d5914e25fcec55c0b6c8e772f92b76ed938 (patch) | |
tree | b42feec4b17239032b5321366cedb9eb825a1fda | |
parent | d4c8e0599b508cabaf3a81836d7b4a1136ac2513 (diff) | |
download | chrome-ec-0cb53d5914e25fcec55c0b6c8e772f92b76ed938.tar.gz |
ap_ro_integrity_check: don't ignore flash write return values
Let's make sure that should there be an error during flash write
operation saving the AP hash information, the error gets reported to
the AP in the VC response.
BUG=b:153764696
TEST='make buildall -j'
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Change-Id: Idf9f8d267cae923909c2afc777b95bb2c7b638b3
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2202955
Reviewed-by: Namyoon Woo <namyoon@chromium.org>
(cherry picked from commit b3b080f7e9a9f329e08d838ccaabdf7c81926609)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2242410
Tested-by: Mary Ruthven <mruthven@chromium.org>
Reviewed-by: Mary Ruthven <mruthven@chromium.org>
Commit-Queue: Mary Ruthven <mruthven@chromium.org>
(cherry picked from commit cd78155a1641e8676713982616f11c4fcc72da20)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2261306
-rw-r--r-- | common/ap_ro_integrity_check.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/common/ap_ro_integrity_check.c b/common/ap_ro_integrity_check.c index fbf5bef488..43c487cceb 100644 --- a/common/ap_ro_integrity_check.c +++ b/common/ap_ro_integrity_check.c @@ -76,6 +76,7 @@ enum ap_ro_check_vc_errors { ARCVE_BAD_OFFSET = 3, ARCVE_BAD_RANGE_SIZE = 4, ARCVE_ALREADY_PROGRAMMED = 5, + ARCVE_FLASH_WRITE_FAILED = 6, }; static enum vendor_cmd_rc vc_seed_ap_ro_check(enum vendor_cmd_cc code, @@ -88,6 +89,7 @@ static enum vendor_cmd_rc vc_seed_ap_ro_check(enum vendor_cmd_cc code, uint32_t i; uint8_t *response = buf; size_t prog_size; + int rv; *response_size = 1; /* Just in case there is an error. */ @@ -134,10 +136,16 @@ static enum vendor_cmd_rc vc_seed_ap_ro_check(enum vendor_cmd_cc code, sizeof(check_header.checksum)); flash_open_ro_window(h1_flash_offset_, prog_size); - flash_physical_write(h1_flash_offset_, sizeof(check_header), - (char *)&check_header); - flash_physical_write(h1_flash_offset_ + sizeof(check_header), - input_size, buf); + rv = flash_physical_write(h1_flash_offset_, sizeof(check_header), + (char *)&check_header); + if (rv == EC_SUCCESS) + rv = flash_physical_write(h1_flash_offset_ + + sizeof(check_header), + input_size, buf); + if (rv != EC_SUCCESS) { + *response = ARCVE_FLASH_WRITE_FAILED; + return VENDOR_RC_WRITE_FLASH_FAIL; + } *response_size = 0; return VENDOR_RC_SUCCESS; |