1*8617a60dSAndroid Build Coastguard Worker /* Copyright 2020 The ChromiumOS Authors 2*8617a60dSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 3*8617a60dSAndroid Build Coastguard Worker * found in the LICENSE file. 4*8617a60dSAndroid Build Coastguard Worker * 5*8617a60dSAndroid Build Coastguard Worker * Recovery reason string mapping. 6*8617a60dSAndroid Build Coastguard Worker */ 7*8617a60dSAndroid Build Coastguard Worker 8*8617a60dSAndroid Build Coastguard Worker #include "2recovery_reasons.h" 9*8617a60dSAndroid Build Coastguard Worker #include "2sysincludes.h" 10*8617a60dSAndroid Build Coastguard Worker vb2_get_recovery_reason_string(uint8_t code)11*8617a60dSAndroid Build Coastguard Workerconst char *vb2_get_recovery_reason_string(uint8_t code) 12*8617a60dSAndroid Build Coastguard Worker { 13*8617a60dSAndroid Build Coastguard Worker switch ((enum vb2_nv_recovery)code) { 14*8617a60dSAndroid Build Coastguard Worker /* 0x00 */ case VB2_RECOVERY_NOT_REQUESTED: 15*8617a60dSAndroid Build Coastguard Worker return "Recovery not requested"; 16*8617a60dSAndroid Build Coastguard Worker /* 0x01 */ case VB2_RECOVERY_LEGACY: 17*8617a60dSAndroid Build Coastguard Worker return "Recovery requested from legacy utility"; 18*8617a60dSAndroid Build Coastguard Worker /* 0x02 */ case VB2_RECOVERY_RO_MANUAL: 19*8617a60dSAndroid Build Coastguard Worker return "Recovery button pressed"; 20*8617a60dSAndroid Build Coastguard Worker /* 0x03 */ case VB2_RECOVERY_RO_INVALID_RW: 21*8617a60dSAndroid Build Coastguard Worker return "RW firmware failed signature check"; 22*8617a60dSAndroid Build Coastguard Worker /* 0x04 */ case VB2_RECOVERY_DEPRECATED_RO_S3_RESUME: 23*8617a60dSAndroid Build Coastguard Worker return "S3 resume failed"; 24*8617a60dSAndroid Build Coastguard Worker /* 0x05 */ case VB2_RECOVERY_DEPRECATED_RO_TPM_ERROR: 25*8617a60dSAndroid Build Coastguard Worker return "TPM error in read-only firmware"; 26*8617a60dSAndroid Build Coastguard Worker /* 0x06 */ case VB2_RECOVERY_RO_SHARED_DATA: 27*8617a60dSAndroid Build Coastguard Worker return "Shared data error in read-only firmware"; 28*8617a60dSAndroid Build Coastguard Worker /* 0x07 */ case VB2_RECOVERY_DEPRECATED_RO_TEST_S3: 29*8617a60dSAndroid Build Coastguard Worker return "Test error from S3Resume()"; 30*8617a60dSAndroid Build Coastguard Worker /* 0x08 */ case VB2_RECOVERY_DEPRECATED_RO_TEST_LFS: 31*8617a60dSAndroid Build Coastguard Worker return "Test error from LoadFirmwareSetup()"; 32*8617a60dSAndroid Build Coastguard Worker /* 0x09 */ case VB2_RECOVERY_DEPRECATED_RO_TEST_LF: 33*8617a60dSAndroid Build Coastguard Worker return "Test error from LoadFirmware()"; 34*8617a60dSAndroid Build Coastguard Worker /* 0x10 */ case VB2_RECOVERY_DEPRECATED_RW_NOT_DONE: 35*8617a60dSAndroid Build Coastguard Worker return "RW firmware check not done"; 36*8617a60dSAndroid Build Coastguard Worker /* 0x11 */ case VB2_RECOVERY_DEPRECATED_RW_DEV_FLAG_MISMATCH: 37*8617a60dSAndroid Build Coastguard Worker return "RW firmware developer flag mismatch"; 38*8617a60dSAndroid Build Coastguard Worker /* 0x12 */ case VB2_RECOVERY_DEPRECATED_RW_REC_FLAG_MISMATCH: 39*8617a60dSAndroid Build Coastguard Worker return "RW firmware recovery flag mismatch"; 40*8617a60dSAndroid Build Coastguard Worker /* 0x13 */ case VB2_RECOVERY_FW_KEYBLOCK: 41*8617a60dSAndroid Build Coastguard Worker return "RW firmware unable to verify keyblock"; 42*8617a60dSAndroid Build Coastguard Worker /* 0x14 */ case VB2_RECOVERY_FW_KEY_ROLLBACK: 43*8617a60dSAndroid Build Coastguard Worker return "RW firmware key version rollback detected"; 44*8617a60dSAndroid Build Coastguard Worker /* 0x15 */ case VB2_RECOVERY_DEPRECATED_RW_DATA_KEY_PARSE: 45*8617a60dSAndroid Build Coastguard Worker return "RW firmware unable to parse data key"; 46*8617a60dSAndroid Build Coastguard Worker /* 0x16 */ case VB2_RECOVERY_FW_PREAMBLE: 47*8617a60dSAndroid Build Coastguard Worker return "RW firmware unable to verify preamble"; 48*8617a60dSAndroid Build Coastguard Worker /* 0x17 */ case VB2_RECOVERY_FW_ROLLBACK: 49*8617a60dSAndroid Build Coastguard Worker return "RW firmware version rollback detected"; 50*8617a60dSAndroid Build Coastguard Worker /* 0x18 */ case VB2_RECOVERY_DEPRECATED_FW_HEADER_VALID: 51*8617a60dSAndroid Build Coastguard Worker return "RW firmware header is valid"; 52*8617a60dSAndroid Build Coastguard Worker /* 0x19 */ case VB2_RECOVERY_FW_GET_FW_BODY: 53*8617a60dSAndroid Build Coastguard Worker return "RW firmware error when accessing firmware body"; 54*8617a60dSAndroid Build Coastguard Worker /* 0x1a */ case VB2_RECOVERY_DEPRECATED_FW_HASH_WRONG_SIZE: 55*8617a60dSAndroid Build Coastguard Worker return "RW firmware hash is wrong size"; 56*8617a60dSAndroid Build Coastguard Worker /* 0x1b */ case VB2_RECOVERY_FW_BODY: 57*8617a60dSAndroid Build Coastguard Worker return "RW firmware unable to verify firmware body"; 58*8617a60dSAndroid Build Coastguard Worker /* 0x1c */ case VB2_RECOVERY_DEPRECATED_FW_VALID: 59*8617a60dSAndroid Build Coastguard Worker return "RW firmware is valid"; 60*8617a60dSAndroid Build Coastguard Worker /* 0x1d */ case VB2_RECOVERY_DEPRECATED_FW_NO_RO_NORMAL: 61*8617a60dSAndroid Build Coastguard Worker return "RW firmware read-only normal path is not supported"; 62*8617a60dSAndroid Build Coastguard Worker /* 0x1e */ case VB2_RECOVERY_FW_VENDOR_BLOB: 63*8617a60dSAndroid Build Coastguard Worker return "RW firmware vendor blob verification failure"; 64*8617a60dSAndroid Build Coastguard Worker /* 0x20 */ case VB2_RECOVERY_RO_FIRMWARE: 65*8617a60dSAndroid Build Coastguard Worker return "Firmware problem outside of verified boot"; 66*8617a60dSAndroid Build Coastguard Worker /* 0x21 */ case VB2_RECOVERY_RO_TPM_REBOOT: 67*8617a60dSAndroid Build Coastguard Worker return "TPM requires a system reboot (should be transient)"; 68*8617a60dSAndroid Build Coastguard Worker /* 0x22 */ case VB2_RECOVERY_EC_SOFTWARE_SYNC: 69*8617a60dSAndroid Build Coastguard Worker return "EC software sync error"; 70*8617a60dSAndroid Build Coastguard Worker /* 0x23 */ case VB2_RECOVERY_EC_UNKNOWN_IMAGE: 71*8617a60dSAndroid Build Coastguard Worker return "EC software sync unable to determine active EC image"; 72*8617a60dSAndroid Build Coastguard Worker /* 0x24 */ case VB2_RECOVERY_DEPRECATED_EC_HASH: 73*8617a60dSAndroid Build Coastguard Worker return "EC software sync error obtaining EC image hash"; 74*8617a60dSAndroid Build Coastguard Worker /* 0x25 */ case VB2_RECOVERY_DEPRECATED_EC_EXPECTED_IMAGE: 75*8617a60dSAndroid Build Coastguard Worker return "EC software sync error " 76*8617a60dSAndroid Build Coastguard Worker "obtaining expected EC image from BIOS"; 77*8617a60dSAndroid Build Coastguard Worker /* 0x26 */ case VB2_RECOVERY_EC_UPDATE: 78*8617a60dSAndroid Build Coastguard Worker return "EC software sync error updating EC"; 79*8617a60dSAndroid Build Coastguard Worker /* 0x27 */ case VB2_RECOVERY_EC_JUMP_RW: 80*8617a60dSAndroid Build Coastguard Worker return "EC software sync unable to jump to EC-RW"; 81*8617a60dSAndroid Build Coastguard Worker /* 0x28 */ case VB2_RECOVERY_EC_PROTECT: 82*8617a60dSAndroid Build Coastguard Worker return "EC software sync protection error"; 83*8617a60dSAndroid Build Coastguard Worker /* 0x29 */ case VB2_RECOVERY_EC_EXPECTED_HASH: 84*8617a60dSAndroid Build Coastguard Worker return "EC software sync error " 85*8617a60dSAndroid Build Coastguard Worker "obtaining expected EC hash from BIOS"; 86*8617a60dSAndroid Build Coastguard Worker /* 0x2a */ case VB2_RECOVERY_DEPRECATED_EC_HASH_MISMATCH: 87*8617a60dSAndroid Build Coastguard Worker return "EC software sync error " 88*8617a60dSAndroid Build Coastguard Worker "comparing expected EC hash and image"; 89*8617a60dSAndroid Build Coastguard Worker /* 0x2b */ case VB2_RECOVERY_SECDATA_FIRMWARE_INIT: 90*8617a60dSAndroid Build Coastguard Worker return "Firmware secure NVRAM (TPM) initialization error"; 91*8617a60dSAndroid Build Coastguard Worker /* 0x2c */ case VB2_RECOVERY_GBB_HEADER: 92*8617a60dSAndroid Build Coastguard Worker return "Error parsing GBB header"; 93*8617a60dSAndroid Build Coastguard Worker /* 0x2d */ case VB2_RECOVERY_TPM_CLEAR_OWNER: 94*8617a60dSAndroid Build Coastguard Worker return "Error trying to clear TPM owner"; 95*8617a60dSAndroid Build Coastguard Worker /* 0x2e */ case VB2_RECOVERY_DEV_SWITCH: 96*8617a60dSAndroid Build Coastguard Worker return "Error reading or updating developer switch"; 97*8617a60dSAndroid Build Coastguard Worker /* 0x2f */ case VB2_RECOVERY_FW_SLOT: 98*8617a60dSAndroid Build Coastguard Worker return "Error selecting RW firmware slot"; 99*8617a60dSAndroid Build Coastguard Worker /* 0x30 */ case VB2_RECOVERY_AUXFW_UPDATE: 100*8617a60dSAndroid Build Coastguard Worker return "Error updating auxiliary firmware"; 101*8617a60dSAndroid Build Coastguard Worker /* 0x31 */ case VB2_RECOVERY_INTEL_CSE_LITE_SKU: 102*8617a60dSAndroid Build Coastguard Worker return "Intel CSE Lite SKU firmware failure"; 103*8617a60dSAndroid Build Coastguard Worker /* 0x3f */ case VB2_RECOVERY_RO_UNSPECIFIED: 104*8617a60dSAndroid Build Coastguard Worker return "Unspecified/unknown error in RO firmware"; 105*8617a60dSAndroid Build Coastguard Worker /* 0x41 */ case VB2_RECOVERY_DEPRECATED_RW_DEV_SCREEN: 106*8617a60dSAndroid Build Coastguard Worker return "User requested recovery from dev-mode warning screen"; 107*8617a60dSAndroid Build Coastguard Worker /* 0x42 */ case VB2_RECOVERY_DEPRECATED_RW_NO_OS: 108*8617a60dSAndroid Build Coastguard Worker return "No OS kernel detected (or kernel rollback attempt?)"; 109*8617a60dSAndroid Build Coastguard Worker /* 0x43 */ case VB2_RECOVERY_RW_INVALID_OS: 110*8617a60dSAndroid Build Coastguard Worker return "OS kernel or rootfs failed signature check"; 111*8617a60dSAndroid Build Coastguard Worker /* 0x44 */ case VB2_RECOVERY_DEPRECATED_RW_TPM_ERROR: 112*8617a60dSAndroid Build Coastguard Worker return "TPM error in rewritable firmware"; 113*8617a60dSAndroid Build Coastguard Worker /* 0x45 */ case VB2_RECOVERY_DEPRECATED_RW_DEV_MISMATCH: 114*8617a60dSAndroid Build Coastguard Worker return "RW firmware in dev mode, but dev switch is off"; 115*8617a60dSAndroid Build Coastguard Worker /* 0x46 */ case VB2_RECOVERY_RW_SHARED_DATA: 116*8617a60dSAndroid Build Coastguard Worker return "Shared data error in rewritable firmware"; 117*8617a60dSAndroid Build Coastguard Worker /* 0x47 */ case VB2_RECOVERY_DEPRECATED_RW_TEST_LK: 118*8617a60dSAndroid Build Coastguard Worker return "Test error from vb2api_load_kernel()"; 119*8617a60dSAndroid Build Coastguard Worker /* 0x48 */ case VB2_RECOVERY_DEPRECATED_RW_NO_DISK: 120*8617a60dSAndroid Build Coastguard Worker return "No bootable storage device in system"; 121*8617a60dSAndroid Build Coastguard Worker /* 0x49 */ case VB2_RECOVERY_TPM_E_FAIL: 122*8617a60dSAndroid Build Coastguard Worker return "TPM error that was not fixed by reboot"; 123*8617a60dSAndroid Build Coastguard Worker /* 0x50 */ case VB2_RECOVERY_RO_TPM_S_ERROR: 124*8617a60dSAndroid Build Coastguard Worker return "TPM setup error in read-only firmware"; 125*8617a60dSAndroid Build Coastguard Worker /* 0x51 */ case VB2_RECOVERY_RO_TPM_W_ERROR: 126*8617a60dSAndroid Build Coastguard Worker return "TPM write error in read-only firmware"; 127*8617a60dSAndroid Build Coastguard Worker /* 0x52 */ case VB2_RECOVERY_RO_TPM_L_ERROR: 128*8617a60dSAndroid Build Coastguard Worker return "TPM lock error in read-only firmware"; 129*8617a60dSAndroid Build Coastguard Worker /* 0x53 */ case VB2_RECOVERY_RO_TPM_U_ERROR: 130*8617a60dSAndroid Build Coastguard Worker return "TPM update error in read-only firmware"; 131*8617a60dSAndroid Build Coastguard Worker /* 0x54 */ case VB2_RECOVERY_RW_TPM_R_ERROR: 132*8617a60dSAndroid Build Coastguard Worker return "TPM read error in rewritable firmware"; 133*8617a60dSAndroid Build Coastguard Worker /* 0x55 */ case VB2_RECOVERY_RW_TPM_W_ERROR: 134*8617a60dSAndroid Build Coastguard Worker return "TPM write error in rewritable firmware"; 135*8617a60dSAndroid Build Coastguard Worker /* 0x56 */ case VB2_RECOVERY_RW_TPM_L_ERROR: 136*8617a60dSAndroid Build Coastguard Worker return "TPM lock error in rewritable firmware"; 137*8617a60dSAndroid Build Coastguard Worker /* 0x57 */ case VB2_RECOVERY_EC_HASH_FAILED: 138*8617a60dSAndroid Build Coastguard Worker return "EC software sync unable to get EC image hash"; 139*8617a60dSAndroid Build Coastguard Worker /* 0x58 */ case VB2_RECOVERY_EC_HASH_SIZE: 140*8617a60dSAndroid Build Coastguard Worker return "EC software sync invalid image hash size"; 141*8617a60dSAndroid Build Coastguard Worker /* 0x59 */ case VB2_RECOVERY_LK_UNSPECIFIED: 142*8617a60dSAndroid Build Coastguard Worker return "Unspecified error while trying to load kernel"; 143*8617a60dSAndroid Build Coastguard Worker /* 0x5a */ case VB2_RECOVERY_RW_NO_DISK: 144*8617a60dSAndroid Build Coastguard Worker return "No bootable storage device in system"; 145*8617a60dSAndroid Build Coastguard Worker /* 0x5b */ case VB2_RECOVERY_RW_NO_KERNEL: 146*8617a60dSAndroid Build Coastguard Worker return "No bootable kernel found on disk"; 147*8617a60dSAndroid Build Coastguard Worker /* 0x5c */ case VB2_RECOVERY_DEPRECATED_RW_BCB_ERROR: 148*8617a60dSAndroid Build Coastguard Worker return "BCB partition error on disk"; 149*8617a60dSAndroid Build Coastguard Worker /* 0x5d */ case VB2_RECOVERY_SECDATA_KERNEL_INIT: 150*8617a60dSAndroid Build Coastguard Worker return "Kernel secure NVRAM (TPM) initialization error"; 151*8617a60dSAndroid Build Coastguard Worker /* 0x5e */ case VB2_RECOVERY_DEPRECATED_FW_FASTBOOT: 152*8617a60dSAndroid Build Coastguard Worker return "Fastboot-mode requested in firmware"; 153*8617a60dSAndroid Build Coastguard Worker /* 0x5f */ case VB2_RECOVERY_RO_TPM_REC_HASH_L_ERROR: 154*8617a60dSAndroid Build Coastguard Worker return "Recovery hash space lock error in RO firmware"; 155*8617a60dSAndroid Build Coastguard Worker /* 0x60 */ case VB2_RECOVERY_TPM_DISABLE_FAILED: 156*8617a60dSAndroid Build Coastguard Worker return "Failed to disable TPM before running untrusted code"; 157*8617a60dSAndroid Build Coastguard Worker /* 0x61 */ case VB2_RECOVERY_ALTFW_HASH_MISMATCH: 158*8617a60dSAndroid Build Coastguard Worker return "Verification of alternate bootloader payload failed"; 159*8617a60dSAndroid Build Coastguard Worker /* 0x62 */ case VB2_RECOVERY_SECDATA_FWMP_INIT: 160*8617a60dSAndroid Build Coastguard Worker return "FWMP secure NVRAM (TPM) initialization error"; 161*8617a60dSAndroid Build Coastguard Worker /* 0x63 */ case VB2_RECOVERY_GSC_BOOT_MODE: 162*8617a60dSAndroid Build Coastguard Worker return "Failed to get boot mode from GSC"; 163*8617a60dSAndroid Build Coastguard Worker /* 0x64 */ case VB2_RECOVERY_ESCAPE_NO_BOOT: 164*8617a60dSAndroid Build Coastguard Worker return "Attempt to escape from NO_BOOT mode was detected"; 165*8617a60dSAndroid Build Coastguard Worker /* 0x65 */ case VB2_RECOVERY_WIDEVINE_PREPARE: 166*8617a60dSAndroid Build Coastguard Worker return "Failed to prepare widevine"; 167*8617a60dSAndroid Build Coastguard Worker /* 0x7f */ case VB2_RECOVERY_RW_UNSPECIFIED: 168*8617a60dSAndroid Build Coastguard Worker return "Unspecified/unknown error in RW firmware"; 169*8617a60dSAndroid Build Coastguard Worker /* 0x81 */ case VB2_RECOVERY_DEPRECATED_KE_DM_VERITY: 170*8617a60dSAndroid Build Coastguard Worker return "DM-verity error"; 171*8617a60dSAndroid Build Coastguard Worker /* 0xbf */ case VB2_RECOVERY_DEPRECATED_KE_UNSPECIFIED: 172*8617a60dSAndroid Build Coastguard Worker return "Unspecified/unknown error in kernel"; 173*8617a60dSAndroid Build Coastguard Worker /* 0xc1 */ case VB2_RECOVERY_US_TEST: 174*8617a60dSAndroid Build Coastguard Worker return "Recovery mode test from user-mode"; 175*8617a60dSAndroid Build Coastguard Worker /* 0xc2 */ case VB2_RECOVERY_DEPRECATED_BCB_USER_MODE: 176*8617a60dSAndroid Build Coastguard Worker return "User-mode requested recovery via BCB"; 177*8617a60dSAndroid Build Coastguard Worker /* 0xc3 */ case VB2_RECOVERY_DEPRECATED_US_FASTBOOT: 178*8617a60dSAndroid Build Coastguard Worker return "User-mode requested fastboot mode"; 179*8617a60dSAndroid Build Coastguard Worker /* 0xc4 */ case VB2_RECOVERY_TRAIN_AND_REBOOT: 180*8617a60dSAndroid Build Coastguard Worker return "User-mode requested DRAM train and reboot"; 181*8617a60dSAndroid Build Coastguard Worker /* 0xff */ case VB2_RECOVERY_US_UNSPECIFIED: 182*8617a60dSAndroid Build Coastguard Worker return "Unspecified/unknown error in user-mode"; 183*8617a60dSAndroid Build Coastguard Worker } 184*8617a60dSAndroid Build Coastguard Worker return "Unknown error code"; 185*8617a60dSAndroid Build Coastguard Worker } 186