AU: Handle firmware update failure when booted from FW slot B.
The firmware updater will fail if we are booted into FW slot B and we
try to update firmware. We shouldn't treat this like a usual update
failure because trying again won't help until we reboot. Thus, with
this CL, we detect this case and request a reboot from the
user. Technically this request is a lie, b/c we are reusing the reboot
request mechanism which tells the user an update has been applied and
thus must be rebooted. We accept this fib since this situation is very
rare: use would have to have 2 FW update updates in a row w/o any
extra boots between.
Also, fix error code in subprocess.
Also, remove execute permissions on a bunch of source files.
BUG=chromium-os:14343
TEST=unittests, tested updates on machine that success, fail, have FW B failure
Review URL: http://codereview.chromium.org/6880077
Change-Id: I2509c6e1c9c9da3ff1ea27da4861c4850bd4d000
diff --git a/postinstall_runner_action.cc b/postinstall_runner_action.cc
index 80c28c9..2c8b943 100644
--- a/postinstall_runner_action.cc
+++ b/postinstall_runner_action.cc
@@ -65,6 +65,12 @@
ScopedTempUnmounter temp_unmounter(temp_rootfs_dir_);
if (return_code != 0) {
LOG(ERROR) << "Postinst command failed with code: " << return_code;
+ if (return_code == 2) {
+ // This special return code means that we tried to update firmware,
+ // but couldn't because we booted from FW B, and we need to reboot
+ // to get back to FW A.
+ completer.set_code(kActionCodePostinstallBootedFromFirmwareB);
+ }
return;
}
if (HasOutputPipe()) {