| Index: src/tspi/tspi_seal.c
|
| diff --git a/src/tspi/tspi_seal.c b/src/tspi/tspi_seal.c
|
| index 23350f7ad8e55871720ade35909f53ee4c4a5004..95250c6b94f1f60f7d3a18d60d25725fe4de8d92 100644
|
| --- a/src/tspi/tspi_seal.c
|
| +++ b/src/tspi/tspi_seal.c
|
| @@ -42,7 +42,7 @@ Tspi_Data_Seal(TSS_HENCDATA hEncData, /* in */
|
| TCS_KEY_HANDLE tcsKeyHandle;
|
| TSS_HCONTEXT tspContext;
|
| Trspi_HashCtx hashCtx;
|
| - BYTE *sealData;
|
| + BYTE *sealData = NULL;
|
| struct authsess *xsap = NULL;
|
| #ifdef TSS_BUILD_SEALX
|
| UINT32 protectMode;
|
| @@ -91,13 +91,12 @@ Tspi_Data_Seal(TSS_HENCDATA hEncData, /* in */
|
|
|
| if ((result = authsess_xsap_init(tspContext, hEncKey, hEncData, TSS_AUTH_POLICY_REQUIRED,
|
| sealOrdinal, TPM_ET_KEYHANDLE, &xsap)))
|
| - return result;
|
| + goto error;
|
|
|
| #ifdef TSS_BUILD_SEALX
|
| if (sealOrdinal == TPM_ORD_Seal)
|
| sealData = rgbDataToSeal;
|
| else {
|
| - sealData = NULL;
|
| if ((sealData = (BYTE *)calloc(1, ulDataLength)) == NULL) {
|
| LogError("malloc of %u bytes failed", ulDataLength);
|
| result = TSPERR(TSS_E_OUTOFMEMORY);
|
| @@ -128,8 +127,6 @@ Tspi_Data_Seal(TSS_HENCDATA hEncData, /* in */
|
| result |= Trspi_Hash_UINT32(&hashCtx, ulDataLength);
|
| result |= Trspi_HashUpdate(&hashCtx, ulDataLength, sealData);
|
| if ((result |= Trspi_HashFinal(&hashCtx, digest.digest))) {
|
| - if (sealData != rgbDataToSeal)
|
| - free(sealData);
|
| goto error;
|
| }
|
|
|
| @@ -141,16 +138,15 @@ Tspi_Data_Seal(TSS_HENCDATA hEncData, /* in */
|
| if ((result = TCS_API(tspContext)->Seal(tspContext, tcsKeyHandle, &xsap->encAuthUse,
|
| pcrDataSize, pcrData, ulDataLength,
|
| sealData, xsap->pAuth, &encDataSize,
|
| - &encData)))
|
| - return result;
|
| + &encData))) {
|
| + goto error;
|
| + }
|
| } else if (sealOrdinal == TPM_ORD_Sealx) {
|
| - result = TCS_API(tspContext)->Sealx(tspContext, tcsKeyHandle, &xsap->encAuthUse,
|
| + if ((result = TCS_API(tspContext)->Sealx(tspContext, tcsKeyHandle, &xsap->encAuthUse,
|
| pcrDataSize, pcrData, ulDataLength, sealData,
|
| - xsap->pAuth, &encDataSize, &encData);
|
| - free(sealData);
|
| -
|
| - if (result != TSS_SUCCESS)
|
| + xsap->pAuth, &encDataSize, &encData))) {
|
| goto error;
|
| + }
|
| } else {
|
| result = TSPERR(TSS_E_INTERNAL_ERROR);
|
| goto error;
|
| @@ -183,7 +179,8 @@ error:
|
| authsess_free(xsap);
|
| free(encData);
|
| free(pcrData);
|
| -
|
| + if (sealData != rgbDataToSeal)
|
| + free(sealData);
|
| return result;
|
| }
|
|
|
|
|