1 /* Copyright 2014 The ChromiumOS Authors 2 * Use of this source code is governed by a BSD-style license that can be 3 * found in the LICENSE file. 4 * 5 * Recovery reasons. 6 */ 7 8 #ifndef VBOOT_REFERENCE_2RECOVERY_REASONS_H_ 9 #define VBOOT_REFERENCE_2RECOVERY_REASONS_H_ 10 11 #include "2sysincludes.h" 12 13 /** 14 * Return a description of the recovery reason code. 15 * 16 * @param recovery reason code 17 * @return A string literal with English description of the recovery reason 18 */ 19 const char *vb2_get_recovery_reason_string(uint8_t code); 20 21 /* Recovery reason codes */ 22 enum vb2_nv_recovery { 23 24 /**********************************************************************/ 25 /**** Uncategorized errors ********************************************/ 26 27 /* Recovery not requested. */ 28 VB2_RECOVERY_NOT_REQUESTED = 0x00, 29 30 /* 31 * Recovery requested from legacy utility. (Prior to the NV storage 32 * spec, recovery mode was a single bitfield; this value is reserved so 33 * that scripts which wrote 1 to the recovery field are distinguishable 34 * from scripts whch use the recovery reasons listed here. 35 */ 36 VB2_RECOVERY_LEGACY = 0x01, 37 38 /* User manually requested recovery via recovery button */ 39 VB2_RECOVERY_RO_MANUAL = 0x02, 40 41 42 43 /**********************************************************************/ 44 /**** Firmware verification (RO) errors (and some EC stuff???) ********/ 45 46 /* Unspecified RW verification error (when none of 0x10-0x1f fit) */ 47 VB2_RECOVERY_RO_INVALID_RW = 0x03, 48 49 /* S3 resume failed (deprecated) */ 50 VB2_RECOVERY_DEPRECATED_RO_S3_RESUME = 0x04, 51 52 /* TPM error in read-only firmware (deprecated, see 0x54+) */ 53 VB2_RECOVERY_DEPRECATED_RO_TPM_ERROR = 0x05, 54 55 /* Shared data error in read-only firmware */ 56 VB2_RECOVERY_RO_SHARED_DATA = 0x06, 57 58 /* Test error from S3Resume() (deprecated) */ 59 VB2_RECOVERY_DEPRECATED_RO_TEST_S3 = 0x07, 60 61 /* Test error from LoadFirmwareSetup() (deprecated) */ 62 VB2_RECOVERY_DEPRECATED_RO_TEST_LFS = 0x08, 63 64 /* Test error from LoadFirmware() (deprecated) */ 65 VB2_RECOVERY_DEPRECATED_RO_TEST_LF = 0x09, 66 67 /* 68 * RW firmware failed signature check (neither RW firmware slot was 69 * valid). Recovery reason is VB2_RECOVERY_DEPRECATED_RW_NOT_DONE + 70 * the check value for the slot which came closest to validating; see 71 * VBSD_LF_CHECK_* in vboot_struct.h (deprecated). 72 */ 73 VB2_RECOVERY_DEPRECATED_RW_NOT_DONE = 0x10, 74 75 /* Latest tried RW firmware developer flag mismatch */ 76 VB2_RECOVERY_DEPRECATED_RW_DEV_FLAG_MISMATCH = 0x11, 77 78 /* Latest tried RW firmware recovery flag mismatch */ 79 VB2_RECOVERY_DEPRECATED_RW_REC_FLAG_MISMATCH = 0x12, 80 81 /* Latest tried RW firmware keyblock verification failed */ 82 VB2_RECOVERY_FW_KEYBLOCK = 0x13, 83 84 /* Latest tried RW firmware key version too old */ 85 VB2_RECOVERY_FW_KEY_ROLLBACK = 0x14, 86 87 /* Latest tried RW firmware unable to parse data key */ 88 VB2_RECOVERY_DEPRECATED_RW_DATA_KEY_PARSE = 0x15, 89 90 /* Latest tried RW firmware preamble verification failed */ 91 VB2_RECOVERY_FW_PREAMBLE = 0x16, 92 93 /* Latest tried RW firmware version too old */ 94 VB2_RECOVERY_FW_ROLLBACK = 0x17, 95 96 /* Latest tried RW firmware header valid */ 97 VB2_RECOVERY_DEPRECATED_FW_HEADER_VALID = 0x18, 98 99 /* Latest tried RW firmware unable to get firmware body */ 100 VB2_RECOVERY_FW_GET_FW_BODY = 0x19, 101 102 /* Latest tried RW firmware hash wrong size */ 103 VB2_RECOVERY_DEPRECATED_FW_HASH_WRONG_SIZE = 0x1a, 104 105 /* Latest tried RW firmware body verification failed */ 106 VB2_RECOVERY_FW_BODY = 0x1b, 107 108 /* Latest tried RW firmware valid */ 109 VB2_RECOVERY_DEPRECATED_FW_VALID = 0x1c, 110 111 /* Latest tried RW firmware RO normal path not supported */ 112 VB2_RECOVERY_DEPRECATED_FW_NO_RO_NORMAL = 0x1d, 113 114 /* Latest tried RW firmware vendor blob verification failed */ 115 VB2_RECOVERY_FW_VENDOR_BLOB = 0x1e, 116 117 /* 118 * Firmware boot failure outside of verified boot (RAM init, missing 119 * SSD, etc.). 120 */ 121 VB2_RECOVERY_RO_FIRMWARE = 0x20, 122 123 /* 124 * Recovery mode TPM initialization requires a system reboot. The 125 * system was already in recovery mode for some other reason when this 126 * happened. 127 */ 128 VB2_RECOVERY_RO_TPM_REBOOT = 0x21, 129 130 /* EC software sync - other error */ 131 VB2_RECOVERY_EC_SOFTWARE_SYNC = 0x22, 132 133 /* EC software sync - unable to determine active EC image */ 134 VB2_RECOVERY_EC_UNKNOWN_IMAGE = 0x23, 135 136 /* EC software sync - error obtaining EC image hash (deprecated) */ 137 VB2_RECOVERY_DEPRECATED_EC_HASH = 0x24, 138 139 /* EC software sync - error obtaining expected EC image (deprecated) */ 140 VB2_RECOVERY_DEPRECATED_EC_EXPECTED_IMAGE = 0x25, 141 142 /* EC software sync - error updating EC */ 143 VB2_RECOVERY_EC_UPDATE = 0x26, 144 145 /* EC software sync - unable to jump to EC-RW */ 146 VB2_RECOVERY_EC_JUMP_RW = 0x27, 147 148 /* EC software sync - unable to protect / unprotect EC-RW */ 149 VB2_RECOVERY_EC_PROTECT = 0x28, 150 151 /* EC software sync - error obtaining expected EC hash */ 152 VB2_RECOVERY_EC_EXPECTED_HASH = 0x29, 153 154 /* EC software sync - expected EC image doesn't match hash (deprc.) */ 155 VB2_RECOVERY_DEPRECATED_EC_HASH_MISMATCH = 0x2a, 156 157 /* Firmware secure data initialization error */ 158 VB2_RECOVERY_SECDATA_FIRMWARE_INIT = 0x2b, 159 160 /* GBB header is bad */ 161 VB2_RECOVERY_GBB_HEADER = 0x2c, 162 163 /* Unable to clear TPM owner */ 164 VB2_RECOVERY_TPM_CLEAR_OWNER = 0x2d, 165 166 /* Error determining/updating virtual dev switch */ 167 VB2_RECOVERY_DEV_SWITCH = 0x2e, 168 169 /* Error determining firmware slot */ 170 VB2_RECOVERY_FW_SLOT = 0x2f, 171 172 /* Error updating auxiliary firmware */ 173 VB2_RECOVERY_AUXFW_UPDATE = 0x30, 174 175 /* 176 * Intel CSE Lite SKU firmware failure; see subcodes defined in coreboot for specific 177 * reason. 178 */ 179 VB2_RECOVERY_INTEL_CSE_LITE_SKU = 0x31, 180 181 /* Unspecified/unknown error in read-only firmware */ 182 VB2_RECOVERY_RO_UNSPECIFIED = 0x3f, 183 184 185 186 /**********************************************************************/ 187 /**** Kernel verification (RW) errors *********************************/ 188 189 /* 190 * User manually requested recovery by pressing a key at developer 191 * warning screen (deprecated) 192 */ 193 VB2_RECOVERY_DEPRECATED_RW_DEV_SCREEN = 0x41, 194 195 /* No OS kernel detected (deprecated, now 0x5b) */ 196 VB2_RECOVERY_DEPRECATED_RW_NO_OS = 0x42, 197 198 /* OS kernel failed signature check. Since the kernel corrupts itself 199 (DMVERROR) on a verity failure, may also indicate corrupt rootfs. */ 200 VB2_RECOVERY_RW_INVALID_OS = 0x43, 201 202 /* TPM error in rewritable firmware (deprecated, see 0x54+) */ 203 VB2_RECOVERY_DEPRECATED_RW_TPM_ERROR = 0x44, 204 205 /* RW firmware in dev mode, but dev switch is off (deprecated) */ 206 VB2_RECOVERY_DEPRECATED_RW_DEV_MISMATCH = 0x45, 207 208 /* Shared data error in rewritable firmware */ 209 VB2_RECOVERY_RW_SHARED_DATA = 0x46, 210 211 /* Test error from vb2api_load_kernel() (deprecated) */ 212 VB2_RECOVERY_DEPRECATED_RW_TEST_LK = 0x47, 213 214 /* No bootable disk found (deprecated, see 0x5a) */ 215 VB2_RECOVERY_DEPRECATED_RW_NO_DISK = 0x48, 216 217 /* Rebooting did not correct TPM_E_FAIL or TPM_E_FAILEDSELFTEST */ 218 VB2_RECOVERY_TPM_E_FAIL = 0x49, 219 220 /* TPM setup error in read-only firmware */ 221 VB2_RECOVERY_RO_TPM_S_ERROR = 0x50, 222 223 /* TPM write error in read-only firmware */ 224 VB2_RECOVERY_RO_TPM_W_ERROR = 0x51, 225 226 /* TPM lock error in read-only firmware */ 227 VB2_RECOVERY_RO_TPM_L_ERROR = 0x52, 228 229 /* TPM update error in read-only firmware */ 230 VB2_RECOVERY_RO_TPM_U_ERROR = 0x53, 231 232 /* TPM read error in rewritable firmware */ 233 VB2_RECOVERY_RW_TPM_R_ERROR = 0x54, 234 235 /* TPM write error in rewritable firmware */ 236 VB2_RECOVERY_RW_TPM_W_ERROR = 0x55, 237 238 /* TPM lock error in rewritable firmware */ 239 VB2_RECOVERY_RW_TPM_L_ERROR = 0x56, 240 241 /* EC software sync unable to get EC image hash */ 242 VB2_RECOVERY_EC_HASH_FAILED = 0x57, 243 244 /* EC software sync invalid image hash size */ 245 VB2_RECOVERY_EC_HASH_SIZE = 0x58, 246 247 /* Unspecified error while trying to load kernel */ 248 VB2_RECOVERY_LK_UNSPECIFIED = 0x59, 249 250 /* No bootable storage device in system */ 251 VB2_RECOVERY_RW_NO_DISK = 0x5a, 252 253 /* No bootable kernel found on disk */ 254 VB2_RECOVERY_RW_NO_KERNEL = 0x5b, 255 256 /* BCB related error in RW firmware (deprecated) */ 257 VB2_RECOVERY_DEPRECATED_RW_BCB_ERROR = 0x5c, 258 259 /* Kernel secure data initialization error */ 260 VB2_RECOVERY_SECDATA_KERNEL_INIT = 0x5d, 261 262 /* Fastboot mode requested in firmware (deprecated) */ 263 VB2_RECOVERY_DEPRECATED_FW_FASTBOOT = 0x5e, 264 265 /* Recovery hash space lock error in RO firmware */ 266 VB2_RECOVERY_RO_TPM_REC_HASH_L_ERROR = 0x5f, 267 268 /* Failed to disable the TPM [prior to running untrusted code] */ 269 VB2_RECOVERY_TPM_DISABLE_FAILED = 0x60, 270 271 /* Verification of altfw payload failed (deprecated) */ 272 VB2_RECOVERY_ALTFW_HASH_MISMATCH = 0x61, 273 274 /* FWMP secure data initialization error */ 275 VB2_RECOVERY_SECDATA_FWMP_INIT = 0x62, 276 277 /* Failed to get boot mode from TPM/GSC */ 278 VB2_RECOVERY_GSC_BOOT_MODE = 0x63, 279 280 /* Attempt to escape from NO_BOOT mode was detected */ 281 VB2_RECOVERY_ESCAPE_NO_BOOT = 0x64, 282 283 /* Failed to prepare the widevine functionality */ 284 VB2_RECOVERY_WIDEVINE_PREPARE = 0x65, 285 286 /* Unspecified/unknown error in rewritable firmware */ 287 VB2_RECOVERY_RW_UNSPECIFIED = 0x7f, 288 289 290 291 /**********************************************************************/ 292 /**** OS level (kernel) errors (deprecated) ***************************/ 293 294 /* 295 * Note: we want to avoid having the kernel touch vboot NVRAM directly 296 * in the future, so this whole range is essentially deprecated until 297 * further notice. 298 */ 299 300 /* DM-verity error (deprecated) */ 301 VB2_RECOVERY_DEPRECATED_KE_DM_VERITY = 0x81, 302 303 /* Unspecified/unknown error in kernel (deprecated) */ 304 VB2_RECOVERY_DEPRECATED_KE_UNSPECIFIED = 0xbf, 305 306 307 308 /**********************************************************************/ 309 /**** OS level (userspace) errors *************************************/ 310 311 /* Recovery mode test from user-mode */ 312 VB2_RECOVERY_US_TEST = 0xc1, 313 314 /* Recovery requested by user-mode via BCB (deprecated) */ 315 VB2_RECOVERY_DEPRECATED_BCB_USER_MODE = 0xc2, 316 317 /* Fastboot mode requested by user-mode (deprecated) */ 318 VB2_RECOVERY_DEPRECATED_US_FASTBOOT = 0xc3, 319 320 /* User requested recovery for training memory and rebooting. */ 321 VB2_RECOVERY_TRAIN_AND_REBOOT = 0xc4, 322 323 /* Unspecified/unknown error in user-mode */ 324 VB2_RECOVERY_US_UNSPECIFIED = 0xff, 325 }; 326 327 #endif /* VBOOT_REFERENCE_2RECOVERY_REASONS_H_ */ 328