aboutsummaryrefslogtreecommitdiff
path: root/src/tss2-esys/api/Esys_StartAuthSession.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tss2-esys/api/Esys_StartAuthSession.c')
-rw-r--r--src/tss2-esys/api/Esys_StartAuthSession.c37
1 files changed, 12 insertions, 25 deletions
diff --git a/src/tss2-esys/api/Esys_StartAuthSession.c b/src/tss2-esys/api/Esys_StartAuthSession.c
index ece92fb6..f7022e5f 100644
--- a/src/tss2-esys/api/Esys_StartAuthSession.c
+++ b/src/tss2-esys/api/Esys_StartAuthSession.c
@@ -204,7 +204,7 @@ Esys_StartAuthSession_Async(
return r;
esysContext->state = _ESYS_STATE_INTERNALERROR;
- /* Check and store input parameters */
+ /* Check input parameters */
r = check_session_feasibility(shandle1, shandle2, shandle3, 0);
return_state_if_error(r, _ESYS_STATE_INIT, "Check session usage");
store_input_parameters(esysContext, tpmKey, bind, nonceCaller, sessionType,
@@ -319,7 +319,8 @@ Esys_StartAuthSession_Finish(
}
/* Check for correct sequence and set sequence to irregular for now */
- if (esysContext->state != _ESYS_STATE_SENT) {
+ if (esysContext->state != _ESYS_STATE_SENT &&
+ esysContext->state != _ESYS_STATE_RESUBMISSION) {
LOG_ERROR("Esys called in bad sequence.");
return TSS2_ESYS_RC_BAD_SEQUENCE;
}
@@ -338,18 +339,13 @@ Esys_StartAuthSession_Finish(
IESYS_RESOURCE *rsrc = &sessionHandleNode->rsrc;
rsrc->handle = ESYS_TR_NONE;
- rsrc->misc.rsrc_session.sessionAttributes =
- TPMA_SESSION_CONTINUESESSION;
- rsrc->misc.rsrc_session.sessionType =
- esysContext->in.StartAuthSession.sessionType;
- rsrc->misc.rsrc_session.authHash =
- esysContext->in.StartAuthSession.authHash;
- rsrc->misc.rsrc_session.symmetric =
- *esysContext->in.StartAuthSession.symmetric;
- rsrc->misc.rsrc_session.nonceCaller =
- esysContext->in.StartAuthSession.nonceCallerData;
-
- /*Receive the TPM response and handle resubmissions if necessary. */
+ rsrc->misc.rsrc_session.sessionAttributes = TPMA_SESSION_CONTINUESESSION;
+ rsrc->misc.rsrc_session.sessionType = esysContext->in.StartAuthSession.sessionType;
+ rsrc->misc.rsrc_session.authHash = esysContext->in.StartAuthSession.authHash;
+ rsrc->misc.rsrc_session.symmetric = *esysContext->in.StartAuthSession.symmetric;
+ rsrc->misc.rsrc_session.nonceCaller = esysContext->in.StartAuthSession.nonceCallerData;
+
+ /* Receive the TPM response and handle resubmissions if necessary. */
r = Tss2_Sys_ExecuteFinish(esysContext->sys, esysContext->timeout);
if ((r & ~TSS2_RC_LAYER_MASK) == TSS2_BASE_RC_TRY_AGAIN) {
LOG_DEBUG("A layer below returned TRY_AGAIN: %" PRIx32, r);
@@ -361,22 +357,13 @@ Esys_StartAuthSession_Finish(
if (r == TPM2_RC_RETRY || r == TPM2_RC_TESTING || r == TPM2_RC_YIELDED) {
LOG_DEBUG("TPM returned RETRY, TESTING or YIELDED, which triggers a "
"resubmission: %" PRIx32, r);
- if (esysContext->submissionCount >= _ESYS_MAX_SUBMISSIONS) {
+ if (esysContext->submissionCount++ >= _ESYS_MAX_SUBMISSIONS) {
LOG_WARNING("Maximum number of (re)submissions has been reached.");
esysContext->state = _ESYS_STATE_INIT;
goto error_cleanup;
}
esysContext->state = _ESYS_STATE_RESUBMISSION;
- r = Esys_StartAuthSession_Async(esysContext,
- esysContext->in.StartAuthSession.tpmKey,
- esysContext->in.StartAuthSession.bind,
- esysContext->session_type[0],
- esysContext->session_type[1],
- esysContext->session_type[2],
- esysContext->in.StartAuthSession.nonceCaller,
- esysContext->in.StartAuthSession.sessionType,
- esysContext->in.StartAuthSession.symmetric,
- esysContext->in.StartAuthSession.authHash);
+ r = Tss2_Sys_ExecuteAsync(esysContext->sys);
if (r != TSS2_RC_SUCCESS) {
LOG_WARNING("Error attempting to resubmit");
/* We do not set esysContext->state here but inherit the most recent