blob: 46d2e3f67189d0887d6941c1955d05fbf3e268f5 [file] [log] [blame]
/********************************************************************************/
/* */
/* TPM 1.2 Error Response */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* */
/* (c) Copyright IBM Corporation 2006, 2010. */
/* */
/* All rights reserved. */
/* */
/* Redistribution and use in source and binary forms, with or without */
/* modification, are permitted provided that the following conditions are */
/* met: */
/* */
/* Redistributions of source code must retain the above copyright notice, */
/* this list of conditions and the following disclaimer. */
/* */
/* Redistributions in binary form must reproduce the above copyright */
/* notice, this list of conditions and the following disclaimer in the */
/* documentation and/or other materials provided with the distribution. */
/* */
/* Neither the names of the IBM Corporation nor the names of its */
/* contributors may be used to endorse or promote products derived from */
/* this software without specific prior written permission. */
/* */
/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */
/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */
/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR */
/* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */
/* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */
/* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, */
/* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY */
/* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */
/* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE */
/* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
/********************************************************************************/
#ifndef TPM_ERROR_H
#define TPM_ERROR_H
/* 16. Return codes rev 99
The TPM has five types of return code. One indicates successful operation and four indicate
failure. TPM_SUCCESS (00000000) indicates successful execution. The failure reports are:
TPM defined fatal errors (00000001 to 000003FF), vendor defined fatal errors (00000400 to
000007FF), TPM defined non-fatal errors (00000800 to 00000BFF), and vendor defined
non-fatal errors (00000C00 to 00000FFF).
The range of vendor defined non-fatal errors was determined by the TSS-WG, which defined
XXXX YCCC with XXXX as OS specific and Y defining the TSS SW stack layer (0: TPM layer)
All failure cases return only a non-authenticated fixed set of information. This is because
the failure may have been due to authentication or other factors, and there is no possibility
of producing an authenticated response.
Fatal errors also terminate any authorization sessions. This is a result of returning only the
error code, as there is no way to return the nonces necessary to maintain an authorization
session. Non-fatal errors do not terminate authorization sessions.
The return code MUST use the following base. The return code MAY be TCG defined or vendor
defined. */
#define TPM_BASE 0x0 /* The start of TPM return codes */
#define TPM_SUCCESS TPM_BASE /* Successful completion of the operation */
#define TPM_VENDOR_ERROR TPM_Vendor_Specific32 /* Mask to indicate that the error code is
vendor specific for vendor specific
commands. */
#define TPM_NON_FATAL 0x00000800 /* Mask to indicate that the error code is a non-fatal
failure. */
/* TPM-defined fatal error codes */
#define TPM_AUTHFAIL TPM_BASE + 1 /* Authentication failed */
#define TPM_BADINDEX TPM_BASE + 2 /* The index to a PCR, DIR or other register is
incorrect */
#define TPM_BAD_PARAMETER TPM_BASE + 3 /* One or more parameter is bad */
#define TPM_AUDITFAILURE TPM_BASE + 4 /* An operation completed successfully but the auditing
of that operation failed. */
#define TPM_CLEAR_DISABLED TPM_BASE + 5 /* The clear disable flag is set and all clear
operations now require physical access */
#define TPM_DEACTIVATED TPM_BASE + 6 /* The TPM is deactivated */
#define TPM_DISABLED TPM_BASE + 7 /* The TPM is disabled */
#define TPM_DISABLED_CMD TPM_BASE + 8 /* The target command has been disabled */
#define TPM_FAIL TPM_BASE + 9 /* The operation failed */
#define TPM_BAD_ORDINAL TPM_BASE + 10 /* The ordinal was unknown or inconsistent */
#define TPM_INSTALL_DISABLED TPM_BASE + 11 /* The ability to install an owner is disabled */
#define TPM_INVALID_KEYHANDLE TPM_BASE + 12 /* The key handle presented was invalid */
#define TPM_KEYNOTFOUND TPM_BASE + 13 /* The target key was not found */
#define TPM_INAPPROPRIATE_ENC TPM_BASE + 14 /* Unacceptable encryption scheme */
#define TPM_MIGRATEFAIL TPM_BASE + 15 /* Migration authorization failed */
#define TPM_INVALID_PCR_INFO TPM_BASE + 16 /* PCR information could not be interpreted */
#define TPM_NOSPACE TPM_BASE + 17 /* No room to load key. */
#define TPM_NOSRK TPM_BASE + 18 /* There is no SRK set */
#define TPM_NOTSEALED_BLOB TPM_BASE + 19 /* An encrypted blob is invalid or was not created by
this TPM */
#define TPM_OWNER_SET TPM_BASE + 20 /* There is already an Owner */
#define TPM_RESOURCES TPM_BASE + 21 /* The TPM has insufficient internal resources to
perform the requested action. */
#define TPM_SHORTRANDOM TPM_BASE + 22 /* A random string was too short */
#define TPM_SIZE TPM_BASE + 23 /* The TPM does not have the space to perform the
operation. */
#define TPM_WRONGPCRVAL TPM_BASE + 24 /* The named PCR value does not match the current PCR
value. */
#define TPM_BAD_PARAM_SIZE TPM_BASE + 25 /* The paramSize argument to the command has the
incorrect value */
#define TPM_SHA_THREAD TPM_BASE + 26 /* There is no existing SHA-1 thread. */
#define TPM_SHA_ERROR TPM_BASE + 27 /* The calculation is unable to proceed because the
existing SHA-1 thread has already encountered an
error. */
#define TPM_FAILEDSELFTEST TPM_BASE + 28 /* Self-test has failed and the TPM has shutdown. */
#define TPM_AUTH2FAIL TPM_BASE + 29 /* The authorization for the second key in a 2 key
function failed authorization */
#define TPM_BADTAG TPM_BASE + 30 /* The tag value sent to for a command is invalid */
#define TPM_IOERROR TPM_BASE + 31 /* An IO error occurred transmitting information to
the TPM */
#define TPM_ENCRYPT_ERROR TPM_BASE + 32 /* The encryption process had a problem. */
#define TPM_DECRYPT_ERROR TPM_BASE + 33 /* The decryption process did not complete. */
#define TPM_INVALID_AUTHHANDLE TPM_BASE + 34 /* An invalid handle was used. */
#define TPM_NO_ENDORSEMENT TPM_BASE + 35 /* The TPM does not a EK installed */
#define TPM_INVALID_KEYUSAGE TPM_BASE + 36 /* The usage of a key is not allowed */
#define TPM_WRONG_ENTITYTYPE TPM_BASE + 37 /* The submitted entity type is not allowed */
#define TPM_INVALID_POSTINIT TPM_BASE + 38 /* The command was received in the wrong sequence
relative to TPM_Init and a subsequent TPM_Startup
*/
#define TPM_INAPPROPRIATE_SIG TPM_BASE + 39 /* Signed data cannot include additional DER
information */
#define TPM_BAD_KEY_PROPERTY TPM_BASE + 40 /* The key properties in TPM_KEY_PARMs are not
supported by this TPM */
#define TPM_BAD_MIGRATION TPM_BASE + 41 /* The migration properties of this key are incorrect.
*/
#define TPM_BAD_SCHEME TPM_BASE + 42 /* The signature or encryption scheme for this key is
incorrect or not permitted in this situation. */
#define TPM_BAD_DATASIZE TPM_BASE + 43 /* The size of the data (or blob) parameter is bad or
inconsistent with the referenced key */
#define TPM_BAD_MODE TPM_BASE + 44 /* A mode parameter is bad, such as capArea or
subCapArea for TPM_GetCapability, physicalPresence
parameter for TPM_PhysicalPresence, or
migrationType for TPM_CreateMigrationBlob. */
#define TPM_BAD_PRESENCE TPM_BASE + 45 /* Either the physicalPresence or physicalPresenceLock
bits have the wrong value */
#define TPM_BAD_VERSION TPM_BASE + 46 /* The TPM cannot perform this version of the
capability */
#define TPM_NO_WRAP_TRANSPORT TPM_BASE + 47 /* The TPM does not allow for wrapped transport
sessions */
#define TPM_AUDITFAIL_UNSUCCESSFUL TPM_BASE + 48 /* TPM audit construction failed and the
underlying command was returning a failure
code also */
#define TPM_AUDITFAIL_SUCCESSFUL TPM_BASE + 49 /* TPM audit construction failed and the underlying
command was returning success */
#define TPM_NOTRESETABLE TPM_BASE + 50 /* Attempt to reset a PCR register that does not have
the resettable attribute */
#define TPM_NOTLOCAL TPM_BASE + 51 /* Attempt to reset a PCR register that requires
locality and locality modifier not part of command
transport */
#define TPM_BAD_TYPE TPM_BASE + 52 /* Make identity blob not properly typed */
#define TPM_INVALID_RESOURCE TPM_BASE + 53 /* When saving context identified resource type does
not match actual resource */
#define TPM_NOTFIPS TPM_BASE + 54 /* The TPM is attempting to execute a command only
available when in FIPS mode */
#define TPM_INVALID_FAMILY TPM_BASE + 55 /* The command is attempting to use an invalid family
ID */
#define TPM_NO_NV_PERMISSION TPM_BASE + 56 /* The permission to manipulate the NV storage is not
available */
#define TPM_REQUIRES_SIGN TPM_BASE + 57 /* The operation requires a signed command */
#define TPM_KEY_NOTSUPPORTED TPM_BASE + 58 /* Wrong operation to load an NV key */
#define TPM_AUTH_CONFLICT TPM_BASE + 59 /* NV_LoadKey blob requires both owner and blob
authorization */
#define TPM_AREA_LOCKED TPM_BASE + 60 /* The NV area is locked and not writable */
#define TPM_BAD_LOCALITY TPM_BASE + 61 /* The locality is incorrect for the attempted
operation */
#define TPM_READ_ONLY TPM_BASE + 62 /* The NV area is read only and can't be written to
*/
#define TPM_PER_NOWRITE TPM_BASE + 63 /* There is no protection on the write to the NV area
*/
#define TPM_FAMILYCOUNT TPM_BASE + 64 /* The family count value does not match */
#define TPM_WRITE_LOCKED TPM_BASE + 65 /* The NV area has already been written to */
#define TPM_BAD_ATTRIBUTES TPM_BASE + 66 /* The NV area attributes conflict */
#define TPM_INVALID_STRUCTURE TPM_BASE + 67 /* The structure tag and version are invalid or
inconsistent */
#define TPM_KEY_OWNER_CONTROL TPM_BASE + 68 /* The key is under control of the TPM Owner and can
only be evicted by the TPM Owner. */
#define TPM_BAD_COUNTER TPM_BASE + 69 /* The counter handle is incorrect */
#define TPM_NOT_FULLWRITE TPM_BASE + 70 /* The write is not a complete write of the area */
#define TPM_CONTEXT_GAP TPM_BASE + 71 /* The gap between saved context counts is too large
*/
#define TPM_MAXNVWRITES TPM_BASE + 72 /* The maximum number of NV writes without an owner
has been exceeded */
#define TPM_NOOPERATOR TPM_BASE + 73 /* No operator authorization value is set */
#define TPM_RESOURCEMISSING TPM_BASE + 74 /* The resource pointed to by context is not loaded
*/
#define TPM_DELEGATE_LOCK TPM_BASE + 75 /* The delegate administration is locked */
#define TPM_DELEGATE_FAMILY TPM_BASE + 76 /* Attempt to manage a family other then the delegated
family */
#define TPM_DELEGATE_ADMIN TPM_BASE + 77 /* Delegation table management not enabled */
#define TPM_TRANSPORT_NOTEXCLUSIVE TPM_BASE + 78 /* There was a command executed outside of an
exclusive transport session */
#define TPM_OWNER_CONTROL TPM_BASE + 79 /* Attempt to context save a owner evict controlled
key */
#define TPM_DAA_RESOURCES TPM_BASE + 80 /* The DAA command has no resources available to
execute the command */
#define TPM_DAA_INPUT_DATA0 TPM_BASE + 81 /* The consistency check on DAA parameter inputData0
has failed. */
#define TPM_DAA_INPUT_DATA1 TPM_BASE + 82 /* The consistency check on DAA parameter inputData1
has failed. */
#define TPM_DAA_ISSUER_SETTINGS TPM_BASE + 83 /* The consistency check on DAA_issuerSettings has
failed. */
#define TPM_DAA_TPM_SETTINGS TPM_BASE + 84 /* The consistency check on DAA_tpmSpecific has
failed. */
#define TPM_DAA_STAGE TPM_BASE + 85 /* The atomic process indicated by the submitted DAA
command is not the expected process. */
#define TPM_DAA_ISSUER_VALIDITY TPM_BASE + 86 /* The issuer's validity check has detected an
inconsistency */
#define TPM_DAA_WRONG_W TPM_BASE + 87 /* The consistency check on w has failed. */
#define TPM_BAD_HANDLE TPM_BASE + 88 /* The handle is incorrect */
#define TPM_BAD_DELEGATE TPM_BASE + 89 /* Delegation is not correct */
#define TPM_BADCONTEXT TPM_BASE + 90 /* The context blob is invalid */
#define TPM_TOOMANYCONTEXTS TPM_BASE + 91 /* Too many contexts held by the TPM */
#define TPM_MA_TICKET_SIGNATURE TPM_BASE + 92 /* Migration authority signature validation failure
*/
#define TPM_MA_DESTINATION TPM_BASE + 93 /* Migration destination not authenticated */
#define TPM_MA_SOURCE TPM_BASE + 94 /* Migration source incorrect */
#define TPM_MA_AUTHORITY TPM_BASE + 95 /* Incorrect migration authority */
#define TPM_PERMANENTEK TPM_BASE + 97 /* Attempt to revoke the EK and the EK is not revocable */
#define TPM_BAD_SIGNATURE TPM_BASE + 98 /* Bad signature of CMK ticket */
#define TPM_NOCONTEXTSPACE TPM_BASE + 99 /* There is no room in the context list for additional
contexts */
/* As error codes are added here, they should also be added to lib/miscfunc.c */
/* TPM-defined non-fatal errors */
#define TPM_RETRY TPM_BASE + TPM_NON_FATAL /* The TPM is too busy to respond to the
command immediately, but the command
could be submitted at a later time */
#define TPM_NEEDS_SELFTEST TPM_BASE + TPM_NON_FATAL + 1 /* TPM_ContinueSelfTest has has not
been run*/
#define TPM_DOING_SELFTEST TPM_BASE + TPM_NON_FATAL + 2 /* The TPM is currently executing the
actions of TPM_ContinueSelfTest
because the ordinal required
resources that have not been
tested. */
#define TPM_DEFEND_LOCK_RUNNING TPM_BASE + TPM_NON_FATAL + 3
/* The TPM is defending against dictionary
attacks and is in some time-out
period. */
#endif