futility: check flashrom return code and bail with error
During the flashrom initialization sequence the return code is not
being checked therefore there's a potential that the code moves
forward with read/write operation even with outstanding error.
This CL checks the return code and bail with error.
BUG=b:217629892
TEST=Test futility update with multiple instances of flashrom running.
BRANCH=None
Signed-off-by: YH Lin <yueherngl@chromium.org>
Change-Id: I0768232f6af35290ad7b3d9f479ee299bf9400e1
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/3485520
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Reviewed-by: Edward O'Callaghan <quasisec@chromium.org>
Reviewed-by: Hung-Te Lin <hungte@chromium.org>
diff --git a/host/lib/flashrom_drv.c b/host/lib/flashrom_drv.c
index 883b6d3..dfc9c83 100644
--- a/host/lib/flashrom_drv.c
+++ b/host/lib/flashrom_drv.c
@@ -63,9 +63,15 @@
flashrom_set_log_callback((flashrom_log_callback *)&flashrom_print_cb);
- r |= flashrom_init(1);
- r |= flashrom_programmer_init(&prog, programmer, params);
- r |= flashrom_flash_probe(&flashctx, prog, NULL);
+ if (flashrom_init(1)
+ || flashrom_programmer_init(&prog, programmer, params)) {
+ r = -1;
+ goto err_init;
+ }
+ if (flashrom_flash_probe(&flashctx, prog, NULL)) {
+ r = -1;
+ goto err_probe;
+ }
len = flashrom_flash_getsize(flashctx);
@@ -101,11 +107,14 @@
r |= flashrom_image_read(flashctx, image->data, len);
err_cleanup:
- r |= flashrom_programmer_shutdown(prog);
flashrom_layout_release(layout);
flashrom_flash_release(flashctx);
- free(tmp);
+err_probe:
+ r |= flashrom_programmer_shutdown(prog);
+
+err_init:
+ free(tmp);
return r;
}
@@ -128,9 +137,15 @@
flashrom_set_log_callback((flashrom_log_callback *)&flashrom_print_cb);
- r |= flashrom_init(1);
- r |= flashrom_programmer_init(&prog, programmer, params);
- r |= flashrom_flash_probe(&flashctx, prog, NULL);
+ if (flashrom_init(1)
+ || flashrom_programmer_init(&prog, programmer, params)) {
+ r = -1;
+ goto err_init;
+ }
+ if (flashrom_flash_probe(&flashctx, prog, NULL)) {
+ r = -1;
+ goto err_probe;
+ }
len = flashrom_flash_getsize(flashctx);
if (len == 0) {
@@ -181,10 +196,13 @@
diff_image ? diff_image->data : NULL);
err_cleanup:
- r |= flashrom_programmer_shutdown(prog);
flashrom_layout_release(layout);
flashrom_flash_release(flashctx);
- free(tmp);
+err_probe:
+ r |= flashrom_programmer_shutdown(prog);
+
+err_init:
+ free(tmp);
return r;
}