55 lines
1.5 KiB
C
55 lines
1.5 KiB
C
// 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;
|
|
}
|