Blob Blame History Raw
diff -urp trousers-0.3.4.orig/src/tspi/tspi_seal.c trousers-0.3.4/src/tspi/tspi_seal.c
--- trousers-0.3.4.orig/src/tspi/tspi_seal.c	2010-02-08 09:34:52.000000000 -0500
+++ trousers-0.3.4/src/tspi/tspi_seal.c	2010-02-08 09:35:25.000000000 -0500
@@ -42,7 +42,7 @@ Tspi_Data_Seal(TSS_HENCDATA hEncData,	/*
 	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,	/*
 
 	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,	/*
 	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;
 	}
 
@@ -142,15 +139,14 @@ Tspi_Data_Seal(TSS_HENCDATA hEncData,	/*
 							pcrDataSize, pcrData, ulDataLength,
 							sealData, xsap->pAuth, &encDataSize,
 							&encData))) {
-			free(sealData);
-			return result;
+			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);
-		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);
-	free(sealData);
+	if (sealData != rgbDataToSeal)
+		free(sealData);
 	return result;
 }