summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim Bendebury <vbendeb@chromium.org>2020-05-14 18:39:38 -0700
committerCommit Bot <commit-bot@chromium.org>2020-06-24 23:29:58 +0000
commit0cb53d5914e25fcec55c0b6c8e772f92b76ed938 (patch)
treeb42feec4b17239032b5321366cedb9eb825a1fda
parentd4c8e0599b508cabaf3a81836d7b4a1136ac2513 (diff)
downloadchrome-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.c16
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;