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;
 }