| /* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef VBOOT_REFERENCE_2RETURN_CODES_H_ |
| #define VBOOT_REFERENCE_2RETURN_CODES_H_ |
| |
| #include "2sysincludes.h" |
| |
| /* |
| * Functions which return an error all return this type. This is a 32-bit |
| * value rather than an int so it's consistent across different architectures. |
| */ |
| typedef uint32_t vb2_error_t; |
| |
| /* |
| * Return codes from verified boot functions. |
| * |
| * Note that other values may be passed through from vb2ex_*() calls; see |
| * the comment for VB2_ERROR_EX below. |
| */ |
| enum vb2_return_code { |
| /* Success - no error */ |
| VB2_SUCCESS = 0, |
| |
| /********************************************************************** |
| * Requests to the caller that are not considered errors |
| */ |
| VB2_REQUEST = 0x1000, |
| |
| /* Calling firmware requested shutdown via VbExIsShutdownRequested() */ |
| VB2_REQUEST_SHUTDOWN = 0x1001, |
| |
| /* Calling firmware needs to perform a reboot */ |
| VB2_REQUEST_REBOOT = 0x1002, |
| |
| /* Need EC to reboot to read-only code to switch RW slot */ |
| VB2_REQUEST_REBOOT_EC_SWITCH_RW = 0x1003, |
| |
| /* Need EC to reboot to read-only code */ |
| VB2_REQUEST_REBOOT_EC_TO_RO = 0x1004, |
| |
| /* Continue in the UI loop. This is used in UI internal functions. */ |
| VB2_REQUEST_UI_CONTINUE = 0x1005, |
| |
| /* End of VB2_REQUEST_* */ |
| VB2_REQUEST_END = 0x5000, |
| |
| /********************************************************************** |
| * All vboot2 error codes start at a large offset from zero, to reduce |
| * the risk of overlap with other error codes (TPM, etc.). |
| */ |
| VB2_ERROR_BASE = 0x10000000, |
| |
| /* Unknown / unspecified error */ |
| VB2_ERROR_UNKNOWN = VB2_ERROR_BASE + 1, |
| |
| /* Mock error for testing */ |
| VB2_ERROR_MOCK, |
| |
| /********************************************************************** |
| * SHA errors |
| */ |
| VB2_ERROR_SHA = VB2_ERROR_BASE + 0x010000, |
| |
| /* Bad algorithm in vb2_digest_init() */ |
| VB2_ERROR_SHA_INIT_ALGORITHM, |
| |
| /* Bad algorithm in vb2_digest_extend() */ |
| VB2_ERROR_SHA_EXTEND_ALGORITHM, |
| |
| /* Bad algorithm in vb2_digest_finalize() */ |
| VB2_ERROR_SHA_FINALIZE_ALGORITHM, |
| |
| /* Digest size buffer too small in vb2_digest_finalize() */ |
| VB2_ERROR_SHA_FINALIZE_DIGEST_SIZE, |
| |
| /* Hash mismatch in vb2_hash_verify() */ |
| VB2_ERROR_SHA_MISMATCH, |
| |
| /********************************************************************** |
| * RSA errors |
| */ |
| VB2_ERROR_RSA = VB2_ERROR_BASE + 0x020000, |
| |
| /* Padding mismatch in vb2_check_padding() */ |
| VB2_ERROR_RSA_PADDING, |
| |
| /* Bad algorithm in vb2_check_padding() */ |
| VB2_ERROR_RSA_PADDING_ALGORITHM, |
| |
| /* Null param passed to vb2_verify_digest() */ |
| VB2_ERROR_RSA_VERIFY_PARAM, |
| |
| /* Bad algorithm in vb2_verify_digest() */ |
| VB2_ERROR_RSA_VERIFY_ALGORITHM, |
| |
| /* Bad signature length in vb2_verify_digest() */ |
| VB2_ERROR_RSA_VERIFY_SIG_LEN, |
| |
| /* Work buffer too small in vb2_verify_digest() */ |
| VB2_ERROR_RSA_VERIFY_WORKBUF, |
| |
| /* Digest mismatch in vb2_verify_digest() */ |
| VB2_ERROR_RSA_VERIFY_DIGEST, |
| |
| /* Bad size calculation in vb2_check_padding() */ |
| VB2_ERROR_RSA_PADDING_SIZE, |
| |
| /********************************************************************** |
| * NV storage errors |
| */ |
| VB2_ERROR_NV = VB2_ERROR_BASE + 0x030000, |
| |
| /* Bad header in vb2_nv_check_crc() */ |
| VB2_ERROR_NV_HEADER, |
| |
| /* Bad CRC in vb2_nv_check_crc() */ |
| VB2_ERROR_NV_CRC, |
| |
| /* Read error in nvdata backend */ |
| VB2_ERROR_NV_READ, |
| |
| /* Write error in nvdata backend */ |
| VB2_ERROR_NV_WRITE, |
| |
| /********************************************************************** |
| * Secure data storage errors |
| */ |
| VB2_ERROR_SECDATA = VB2_ERROR_BASE + 0x040000, |
| |
| /* Bad CRC in vb2api_secdata_firmware_check() */ |
| VB2_ERROR_SECDATA_FIRMWARE_CRC, |
| |
| /* Bad struct version in vb2api_secdata_firmware_check() */ |
| VB2_ERROR_SECDATA_FIRMWARE_VERSION, |
| |
| /* Invalid param in vb2_secdata_firmware_get(); |
| Deprecated with chromium:972956. */ |
| VB2_ERROR_DEPRECATED_SECDATA_FIRMWARE_GET_PARAM, |
| |
| /* Invalid param in vb2_secdata_firmware_set(); |
| Deprecated with chromium:972956. */ |
| VB2_ERROR_DEPRECATED_SECDATA_FIRMWARE_SET_PARAM, |
| |
| /* Invalid flags passed to vb2_secdata_firmware_set(); |
| Deprecated with chromium:972956. */ |
| VB2_ERROR_DEPRECATED_SECDATA_FIRMWARE_SET_FLAGS, |
| |
| /* Called vb2_secdata_firmware_get() with uninitialized secdata; |
| Deprecated with chromium:972956. */ |
| VB2_ERROR_DEPRECATED_SECDATA_FIRMWARE_GET_UNINITIALIZED, |
| |
| /* Called vb2_secdata_firmware_set() with uninitialized secdata; |
| Deprecated with chromium:972956. */ |
| VB2_ERROR_DEPRECATED_SECDATA_FIRMWARE_SET_UNINITIALIZED, |
| |
| /* Bad CRC in vb2api_secdata_kernel_check() */ |
| VB2_ERROR_SECDATA_KERNEL_CRC, |
| |
| /* Bad struct version in vb2_secdata_kernel_init() */ |
| VB2_ERROR_SECDATA_KERNEL_VERSION, |
| |
| /* Bad uid in vb2_secdata_kernel_init() */ |
| VB2_ERROR_SECDATA_KERNEL_UID, |
| |
| /* Invalid param in vb2_secdata_kernel_get(); |
| Deprecated with chromium:972956. */ |
| VB2_ERROR_DEPRECATED_SECDATA_KERNEL_GET_PARAM, |
| |
| /* Invalid param in vb2_secdata_kernel_set(); |
| Deprecated with chromium:972956. */ |
| VB2_ERROR_DEPRECATED_SECDATA_KERNEL_SET_PARAM, |
| |
| /* Invalid flags passed to vb2_secdata_kernel_set(); |
| Deprecated with chromium:972956. */ |
| VB2_ERROR_DEPRECATED_SECDATA_KERNEL_SET_FLAGS, |
| |
| /* Called vb2_secdata_kernel_get() with uninitialized secdata_kernel; |
| Deprecated with chromium:972956. */ |
| VB2_ERROR_DEPRECATED_SECDATA_KERNEL_GET_UNINITIALIZED, |
| |
| /* Called vb2_secdata_kernel_set() with uninitialized secdata_kernel; |
| Deprecated with chromium:972956. */ |
| VB2_ERROR_DEPRECATED_SECDATA_KERNEL_SET_UNINITIALIZED, |
| |
| /* Bad size in vb2api_secdata_fwmp_check() */ |
| VB2_ERROR_SECDATA_FWMP_SIZE, |
| |
| /* Incomplete structure in vb2api_secdata_fwmp_check() */ |
| VB2_ERROR_SECDATA_FWMP_INCOMPLETE, |
| |
| /* Bad CRC in vb2api_secdata_fwmp_check() */ |
| VB2_ERROR_SECDATA_FWMP_CRC, |
| |
| /* Bad struct version in vb2_secdata_fwmp_check() */ |
| VB2_ERROR_SECDATA_FWMP_VERSION, |
| |
| /* Error reading secdata_firmware from storage backend */ |
| VB2_ERROR_SECDATA_FIRMWARE_READ, |
| |
| /* Error writing secdata_firmware to storage backend */ |
| VB2_ERROR_SECDATA_FIRMWARE_WRITE, |
| |
| /* Error locking secdata_firmware in storage backend */ |
| VB2_ERROR_SECDATA_FIRMWARE_LOCK, |
| |
| /* Error reading secdata_kernel from storage backend */ |
| VB2_ERROR_SECDATA_KERNEL_READ, |
| |
| /* Error writing secdata_kernel to storage backend */ |
| VB2_ERROR_SECDATA_KERNEL_WRITE, |
| |
| /* Error locking secdata_kernel in storage backend */ |
| VB2_ERROR_SECDATA_KERNEL_LOCK, |
| |
| /* Error reading secdata_fwmp from storage backend */ |
| VB2_ERROR_SECDATA_FWMP_READ, |
| |
| /* Bad buffer size to read vb2_secdata_kernel */ |
| VB2_ERROR_SECDATA_KERNEL_BUFFER_SIZE, |
| |
| /* Incomplete structure in vb2api_secdata_kernel_check() */ |
| VB2_ERROR_SECDATA_KERNEL_INCOMPLETE, |
| |
| /* Bad struct size in vb2_secdata_kernel */ |
| VB2_ERROR_SECDATA_KERNEL_STRUCT_SIZE, |
| |
| /********************************************************************** |
| * Common code errors |
| */ |
| VB2_ERROR_COMMON = VB2_ERROR_BASE + 0x050000, |
| |
| /* Buffer is smaller than alignment offset in vb2_align() */ |
| VB2_ERROR_ALIGN_BIGGER_THAN_SIZE, |
| |
| /* Buffer is smaller than request in vb2_align() */ |
| VB2_ERROR_ALIGN_SIZE, |
| |
| /* Parent wraps around in vb2_verify_member_inside() */ |
| VB2_ERROR_INSIDE_PARENT_WRAPS, |
| |
| /* Member wraps around in vb2_verify_member_inside() */ |
| VB2_ERROR_INSIDE_MEMBER_WRAPS, |
| |
| /* Member outside parent in vb2_verify_member_inside() */ |
| VB2_ERROR_INSIDE_MEMBER_OUTSIDE, |
| |
| /* Member data wraps around in vb2_verify_member_inside() */ |
| VB2_ERROR_INSIDE_DATA_WRAPS, |
| |
| /* Member data outside parent in vb2_verify_member_inside() */ |
| VB2_ERROR_INSIDE_DATA_OUTSIDE, |
| |
| /* Unsupported signature algorithm in vb2_unpack_key_buffer() */ |
| VB2_ERROR_UNPACK_KEY_SIG_ALGORITHM, /* 0x150008 */ |
| |
| /* Bad key size in vb2_unpack_key_buffer() */ |
| VB2_ERROR_UNPACK_KEY_SIZE, |
| |
| /* Bad key alignment in vb2_unpack_key_buffer() */ |
| VB2_ERROR_UNPACK_KEY_ALIGN, |
| |
| /* Bad key array size in vb2_unpack_key_buffer() */ |
| VB2_ERROR_UNPACK_KEY_ARRAY_SIZE, |
| |
| /* Bad algorithm in vb2_verify_data() */ |
| VB2_ERROR_VDATA_ALGORITHM, |
| |
| /* Incorrect signature size for algorithm in vb2_verify_data() */ |
| VB2_ERROR_VDATA_SIG_SIZE, |
| |
| /* Data smaller than length of signed data in vb2_verify_data() */ |
| VB2_ERROR_VDATA_NOT_ENOUGH_DATA, |
| |
| /* Not enough work buffer for digest in vb2_verify_data() */ |
| VB2_ERROR_VDATA_WORKBUF_DIGEST, |
| |
| /* Not enough work buffer for hash temp data in vb2_verify_data() */ |
| VB2_ERROR_VDATA_WORKBUF_HASHING, /* 0x150010 */ |
| |
| /* |
| * Bad digest size in vb2_verify_data() - probably because algorithm |
| * is bad. |
| */ |
| VB2_ERROR_VDATA_DIGEST_SIZE, |
| |
| /* Unsupported hash algorithm in vb2_unpack_key_buffer() */ |
| VB2_ERROR_UNPACK_KEY_HASH_ALGORITHM, |
| |
| /* Member data overlaps member header */ |
| VB2_ERROR_INSIDE_DATA_OVERLAP, |
| |
| /* Unsupported packed key struct version */ |
| VB2_ERROR_UNPACK_KEY_STRUCT_VERSION, |
| |
| /* |
| * Buffer too small for total, fixed size, or description reported in |
| * common header, or member data checked via |
| * vb21_verify_common_member(). |
| */ |
| VB2_ERROR_COMMON_TOTAL_SIZE, |
| VB2_ERROR_COMMON_FIXED_SIZE, |
| VB2_ERROR_COMMON_DESC_SIZE, |
| VB2_ERROR_COMMON_MEMBER_SIZE, /* 0x150018 */ |
| |
| /* |
| * Total, fixed, description, or member offset/size not a multiple of |
| * 32 bits. |
| */ |
| VB2_ERROR_COMMON_TOTAL_UNALIGNED, |
| VB2_ERROR_COMMON_FIXED_UNALIGNED, |
| VB2_ERROR_COMMON_DESC_UNALIGNED, |
| VB2_ERROR_COMMON_MEMBER_UNALIGNED, |
| |
| /* Common struct description or member data wraps address space */ |
| VB2_ERROR_COMMON_DESC_WRAPS, |
| VB2_ERROR_COMMON_MEMBER_WRAPS, |
| |
| /* Common struct description is not null-terminated */ |
| VB2_ERROR_COMMON_DESC_TERMINATOR, |
| |
| /* Member data overlaps previous data */ |
| VB2_ERROR_COMMON_MEMBER_OVERLAP, /* 0x150020 */ |
| |
| /* Signature bad magic number */ |
| VB2_ERROR_SIG_MAGIC, |
| |
| /* Signature incompatible version */ |
| VB2_ERROR_SIG_VERSION, |
| |
| /* Signature header doesn't fit */ |
| VB2_ERROR_SIG_HEADER_SIZE, |
| |
| /* Signature unsupported algorithm */ |
| VB2_ERROR_SIG_ALGORITHM, |
| |
| /* Signature bad size for algorithm */ |
| VB2_ERROR_SIG_SIZE, |
| |
| /* Wrong amount of data signed */ |
| VB2_ERROR_VDATA_SIZE, |
| |
| /* Digest mismatch */ |
| VB2_ERROR_VDATA_VERIFY_DIGEST, |
| |
| /* Key algorithm doesn't match signature algorithm */ |
| VB2_ERROR_VDATA_ALGORITHM_MISMATCH, |
| |
| /* Bad magic number in vb2_unpack_key_buffer() */ |
| VB2_ERROR_UNPACK_KEY_MAGIC, |
| |
| /* Null public key buffer passed to vb2_unpack_key_buffer() */ |
| VB2_ERROR_UNPACK_KEY_BUFFER, |
| |
| /********************************************************************** |
| * Keyblock verification errors (all in vb2_verify_keyblock()) |
| */ |
| VB2_ERROR_KEYBLOCK = VB2_ERROR_BASE + 0x060000, |
| |
| /* Data buffer too small for header */ |
| VB2_ERROR_KEYBLOCK_TOO_SMALL_FOR_HEADER, |
| |
| /* Magic number not present */ |
| VB2_ERROR_KEYBLOCK_MAGIC, |
| |
| /* Header version incompatible */ |
| VB2_ERROR_KEYBLOCK_HEADER_VERSION, |
| |
| /* Data buffer too small for keyblock */ |
| VB2_ERROR_KEYBLOCK_SIZE, |
| |
| /* Signature data offset outside keyblock */ |
| VB2_ERROR_KEYBLOCK_SIG_OUTSIDE, |
| |
| /* Signature signed more data than size of keyblock */ |
| VB2_ERROR_KEYBLOCK_SIGNED_TOO_MUCH, |
| |
| /* Signature signed less data than size of keyblock header */ |
| VB2_ERROR_KEYBLOCK_SIGNED_TOO_LITTLE, |
| |
| /* Signature invalid */ |
| VB2_ERROR_KEYBLOCK_SIG_INVALID, |
| |
| /* Data key outside keyblock */ |
| VB2_ERROR_KEYBLOCK_DATA_KEY_OUTSIDE, |
| |
| /* Data key outside signed part of keyblock */ |
| VB2_ERROR_KEYBLOCK_DATA_KEY_UNSIGNED, |
| |
| /* Signature signed wrong amount of data */ |
| VB2_ERROR_KEYBLOCK_SIGNED_SIZE, |
| |
| /* No signature matching key ID */ |
| VB2_ERROR_KEYBLOCK_SIG_ID, |
| |
| /********************************************************************** |
| * Preamble verification errors (all in vb2_verify_preamble()) |
| */ |
| VB2_ERROR_PREAMBLE = VB2_ERROR_BASE + 0x070000, |
| |
| /* Preamble data too small to contain header */ |
| VB2_ERROR_PREAMBLE_TOO_SMALL_FOR_HEADER, |
| |
| /* Header version incompatible */ |
| VB2_ERROR_PREAMBLE_HEADER_VERSION, |
| |
| /* Header version too old */ |
| VB2_ERROR_PREAMBLE_HEADER_OLD, |
| |
| /* Data buffer too small for preamble */ |
| VB2_ERROR_PREAMBLE_SIZE, |
| |
| /* Signature data offset outside preamble */ |
| VB2_ERROR_PREAMBLE_SIG_OUTSIDE, |
| |
| /* Signature signed more data than size of preamble */ |
| VB2_ERROR_PREAMBLE_SIGNED_TOO_MUCH, |
| |
| /* Signature signed less data than size of preamble header */ |
| VB2_ERROR_PREAMBLE_SIGNED_TOO_LITTLE, |
| |
| /* Signature invalid */ |
| VB2_ERROR_PREAMBLE_SIG_INVALID, |
| |
| /* Body signature outside preamble */ |
| VB2_ERROR_PREAMBLE_BODY_SIG_OUTSIDE, |
| |
| /* Kernel subkey outside preamble */ |
| VB2_ERROR_PREAMBLE_KERNEL_SUBKEY_OUTSIDE, |
| |
| /* Bad magic number */ |
| VB2_ERROR_PREAMBLE_MAGIC, |
| |
| /* Hash is signed */ |
| VB2_ERROR_PREAMBLE_HASH_SIGNED, |
| |
| /* Bootloader outside signed portion of body */ |
| VB2_ERROR_PREAMBLE_BOOTLOADER_OUTSIDE, |
| |
| /* Vmlinuz header outside signed portion of body */ |
| VB2_ERROR_PREAMBLE_VMLINUZ_HEADER_OUTSIDE, |
| |
| /********************************************************************** |
| * Misc higher-level code errors |
| */ |
| VB2_ERROR_MISC = VB2_ERROR_BASE + 0x080000, |
| |
| /* Work buffer too small (see vb2api_init and vb2api_reinit) */ |
| VB2_ERROR_WORKBUF_SMALL, |
| |
| /* Work buffer unaligned (see vb2api_init and vb2api_reinit) */ |
| VB2_ERROR_WORKBUF_ALIGN, |
| |
| /* Work buffer too small in GBB-related function */ |
| VB2_ERROR_GBB_WORKBUF, |
| |
| /* Bad magic number in vb2_read_gbb_header() */ |
| VB2_ERROR_GBB_MAGIC, |
| |
| /* Incompatible version in vb2_read_gbb_header() */ |
| VB2_ERROR_GBB_VERSION, |
| |
| /* Old version in vb2_read_gbb_header() */ |
| VB2_ERROR_GBB_TOO_OLD, |
| |
| /* Header size too small in vb2_read_gbb_header() */ |
| VB2_ERROR_GBB_HEADER_SIZE, |
| |
| /* Work buffer too small for root key in vb2_load_fw_keyblock() */ |
| VB2_ERROR_FW_KEYBLOCK_WORKBUF_ROOT_KEY, |
| |
| /* Work buffer too small for header in vb2_load_fw_keyblock() */ |
| VB2_ERROR_FW_KEYBLOCK_WORKBUF_HEADER, |
| |
| /* Work buffer too small for keyblock in vb2_load_fw_keyblock() */ |
| VB2_ERROR_FW_KEYBLOCK_WORKBUF, |
| |
| /* Keyblock version out of range in vb2_load_fw_keyblock() */ |
| VB2_ERROR_FW_KEYBLOCK_VERSION_RANGE, |
| |
| /* Keyblock version rollback in vb2_load_fw_keyblock() */ |
| VB2_ERROR_FW_KEYBLOCK_VERSION_ROLLBACK, |
| |
| /* Missing firmware data key in vb2_load_fw_preamble() */ |
| VB2_ERROR_FW_PREAMBLE2_DATA_KEY, |
| |
| /* Work buffer too small for header in vb2_load_fw_preamble() */ |
| VB2_ERROR_FW_PREAMBLE2_WORKBUF_HEADER, |
| |
| /* Work buffer too small for preamble in vb2_load_fw_preamble() */ |
| VB2_ERROR_FW_PREAMBLE2_WORKBUF, |
| |
| /* Firmware version out of range in vb2_load_fw_preamble() */ |
| VB2_ERROR_FW_PREAMBLE_VERSION_RANGE, |
| |
| /* Firmware version rollback in vb2_load_fw_preamble() */ |
| VB2_ERROR_FW_PREAMBLE_VERSION_ROLLBACK, |
| |
| /* Not enough space in work buffer for resource object */ |
| VB2_ERROR_READ_RESOURCE_OBJECT_BUF, |
| |
| /* Work buffer too small for header in vb2_load_kernel_keyblock() */ |
| VB2_ERROR_KERNEL_KEYBLOCK_WORKBUF_HEADER, |
| |
| /* Work buffer too small for keyblock in vb2_load_kernel_keyblock() */ |
| VB2_ERROR_KERNEL_KEYBLOCK_WORKBUF, |
| |
| /* Keyblock version out of range in vb2_load_kernel_keyblock() */ |
| VB2_ERROR_KERNEL_KEYBLOCK_VERSION_RANGE, |
| |
| /* Keyblock version rollback in vb2_load_kernel_keyblock() */ |
| VB2_ERROR_KERNEL_KEYBLOCK_VERSION_ROLLBACK, |
| |
| /* |
| * Keyblock flags don't match current mode in |
| * vb2_load_kernel_keyblock(). |
| */ |
| VB2_ERROR_KERNEL_KEYBLOCK_DEV_FLAG, |
| VB2_ERROR_KERNEL_KEYBLOCK_REC_FLAG, |
| |
| /* Missing firmware data key in vb2_load_kernel_preamble() */ |
| VB2_ERROR_KERNEL_PREAMBLE2_DATA_KEY, |
| |
| /* Work buffer too small for header in vb2_load_kernel_preamble() */ |
| VB2_ERROR_KERNEL_PREAMBLE2_WORKBUF_HEADER, |
| |
| /* Work buffer too small for preamble in vb2_load_kernel_preamble() */ |
| VB2_ERROR_KERNEL_PREAMBLE2_WORKBUF, |
| |
| /* Kernel version out of range in vb2_load_kernel_preamble() */ |
| VB2_ERROR_KERNEL_PREAMBLE_VERSION_RANGE, |
| |
| /* Kernel version rollback in vb2_load_kernel_preamble() */ |
| VB2_ERROR_KERNEL_PREAMBLE_VERSION_ROLLBACK, |
| |
| /* Kernel preamble not loaded before calling vb2api_get_kernel_size() */ |
| VB2_ERROR_API_GET_KERNEL_SIZE_PREAMBLE, |
| |
| /* Unable to unpack kernel subkey in vb2_verify_vblock() */ |
| VB2_ERROR_VBLOCK_KERNEL_SUBKEY, |
| |
| /* |
| * Got a self-signed kernel in vb2_verify_vblock(), but need an |
| * officially signed one. |
| */ |
| VB2_ERROR_VBLOCK_SELF_SIGNED, |
| |
| /* Invalid keyblock hash in vb2_verify_vblock() */ |
| VB2_ERROR_VBLOCK_KEYBLOCK_HASH, |
| |
| /* Invalid keyblock in vb2_verify_vblock() */ |
| VB2_ERROR_VBLOCK_KEYBLOCK, |
| |
| /* Wrong developer key hash in vb2_verify_vblock() */ |
| VB2_ERROR_VBLOCK_DEV_KEY_HASH, |
| |
| /* Work buffer too small in vb2_load_partition() */ |
| VB2_ERROR_LOAD_PARTITION_WORKBUF, |
| |
| /* Unable to read vblock in vb2_load_partition() */ |
| VB2_ERROR_LOAD_PARTITION_READ_VBLOCK, |
| |
| /* Unable to verify vblock in vb2_load_partition() */ |
| VB2_ERROR_LOAD_PARTITION_VERIFY_VBLOCK, |
| |
| /* Kernel body offset too large in vb2_load_partition() */ |
| VB2_ERROR_LOAD_PARTITION_BODY_OFFSET, |
| |
| /* Kernel body too big in vb2_load_partition() */ |
| VB2_ERROR_LOAD_PARTITION_BODY_SIZE, |
| |
| /* Unable to read kernel body in vb2_load_partition() */ |
| VB2_ERROR_LOAD_PARTITION_READ_BODY, |
| |
| /* Unable to unpack data key in vb2_load_partition() */ |
| VB2_ERROR_LOAD_PARTITION_DATA_KEY, |
| |
| /* Unable to verify body in vb2_load_partition() */ |
| VB2_ERROR_LOAD_PARTITION_VERIFY_BODY, |
| |
| /* Unable to get EC image hash in ec_sync_phase1() */ |
| VB2_ERROR_EC_HASH_IMAGE, |
| |
| /* Unable to get expected EC image hash in ec_sync_phase1() */ |
| VB2_ERROR_EC_HASH_EXPECTED, |
| |
| /* Expected and image hashes are different size in ec_sync_phase1() */ |
| VB2_ERROR_EC_HASH_SIZE, |
| |
| /* Incompatible version for vb2_shared_data structure being loaded */ |
| VB2_ERROR_SHARED_DATA_VERSION, |
| |
| /* Bad magic number in vb2_shared_data structure */ |
| VB2_ERROR_SHARED_DATA_MAGIC, |
| |
| /* Some part of GBB data is invalid */ |
| VB2_ERROR_GBB_INVALID, |
| |
| /* Invalid parameter */ |
| VB2_ERROR_INVALID_PARAMETER, |
| |
| /* Problem with workbuf validity (see vb2api_init and vb2api_reinit) */ |
| VB2_ERROR_WORKBUF_INVALID, |
| |
| /* Escape from NO_BOOT mode is detected. */ |
| VB2_ERROR_ESCAPE_NO_BOOT, |
| |
| /********************************************************************** |
| * API-level errors |
| */ |
| VB2_ERROR_API = VB2_ERROR_BASE + 0x090000, |
| |
| /* Bad tag in vb2api_init_hash() */ |
| VB2_ERROR_API_INIT_HASH_TAG, |
| |
| /* Preamble not present in vb2api_init_hash() */ |
| VB2_ERROR_API_INIT_HASH_PREAMBLE, |
| |
| /* Work buffer too small in vb2api_init_hash() */ |
| VB2_ERROR_API_INIT_HASH_WORKBUF, |
| |
| /* Missing firmware data key in vb2api_init_hash() */ |
| VB2_ERROR_API_INIT_HASH_DATA_KEY, |
| |
| /* Uninitialized work area in vb2api_extend_hash() */ |
| VB2_ERROR_API_EXTEND_HASH_WORKBUF, |
| |
| /* Too much data hashed in vb2api_extend_hash() */ |
| VB2_ERROR_API_EXTEND_HASH_SIZE, |
| |
| /* Preamble not present in vb2api_check_hash() */ |
| VB2_ERROR_API_CHECK_HASH_PREAMBLE, |
| |
| /* Uninitialized work area in vb2api_check_hash() */ |
| VB2_ERROR_API_CHECK_HASH_WORKBUF, |
| |
| /* Wrong amount of data hashed in vb2api_check_hash() */ |
| VB2_ERROR_API_CHECK_HASH_SIZE, |
| |
| /* Work buffer too small in vb2api_check_hash() */ |
| VB2_ERROR_API_CHECK_HASH_WORKBUF_DIGEST, |
| |
| /* Bad tag in vb2api_check_hash() */ |
| VB2_ERROR_API_CHECK_HASH_TAG, |
| |
| /* Missing firmware data key in vb2api_check_hash() */ |
| VB2_ERROR_API_CHECK_HASH_DATA_KEY, |
| |
| /* Signature size mismatch in vb2api_check_hash() */ |
| VB2_ERROR_API_CHECK_HASH_SIG_SIZE, |
| |
| /* Phase one needs recovery mode */ |
| VB2_ERROR_API_PHASE1_RECOVERY, |
| |
| /* Bad tag in vb2api_check_hash() */ |
| VB2_ERROR_API_INIT_HASH_ID, |
| |
| /* Signature mismatch in vb2api_check_hash() */ |
| VB2_ERROR_API_CHECK_HASH_SIG, |
| |
| /* Invalid enum vb2_pcr_digest requested to vb2api_get_pcr_digest */ |
| VB2_ERROR_API_PCR_DIGEST, |
| |
| /* Buffer size for the digest is too small for vb2api_get_pcr_digest */ |
| VB2_ERROR_API_PCR_DIGEST_BUF, |
| |
| /* Work buffer too small for recovery key in vb2api_kernel_phase1(); |
| * Deprecated: use vb2_gbb_read_recovery_key return values */ |
| VB2_ERROR_DEPRECATED_API_KPHASE1_WORKBUF_REC_KEY, |
| |
| /* Firmware preamble not present for vb2api_kernel_phase1() */ |
| VB2_ERROR_API_KPHASE1_PREAMBLE, |
| |
| /* Wrong amount of kernel data in vb2api_verify_kernel_data() */ |
| VB2_ERROR_API_VERIFY_KDATA_SIZE, |
| |
| /* Kernel preamble not present for vb2api_verify_kernel_data() */ |
| VB2_ERROR_API_VERIFY_KDATA_PREAMBLE, |
| |
| /* Insufficient workbuf for hashing in vb2api_verify_kernel_data() */ |
| VB2_ERROR_API_VERIFY_KDATA_WORKBUF, |
| |
| /* Bad data key in vb2api_verify_kernel_data() */ |
| VB2_ERROR_API_VERIFY_KDATA_KEY, |
| |
| /* Phase one passing through secdata's request to reboot */ |
| VB2_ERROR_API_PHASE1_SECDATA_REBOOT, |
| |
| /* Digest buffer passed into vb2api_check_hash incorrect. */ |
| VB2_ERROR_API_CHECK_DIGEST_SIZE, |
| |
| /********************************************************************** |
| * Errors which may be generated by implementations of vb2ex functions. |
| * Implementation may also return its own specific errors, which should |
| * NOT be in the range VB2_ERROR_BASE...VB2_ERROR_MAX to avoid |
| * conflicting with future vboot2 error codes. |
| */ |
| VB2_ERROR_EX = VB2_ERROR_BASE + 0x0a0000, |
| |
| /* Read resource not implemented |
| * Deprecated: use VB2_ERROR_EX_UNIMPLEMENTED (chromium:944804) */ |
| VB2_ERROR_EX_DEPRECATED_READ_RESOURCE_UNIMPLEMENTED, |
| |
| /* Resource index not found */ |
| VB2_ERROR_EX_READ_RESOURCE_INDEX, |
| |
| /* Size of resource not big enough for requested offset and/or size */ |
| VB2_ERROR_EX_READ_RESOURCE_SIZE, |
| |
| /* TPM clear owner failed */ |
| VB2_ERROR_EX_TPM_CLEAR_OWNER, |
| |
| /* TPM clear owner not implemented |
| * Deprecated: use VB2_ERROR_EX_UNIMPLEMENTED (chromium:944804) */ |
| VB2_ERROR_DEPRECATED_EX_TPM_CLEAR_OWNER_UNIMPLEMENTED, |
| |
| /* Hardware crypto engine doesn't support this algorithm (non-fatal) */ |
| VB2_ERROR_EX_HWCRYPTO_UNSUPPORTED, |
| |
| /* TPM does not understand this command */ |
| VB2_ERROR_EX_TPM_NO_SUCH_COMMAND, |
| |
| /* vb2ex function is unimplemented (stubbed in 2lib/2stub.c) */ |
| VB2_ERROR_EX_UNIMPLEMENTED, |
| |
| /* AUXFW peripheral busy. Cannot upgrade firmware at present. */ |
| VB2_ERROR_EX_AUXFW_PERIPHERAL_BUSY, |
| |
| /* Error setting vendor data (see: VbExSetVendorData). |
| * Deprecated: functionality removed with legacy UI (b/167643628) */ |
| VB2_ERROR_DEPRECATED_EX_SET_VENDOR_DATA, |
| |
| /* The memory test is running but the output buffer was unchanged. */ |
| VB2_ERROR_EX_DIAG_TEST_RUNNING, |
| |
| /* The memory test is running and the output buffer was updated. */ |
| VB2_ERROR_EX_DIAG_TEST_UPDATED, |
| |
| /* The memory test initialization failed. */ |
| VB2_ERROR_EX_DIAG_TEST_INIT_FAILED, |
| |
| /********************************************************************** |
| * LoadKernel errors |
| * |
| * Should be ordered by specificity -- lower number means more specific. |
| */ |
| VB2_ERROR_LK = 0x100b0000, |
| |
| /* Only an invalid kernel was found in LoadKernel() */ |
| VB2_ERROR_LK_INVALID_KERNEL_FOUND = 0x100b1000, |
| |
| /* No kernel partitions were found in LoadKernel() */ |
| VB2_ERROR_LK_NO_KERNEL_FOUND = 0x100b2000, |
| |
| /* No working block devices were found in VbTryLoadKernel() */ |
| VB2_ERROR_LK_NO_DISK_FOUND = 0x100b3000, |
| |
| /********************************************************************** |
| * UI errors |
| */ |
| VB2_ERROR_UI = 0x100c0000, |
| |
| /* Display initialization failed */ |
| VB2_ERROR_UI_DISPLAY_INIT = 0x100c0001, |
| |
| /* Problem finding screen entry or its draw function */ |
| VB2_ERROR_UI_INVALID_SCREEN = 0x100c0002, |
| |
| /* Screen drawing failed, including all CBGFX_ERROR_* errors returned |
| from libpayload */ |
| VB2_ERROR_UI_DRAW_FAILURE = 0x100c0003, |
| |
| /* Problem loading archive from CBFS */ |
| VB2_ERROR_UI_INVALID_ARCHIVE = 0x100c0004, |
| |
| /* Image not found in the archive */ |
| VB2_ERROR_UI_MISSING_IMAGE = 0x100c0005, |
| |
| /* Requested locale not available */ |
| VB2_ERROR_UI_INVALID_LOCALE = 0x100c0006, |
| |
| /* Memory allocation failure */ |
| VB2_ERROR_UI_MEMORY_ALLOC = 0x100c0007, |
| |
| /* Log screen initialization failed */ |
| VB2_ERROR_UI_LOG_INIT = 0x100c0008, |
| |
| /********************************************************************** |
| * Errors generated by host library (non-firmware) start here. |
| */ |
| VB2_ERROR_HOST_BASE = 0x20000000, |
| |
| /********************************************************************** |
| * Errors generated by host library misc functions |
| */ |
| VB2_ERROR_HOST_MISC = VB2_ERROR_HOST_BASE + 0x010000, |
| |
| /* Unable to open file in read_file() */ |
| VB2_ERROR_READ_FILE_OPEN, |
| |
| /* Bad size in read_file() */ |
| VB2_ERROR_READ_FILE_SIZE, |
| |
| /* Unable to allocate buffer in read_file() */ |
| VB2_ERROR_READ_FILE_ALLOC, |
| |
| /* Unable to read data in read_file() */ |
| VB2_ERROR_READ_FILE_DATA, |
| |
| /* Unable to open file in write_file() */ |
| VB2_ERROR_WRITE_FILE_OPEN, |
| |
| /* Unable to write data in write_file() */ |
| VB2_ERROR_WRITE_FILE_DATA, |
| |
| /* Unable to convert string to struct vb_id */ |
| VB2_ERROR_STR_TO_ID, |
| |
| /* Flashrom exited with failure status */ |
| VB2_ERROR_FLASHROM, |
| |
| /********************************************************************** |
| * Errors generated by host library key functions |
| */ |
| VB2_ERROR_HOST_KEY = VB2_ERROR_HOST_BASE + 0x020000, |
| |
| /* Unable to allocate key in vb2_private_key_read_pem() */ |
| VB2_ERROR_READ_PEM_ALLOC, |
| |
| /* Unable to open .pem file in vb2_private_key_read_pem() */ |
| VB2_ERROR_READ_PEM_FILE_OPEN, |
| |
| /* Bad RSA data from .pem file in vb2_private_key_read_pem() */ |
| VB2_ERROR_READ_PEM_RSA, |
| |
| /* Unable to set private key description */ |
| VB2_ERROR_PRIVATE_KEY_SET_DESC, |
| |
| /* Bad magic number in vb2_private_key_unpack() */ |
| VB2_ERROR_UNPACK_PRIVATE_KEY_MAGIC, |
| |
| /* Bad common header in vb2_private_key_unpack() */ |
| VB2_ERROR_UNPACK_PRIVATE_KEY_HEADER, |
| |
| /* Bad key data in vb2_private_key_unpack() */ |
| VB2_ERROR_UNPACK_PRIVATE_KEY_DATA, |
| |
| /* Bad struct version in vb2_private_key_unpack() */ |
| VB2_ERROR_UNPACK_PRIVATE_KEY_STRUCT_VERSION, |
| |
| /* Unable to allocate buffer in vb2_private_key_unpack() */ |
| VB2_ERROR_UNPACK_PRIVATE_KEY_ALLOC, |
| |
| /* Unable to unpack RSA key in vb2_private_key_unpack() */ |
| VB2_ERROR_UNPACK_PRIVATE_KEY_RSA, |
| |
| /* Unable to set description in vb2_private_key_unpack() */ |
| VB2_ERROR_UNPACK_PRIVATE_KEY_DESC, |
| |
| /* Bad bare hash key in vb2_private_key_unpack() */ |
| VB2_ERROR_UNPACK_PRIVATE_KEY_HASH, |
| |
| /* Unable to create RSA data in vb2_private_key_write() */ |
| VB2_ERROR_PRIVATE_KEY_WRITE_RSA, |
| |
| /* Unable to allocate packed key buffer in vb2_private_key_write() */ |
| VB2_ERROR_PRIVATE_KEY_WRITE_ALLOC, |
| |
| /* Unable to write file in vb2_private_key_write() */ |
| VB2_ERROR_PRIVATE_KEY_WRITE_FILE, |
| |
| /* Bad algorithm in vb2_private_key_hash() */ |
| VB2_ERROR_PRIVATE_KEY_HASH, |
| |
| /* Unable to determine key size in vb2_public_key_alloc() */ |
| VB2_ERROR_PUBLIC_KEY_ALLOC_SIZE, |
| |
| /* Unable to allocate buffer in vb2_public_key_alloc() */ |
| VB2_ERROR_PUBLIC_KEY_ALLOC, |
| |
| /* Unable to set public key description */ |
| VB2_ERROR_PUBLIC_KEY_SET_DESC, |
| |
| /* Unable to read key data in vb2_public_key_read_keyb() */ |
| VB2_ERROR_READ_KEYB_DATA, |
| |
| /* Wrong amount of data read in vb2_public_key_read_keyb() */ |
| VB2_ERROR_READ_KEYB_SIZE, |
| |
| /* Unable to allocate key buffer in vb2_public_key_read_keyb() */ |
| VB2_ERROR_READ_KEYB_ALLOC, |
| |
| /* Error unpacking RSA arrays in vb2_public_key_read_keyb() */ |
| VB2_ERROR_READ_KEYB_UNPACK, |
| |
| /* Unable to read key data in vb2_packed_key_read() */ |
| VB2_ERROR_READ_PACKED_KEY_DATA, |
| |
| /* Bad key data in vb2_packed_key_read() */ |
| VB2_ERROR_READ_PACKED_KEY, |
| |
| /* Unable to determine key size in vb2_public_key_pack() */ |
| VB2_ERROR_PUBLIC_KEY_PACK_SIZE, |
| |
| /* Bad hash algorithm in vb2_public_key_hash() */ |
| VB2_ERROR_PUBLIC_KEY_HASH, |
| |
| /* Bad key size in vb2_copy_packed_key() */ |
| VB2_ERROR_COPY_KEY_SIZE, |
| |
| /* Unable to convert back to vb1 crypto algorithm */ |
| VB2_ERROR_VB1_CRYPTO_ALGORITHM, |
| |
| /* Unable to allocate packed key */ |
| VB2_ERROR_PACKED_KEY_ALLOC, |
| |
| /* Unable to copy packed key */ |
| VB2_ERROR_PACKED_KEY_COPY, |
| |
| /* Packed key with invalid version */ |
| VB2_ERROR_PACKED_KEY_VERSION, |
| |
| /********************************************************************** |
| * Errors generated by host library signature functions |
| */ |
| VB2_ERROR_HOST_SIG = VB2_ERROR_HOST_BASE + 0x030000, |
| |
| /* Bad hash algorithm in vb2_digest_info() */ |
| VB2_ERROR_DIGEST_INFO, |
| |
| /* |
| * Unable to determine signature size for key algorithm in |
| * vb2_sig_size_for_key(). |
| */ |
| VB2_ERROR_SIG_SIZE_FOR_KEY, |
| |
| /* Bad signature size in vb2_sign_data() */ |
| VB2_SIGN_DATA_SIG_SIZE, |
| |
| /* Unable to get digest info in vb2_sign_data() */ |
| VB2_SIGN_DATA_DIGEST_INFO, |
| |
| /* Unable to get digest size in vb2_sign_data() */ |
| VB2_SIGN_DATA_DIGEST_SIZE, |
| |
| /* Unable to allocate digest buffer in vb2_sign_data() */ |
| VB2_SIGN_DATA_DIGEST_ALLOC, |
| |
| /* Unable to initialize digest in vb2_sign_data() */ |
| VB2_SIGN_DATA_DIGEST_INIT, |
| |
| /* Unable to extend digest in vb2_sign_data() */ |
| VB2_SIGN_DATA_DIGEST_EXTEND, |
| |
| /* Unable to finalize digest in vb2_sign_data() */ |
| VB2_SIGN_DATA_DIGEST_FINALIZE, |
| |
| /* RSA encrypt failed in vb2_sign_data() */ |
| VB2_SIGN_DATA_RSA_ENCRYPT, |
| |
| /* Not enough buffer space to hold signature in vb2_sign_object() */ |
| VB2_SIGN_OBJECT_OVERFLOW, |
| |
| /********************************************************************** |
| * Errors generated by host library keyblock functions |
| */ |
| VB2_ERROR_HOST_KEYBLOCK = VB2_ERROR_HOST_BASE + 0x040000, |
| |
| /* Unable to determine signature sizes for vb2_create_keyblock() */ |
| VB2_KEYBLOCK_CREATE_SIG_SIZE, |
| |
| /* Unable to pack data key for vb2_create_keyblock() */ |
| VB2_KEYBLOCK_CREATE_DATA_KEY, |
| |
| /* Unable to allocate buffer in vb2_create_keyblock() */ |
| VB2_KEYBLOCK_CREATE_ALLOC, |
| |
| /* Unable to sign keyblock in vb2_create_keyblock() */ |
| VB2_KEYBLOCK_CREATE_SIGN, |
| |
| /********************************************************************** |
| * Errors generated by host library firmware preamble functions |
| */ |
| VB2_ERROR_HOST_FW_PREAMBLE = VB2_ERROR_HOST_BASE + 0x050000, |
| |
| /* Unable to determine signature sizes for vb2_create_fw_preamble() */ |
| VB2_FW_PREAMBLE_CREATE_SIG_SIZE, |
| |
| /* Unable to allocate buffer in vb2_create_fw_preamble() */ |
| VB2_FW_PREAMBLE_CREATE_ALLOC, |
| |
| /* Unable to sign preamble in vb2_create_fw_preamble() */ |
| VB2_FW_PREAMBLE_CREATE_SIGN, |
| |
| /********************************************************************** |
| * Errors generated by unit test functions |
| */ |
| VB2_ERROR_UNIT_TEST = VB2_ERROR_HOST_BASE + 0x060000, |
| |
| /* Unable to open an input file needed for a unit test */ |
| VB2_ERROR_TEST_INPUT_FILE, |
| |
| /********************************************************************** |
| * Highest non-zero error generated inside vboot library. Note that |
| * error codes passed through vboot when it calls external APIs may |
| * still be outside this range. |
| */ |
| VB2_ERROR_MAX = VB2_ERROR_BASE + 0x1fffffff, |
| }; |
| |
| #endif /* VBOOT_REFERENCE_2RETURN_CODES_H_ */ |