/* 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_2_RETURN_CODES_H_ #define VBOOT_2_RETURN_CODES_H_ /* * 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, /* * 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 = 0x0100000, /* 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, /********************************************************************** * 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, /********************************************************************** * 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, /********************************************************************** * Secure data storage errors */ VB2_ERROR_SECDATA = VB2_ERROR_BASE + 0x040000, /* Bad CRC in vb2_secdata_check_crc() */ VB2_ERROR_SECDATA_CRC, /* Bad struct version in vb2_secdata_init() */ VB2_ERROR_SECDATA_VERSION, /* Invalid param in vb2_secdata_get() */ VB2_ERROR_SECDATA_GET_PARAM, /* Invalid param in vb2_secdata_set() */ VB2_ERROR_SECDATA_SET_PARAM, /* Invalid flags passed to vb2_secdata_set() */ VB2_ERROR_SECDATA_SET_FLAGS, /********************************************************************** * 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, /* Bad algorithm in vb2_unpack_key() */ VB2_ERROR_UNPACK_KEY_ALGORITHM, /* Bad key size in vb2_unpack_key() */ VB2_ERROR_UNPACK_KEY_SIZE, /* Bad key alignment in vb2_unpack_key() */ VB2_ERROR_UNPACK_KEY_ALIGN, /* Bad key array size in vb2_unpack_key() */ 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, /* * Bad digest size in vb2_verify_data() - probably because algorithm * is bad. */ VB2_ERROR_VDATA_DIGEST_SIZE, /* Unsupported hash algorithm in vb2_unpack_key() */ VB2_ERROR_UNPACK_KEY_HASH_ALGORITHM, /********************************************************************** * 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, /********************************************************************** * 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, /********************************************************************** * Misc higher-level code errors */ VB2_ERROR_MISC = VB2_ERROR_BASE + 0x080000, /* Work buffer too small in vb2_init_context() */ VB2_ERROR_INITCTX_WORKBUF_SMALL, /* Work buffer unaligned in vb2_init_context() */ VB2_ERROR_INITCTX_WORKBUF_ALIGN, /* Work buffer too small in vb2_fw_parse_gbb() */ 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_verify_fw_keyblock() */ VB2_ERROR_FW_KEYBLOCK_WORKBUF_ROOT_KEY, /* Work buffer too small for header in vb2_verify_fw_keyblock() */ VB2_ERROR_FW_KEYBLOCK_WORKBUF_HEADER, /* Work buffer too small for keyblock in vb2_verify_fw_keyblock() */ VB2_ERROR_FW_KEYBLOCK_WORKBUF, /* Keyblock version out of range in vb2_verify_fw_keyblock() */ VB2_ERROR_FW_KEYBLOCK_VERSION_RANGE, /* Keyblock version rollback in vb2_verify_fw_keyblock() */ VB2_ERROR_FW_KEYBLOCK_VERSION_ROLLBACK, /* Missing firmware data key in vb2_verify_fw_preamble2() */ VB2_ERROR_FW_PREAMBLE2_DATA_KEY, /* Work buffer too small for header in vb2_verify_fw_preamble2() */ VB2_ERROR_FW_PREAMBLE2_WORKBUF_HEADER, /* Work buffer too small for preamble in vb2_verify_fw_preamble2() */ VB2_ERROR_FW_PREAMBLE2_WORKBUF, /* Firmware version out of range in vb2_verify_fw_preamble2() */ VB2_ERROR_FW_PREAMBLE2_VERSION_RANGE, /* Firmware version rollback in vb2_verify_fw_preamble2() */ VB2_ERROR_FW_PREAMBLE2_VERSION_ROLLBACK, /********************************************************************** * API-level errors */ VB2_ERROR_API = VB2_ERROR_BASE + 0x090000, /* Bag 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, /* Bag 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, /* Siganature size mismatch in vb2api_check_hash() */ VB2_ERROR_API_CHECK_HASH_SIG_SIZE, /* Phase one needs recovery mode */ VB2_ERROR_API_PHASE1_RECOVERY, /********************************************************************** * 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 */ VB2_ERROR_EX_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 */ VB2_ERROR_EX_TPM_CLEAR_OWNER_UNIMPLEMENTED, /********************************************************************** * 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 + 0xffffff, }; #endif /* VBOOT_2_RETURN_CODES_H_ */