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-05-29 04:42:24 +0000
commitb3b080f7e9a9f329e08d838ccaabdf7c81926609 (patch)
tree6be04db7326ceae632a5720f1fee9e0095aa36ad
parentce4a25f69b460aca8011d21c79ad6e90e52f94df (diff)
downloadchrome-ec-b3b080f7e9a9f329e08d838ccaabdf7c81926609.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>
-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;