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