blob: 2d1f09b113cbdd3754a26d3321ab2fdee200b763 [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 "FlushContext_fp.h"
10//
11//
12// Error Returns Meaning
13//
14// TPM_RC_HANDLE flushHandle does not reference a loaded object or session
15//
16TPM_RC
17TPM2_FlushContext(
18 FlushContext_In *in // IN: input parameter list
19 )
20{
21// Internal Data Update
22
23 // Call object or session specific routine to flush
24 switch(HandleGetType(in->flushHandle))
25 {
26 case TPM_HT_TRANSIENT:
27 if(!ObjectIsPresent(in->flushHandle))
28 return TPM_RC_HANDLE;
29 // Flush object
30 ObjectFlush(in->flushHandle);
31 break;
32 case TPM_HT_HMAC_SESSION:
33 case TPM_HT_POLICY_SESSION:
34 if( !SessionIsLoaded(in->flushHandle)
35 && !SessionIsSaved(in->flushHandle)
36 )
37 return TPM_RC_HANDLE;
38
39 // If the session to be flushed is the exclusive audit session, then
40 // indicate that there is no exclusive audit session any longer.
41 if(in->flushHandle == g_exclusiveAuditSession)
42 g_exclusiveAuditSession = TPM_RH_UNASSIGNED;
43
44 // Flush session
45 SessionFlush(in->flushHandle);
46 break;
47 default:
48 // This command only take object or session handle. Other handles
49 // should be filtered out at handle unmarshal
50 pAssert(FALSE);
51 break;
52 }
53
54 return TPM_RC_SUCCESS;
55}