| /********************************************************************************/ |
| /* */ |
| /* 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 |