diff options
Diffstat (limited to 'src/tss2-esys/api/Esys_NV_Write.c')
-rw-r--r-- | src/tss2-esys/api/Esys_NV_Write.c | 35 |
1 files changed, 9 insertions, 26 deletions
diff --git a/src/tss2-esys/api/Esys_NV_Write.c b/src/tss2-esys/api/Esys_NV_Write.c index f2ed36df..90760f64 100644 --- a/src/tss2-esys/api/Esys_NV_Write.c +++ b/src/tss2-esys/api/Esys_NV_Write.c @@ -18,21 +18,9 @@ /** Store command parameters inside the ESYS_CONTEXT for use during _Finish */ static void store_input_parameters ( ESYS_CONTEXT *esysContext, - ESYS_TR authHandle, - ESYS_TR nvIndex, - const TPM2B_MAX_NV_BUFFER *data, - UINT16 offset) + ESYS_TR nvIndex) { - esysContext->in.NV_Write.authHandle = authHandle; - esysContext->in.NV_Write.nvIndex = nvIndex; - esysContext->in.NV_Write.offset = offset; - if (data == NULL) { - esysContext->in.NV_Write.data = NULL; - } else { - esysContext->in.NV_Write.dataData = *data; - esysContext->in.NV_Write.data = - &esysContext->in.NV_Write.dataData; - } + esysContext->in.NV.nvIndex = nvIndex; } /** One-Call function for TPM2_NV_Write @@ -184,10 +172,10 @@ Esys_NV_Write_Async( return r; esysContext->state = _ESYS_STATE_INTERNALERROR; - /* Check and store input parameters */ + /* Check input parameters */ r = check_session_feasibility(shandle1, shandle2, shandle3, 1); return_state_if_error(r, _ESYS_STATE_INIT, "Check session usage"); - store_input_parameters(esysContext, authHandle, nvIndex, data, offset); + store_input_parameters(esysContext, nvIndex); /* Retrieve the metadata objects for provided handles */ r = esys_GetResourceObject(esysContext, authHandle, &authHandleNode); @@ -273,7 +261,8 @@ Esys_NV_Write_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; } @@ -291,19 +280,13 @@ Esys_NV_Write_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; return r; } esysContext->state = _ESYS_STATE_RESUBMISSION; - r = Esys_NV_Write_Async(esysContext, esysContext->in.NV_Write.authHandle, - esysContext->in.NV_Write.nvIndex, - esysContext->session_type[0], - esysContext->session_type[1], - esysContext->session_type[2], - esysContext->in.NV_Write.data, - esysContext->in.NV_Write.offset); + 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 @@ -342,7 +325,7 @@ Esys_NV_Write_Finish( "Received error from SAPI unmarshaling" ); - ESYS_TR nvIndex = esysContext->in.NV_Write.nvIndex; + ESYS_TR nvIndex = esysContext->in.NV.nvIndex; RSRC_NODE_T *nvIndexNode; r = esys_GetResourceObject(esysContext, nvIndex, &nvIndexNode); return_if_error(r, "get resource"); |