blob: cb61252681458588ad0f0e5c947b286f41645592 [file] [log] [blame]
Vadim Bendebury56797522015-05-20 10:32:25 -07001// This file was extracted from the TCG Published
2// Trusted Platform Module Library
3// Part 3: Commands
4// Family "2.0"
5// Level 00 Revision 01.16
6// October 30, 2014
7
8#include "InternalRoutines.h"
9#include "NV_UndefineSpace_fp.h"
10//
11//
12// Error Returns Meaning
13//
14// TPM_RC_ATTRIBUTES TPMA_NV_POLICY_DELETE is SET in the Index referenced by
15// nvIndex so this command may not be used to delete this Index (see
16// TPM2_NV_UndefineSpaceSpecial())
17// TPM_RC_NV_AUTHORIZATION attempt to use ownerAuth to delete an index created by the platform
18//
19TPM_RC
20TPM2_NV_UndefineSpace(
21 NV_UndefineSpace_In *in // IN: input parameter list
22 )
23{
24 TPM_RC result;
25 NV_INDEX nvIndex;
26
27 // The command needs NV update. Check if NV is available.
28 // A TPM_RC_NV_UNAVAILABLE or TPM_RC_NV_RATE error may be returned at
29 // this point
30 result = NvIsAvailable();
31 if(result != TPM_RC_SUCCESS) return result;
32
33// Input Validation
34
35 // Get NV index info
36 NvGetIndexInfo(in->nvIndex, &nvIndex);
37
38 // This command can't be used to delete an index with TPMA_NV_POLICY_DELETE SET
39 if(SET == nvIndex.publicArea.attributes.TPMA_NV_POLICY_DELETE)
40 return TPM_RC_ATTRIBUTES + RC_NV_UndefineSpace_nvIndex;
41
42 // The owner may only delete an index that was defined with ownerAuth. The
43 // platform may delete an index that was created with either auth.
44 if( in->authHandle == TPM_RH_OWNER
45 && nvIndex.publicArea.attributes.TPMA_NV_PLATFORMCREATE == SET)
46 return TPM_RC_NV_AUTHORIZATION;
47
48// Internal Data Update
49
50 // Call implementation dependent internal routine to delete NV index
51 NvDeleteEntity(in->nvIndex);
52
53 return TPM_RC_SUCCESS;
54}