From b3b080f7e9a9f329e08d838ccaabdf7c81926609 Mon Sep 17 00:00:00 2001 From: Vadim Bendebury Date: Thu, 14 May 2020 18:39:38 -0700 Subject: 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 Change-Id: Idf9f8d267cae923909c2afc777b95bb2c7b638b3 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2202955 Reviewed-by: Namyoon Woo --- common/ap_ro_integrity_check.c | 16 ++++++++++++---- 1 file 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; -- cgit v1.2.1