blob: 0c368dedf8e8b7f1b522de0ff02ae5f19383181d [file] [log] [blame]
/* 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,
/* Called vb2_secdata_get() with uninitialized secdata */
VB2_ERROR_SECDATA_GET_UNINITIALIZED,
/* Called vb2_secdata_set() with uninitialized secdata */
VB2_ERROR_SECDATA_SET_UNINITIALIZED,
/**********************************************************************
* 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,
/**********************************************************************
* 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,
/* 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,
/**********************************************************************
* 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_ */