summaryrefslogtreecommitdiff
path: root/firmware/lib
diff options
context:
space:
mode:
authorJoel Kitching <kitching@google.com>2020-03-20 16:50:48 +0800
committerCommit Bot <commit-bot@chromium.org>2020-04-20 09:42:29 +0000
commitcc719d12112eadb578480b26e323f0760e0c13f6 (patch)
tree17efc8b513817b23980bde63b4e6fc082567af2f /firmware/lib
parent7ea99225b562b49b30fc374065f9dd48ed52f70d (diff)
downloadvboot-cc719d12112eadb578480b26e323f0760e0c13f6.tar.gz
vboot: move recovery reason strings to vboot2 namespace
Make recovery reason strings more widely available, and print them in kernel verification console messages. Note that we purposely do not print strings in firmware verification in order to avoid linking recovery reason strings into coreboot stages. BUG=b:124141368, chromium:968464 TEST=make clean && make runtests TEST=trigger recovery, check console logs BRANCH=none Change-Id: Ica82a60075da53e4ad0a0403eb8a88685c3bdbd6 Signed-off-by: Joel Kitching <kitching@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2112321 Reviewed-by: Joel Kitching <kitching@chromium.org> Commit-Queue: Joel Kitching <kitching@chromium.org> Tested-by: Joel Kitching <kitching@chromium.org>
Diffstat (limited to 'firmware/lib')
-rw-r--r--firmware/lib/include/vboot_display.h5
-rw-r--r--firmware/lib/vboot_display.c111
2 files changed, 2 insertions, 114 deletions
diff --git a/firmware/lib/include/vboot_display.h b/firmware/lib/include/vboot_display.h
index 8621d860..c5af967c 100644
--- a/firmware/lib/include/vboot_display.h
+++ b/firmware/lib/include/vboot_display.h
@@ -17,9 +17,4 @@ vb2_error_t VbDisplayDebugInfo(struct vb2_context *ctx);
vb2_error_t VbCheckDisplayKey(struct vb2_context *ctx, uint32_t key,
const VbScreenData *data);
-/**
- * Return a description of the recovery reason code.
- */
-const char *RecoveryReasonString(uint8_t code);
-
#endif /* VBOOT_REFERENCE_VBOOT_DISPLAY_H_ */
diff --git a/firmware/lib/vboot_display.c b/firmware/lib/vboot_display.c
index 07e1da0a..e10a421f 100644
--- a/firmware/lib/vboot_display.c
+++ b/firmware/lib/vboot_display.c
@@ -8,6 +8,7 @@
#include "2common.h"
#include "2misc.h"
#include "2nvstorage.h"
+#include "2recovery_reasons.h"
#include "2sha.h"
#include "2sysincludes.h"
#include "vboot_api.h"
@@ -107,114 +108,6 @@ static void FillInSha1Sum(char *outbuf, struct vb2_packed_key *key)
*outbuf = '\0';
}
-const char *RecoveryReasonString(uint8_t code)
-{
- switch(code) {
- case VB2_RECOVERY_NOT_REQUESTED:
- return "Recovery not requested";
- case VB2_RECOVERY_LEGACY:
- return "Recovery requested from legacy utility";
- case VB2_RECOVERY_RO_MANUAL:
- return "recovery button pressed";
- case VB2_RECOVERY_RO_INVALID_RW:
- return "RW firmware failed signature check";
- case VB2_RECOVERY_RO_SHARED_DATA:
- return "Shared data error in read-only firmware";
- case VB2_RECOVERY_FW_KEYBLOCK:
- return "RW firmware unable to verify keyblock";
- case VB2_RECOVERY_FW_KEY_ROLLBACK:
- return "RW firmware key version rollback detected";
- case VB2_RECOVERY_FW_PREAMBLE:
- return "RW firmware unable to verify preamble";
- case VB2_RECOVERY_FW_ROLLBACK:
- return "RW firmware version rollback detected";
- case VB2_RECOVERY_FW_BODY:
- return "RW firmware unable to verify firmware body";
- case VB2_RECOVERY_RO_FIRMWARE:
- return "Firmware problem outside of verified boot";
- case VB2_RECOVERY_RO_TPM_REBOOT:
- return "TPM requires a system reboot (should be transient)";
- case VB2_RECOVERY_EC_SOFTWARE_SYNC:
- return "EC software sync error";
- case VB2_RECOVERY_EC_UNKNOWN_IMAGE:
- return "EC software sync unable to determine active EC image";
- case VB2_RECOVERY_EC_UPDATE:
- return "EC software sync error updating EC";
- case VB2_RECOVERY_EC_JUMP_RW:
- return "EC software sync unable to jump to EC-RW";
- case VB2_RECOVERY_EC_PROTECT:
- return "EC software sync protection error";
- case VB2_RECOVERY_EC_EXPECTED_HASH:
- return "EC software sync error "
- "obtaining expected EC hash from BIOS";
- case VB2_RECOVERY_SECDATA_FIRMWARE_INIT:
- return "Firmware secure NVRAM (TPM) initialization error";
- case VB2_RECOVERY_GBB_HEADER:
- return "Error parsing GBB header";
- case VB2_RECOVERY_TPM_CLEAR_OWNER:
- return "Error trying to clear TPM owner";
- case VB2_RECOVERY_DEV_SWITCH:
- return "Error reading or updating developer switch";
- case VB2_RECOVERY_FW_SLOT:
- return "Error selecting RW firmware slot";
- case VB2_RECOVERY_AUX_FW_UPDATE:
- return "Error updating AUX firmware";
- case VB2_RECOVERY_RO_UNSPECIFIED:
- return "Unspecified/unknown error in RO firmware";
- case VB2_RECOVERY_RW_INVALID_OS:
- return "OS kernel or rootfs failed signature check";
- case VB2_RECOVERY_RW_SHARED_DATA:
- return "Shared data error in rewritable firmware";
- case VB2_RECOVERY_TPM_E_FAIL:
- return "TPM error that was not fixed by reboot";
- case VB2_RECOVERY_RO_TPM_S_ERROR:
- return "TPM setup error in read-only firmware";
- case VB2_RECOVERY_RO_TPM_W_ERROR:
- return "TPM write error in read-only firmware";
- case VB2_RECOVERY_RO_TPM_L_ERROR:
- return "TPM lock error in read-only firmware";
- case VB2_RECOVERY_RO_TPM_U_ERROR:
- return "TPM update error in read-only firmware";
- case VB2_RECOVERY_RW_TPM_R_ERROR:
- return "TPM read error in rewritable firmware";
- case VB2_RECOVERY_RW_TPM_W_ERROR:
- return "TPM write error in rewritable firmware";
- case VB2_RECOVERY_RW_TPM_L_ERROR:
- return "TPM lock error in rewritable firmware";
- case VB2_RECOVERY_EC_HASH_FAILED:
- return "EC software sync unable to get EC image hash";
- case VB2_RECOVERY_EC_HASH_SIZE:
- return "EC software sync invalid image hash size";
- case VB2_RECOVERY_LK_UNSPECIFIED:
- return "Unspecified error while trying to load kernel";
- case VB2_RECOVERY_RW_NO_DISK:
- return "No bootable storage device in system";
- case VB2_RECOVERY_RW_NO_KERNEL:
- return "No bootable kernel found on disk";
- case VB2_RECOVERY_SECDATA_KERNEL_INIT:
- return "Kernel secure NVRAM (TPM) initialization error";
- case VB2_RECOVERY_RO_TPM_REC_HASH_L_ERROR:
- return "Recovery hash space lock error in RO firmware";
- case VB2_RECOVERY_TPM_DISABLE_FAILED:
- return "Failed to disable TPM before running untrusted code";
- case VB2_RECOVERY_ALTFW_HASH_FAILED:
- return "Verification of alternative firmware payload failed";
- case VB2_RECOVERY_CR50_BOOT_MODE:
- return "Failed to get boot mode from Cr50";
- case VB2_RECOVERY_ESCAPE_NO_BOOT:
- return "Attempt to escape from NO_BOOT mode was detected";
- case VB2_RECOVERY_RW_UNSPECIFIED:
- return "Unspecified/unknown error in RW firmware";
- case VB2_RECOVERY_US_TEST:
- return "Recovery mode test from user-mode";
- case VB2_RECOVERY_TRAIN_AND_REBOOT:
- return "User-mode requested DRAM train and reboot";
- case VB2_RECOVERY_US_UNSPECIFIED:
- return "Unspecified/unknown error in user-mode";
- }
- return "Unknown or deprecated error code";
-}
-
#define DEBUG_INFO_SIZE 1024
#define DEBUG_INFO_APPEND(format, args...) do { \
if (used < DEBUG_INFO_SIZE) \
@@ -249,7 +142,7 @@ vb2_error_t VbDisplayDebugInfo(struct vb2_context *ctx)
i = vb2_nv_get(ctx, VB2_NV_RECOVERY_SUBCODE);
DEBUG_INFO_APPEND("\nrecovery_reason: %#.2x / %#.2x %s",
sd->recovery_reason, i,
- RecoveryReasonString(sd->recovery_reason));
+ vb2_get_recovery_reason_string(sd->recovery_reason));
/* Add vb2_context and vb2_shared_data flags */
DEBUG_INFO_APPEND("\ncontext.flags: %#.16" PRIx64, ctx->flags);