| // This file was extracted from the TCG Published |
| // Trusted Platform Module Library |
| // Part 3: Commands |
| // Family "2.0" |
| // Level 00 Revision 01.16 |
| // October 30, 2014 |
| |
| #include "InternalRoutines.h" |
| #include "FlushContext_fp.h" |
| // |
| // |
| // Error Returns Meaning |
| // |
| // TPM_RC_HANDLE flushHandle does not reference a loaded object or session |
| // |
| TPM_RC |
| TPM2_FlushContext( |
| FlushContext_In *in // IN: input parameter list |
| ) |
| { |
| // Internal Data Update |
| |
| // Call object or session specific routine to flush |
| switch(HandleGetType(in->flushHandle)) |
| { |
| case TPM_HT_TRANSIENT: |
| if(!ObjectIsPresent(in->flushHandle)) |
| return TPM_RC_HANDLE; |
| // Flush object |
| ObjectFlush(in->flushHandle); |
| break; |
| case TPM_HT_HMAC_SESSION: |
| case TPM_HT_POLICY_SESSION: |
| if( !SessionIsLoaded(in->flushHandle) |
| && !SessionIsSaved(in->flushHandle) |
| ) |
| return TPM_RC_HANDLE; |
| |
| // If the session to be flushed is the exclusive audit session, then |
| // indicate that there is no exclusive audit session any longer. |
| if(in->flushHandle == g_exclusiveAuditSession) |
| g_exclusiveAuditSession = TPM_RH_UNASSIGNED; |
| |
| // Flush session |
| SessionFlush(in->flushHandle); |
| break; |
| default: |
| // This command only take object or session handle. Other handles |
| // should be filtered out at handle unmarshal |
| pAssert(FALSE); |
| break; |
| } |
| |
| return TPM_RC_SUCCESS; |
| } |