]> git.proxmox.com Git - mirror_edk2.git/commitdiff
SecurityPkg: Clear AuthSession content after use.
authorYao, Jiewen <jiewen.yao@intel.com>
Mon, 11 Jan 2016 05:18:32 +0000 (05:18 +0000)
committerjyao1 <jyao1@Edk2>
Mon, 11 Jan 2016 05:18:32 +0000 (05:18 +0000)
Some commands in Tpm2CommandLib accept AuthSession
as input parameter and copy to local command buffer.
After use, this AuthSession content should be zeroed,
because there might be some secrete there.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: "Yao, Jiewen" <jiewen.yao@intel.com>
Reviewed-by: "Zhang, Chao B" <chao.b.zhang@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19635 6f19259b-4bc3-4df7-8a09-765794883524

SecurityPkg/Library/Tpm2CommandLib/Tpm2DictionaryAttack.c
SecurityPkg/Library/Tpm2CommandLib/Tpm2EnhancedAuthorization.c
SecurityPkg/Library/Tpm2CommandLib/Tpm2Hierarchy.c
SecurityPkg/Library/Tpm2CommandLib/Tpm2Integrity.c
SecurityPkg/Library/Tpm2CommandLib/Tpm2Miscellaneous.c
SecurityPkg/Library/Tpm2CommandLib/Tpm2NVStorage.c

index 2f6488fb97f6d540616d44f9584b7ab5dbeaf1cc..3198b8a4b895ea03f9a32286101ae06fbcecbe77 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Implement TPM2 DictionaryAttack related command.\r
 \r
-Copyright (c) 2013, Intel Corporation. All rights reserved. <BR>\r
+Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved. <BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -104,19 +104,27 @@ Tpm2DictionaryAttackLockReset (
   RecvBufferSize = sizeof (RecvBuffer);\r
   Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, &RecvBufferSize, (UINT8 *)&RecvBuffer);\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2DictionaryAttackLockReset - RecvBufferSize Error - %x\n", RecvBufferSize));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
   if (SwapBytes32(RecvBuffer.Header.responseCode) != TPM_RC_SUCCESS) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2DictionaryAttackLockReset - responseCode - %x\n", SwapBytes32(RecvBuffer.Header.responseCode)));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
-  return EFI_SUCCESS;\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&SendBuffer, sizeof(SendBuffer));\r
+  ZeroMem (&RecvBuffer, sizeof(RecvBuffer));\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -187,17 +195,25 @@ Tpm2DictionaryAttackParameters (
   RecvBufferSize = sizeof (RecvBuffer);\r
   Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, &RecvBufferSize, (UINT8 *)&RecvBuffer);\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2DictionaryAttackParameters - RecvBufferSize Error - %x\n", RecvBufferSize));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
   if (SwapBytes32(RecvBuffer.Header.responseCode) != TPM_RC_SUCCESS) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2DictionaryAttackParameters - responseCode - %x\n", SwapBytes32(RecvBuffer.Header.responseCode)));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
-  return EFI_SUCCESS;\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&SendBufferSize, sizeof(SendBufferSize));\r
+  ZeroMem (&RecvBuffer, sizeof(RecvBuffer));\r
+  return Status;\r
 }\r
index d11f543463290937bb0d8fde10eceb65b3861962..6f6b3693f861b4f48d18d5eae08a85b44f91d4e0 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Implement TPM2 EnhancedAuthorization related command.\r
 \r
-Copyright (c) 2014, Intel Corporation. All rights reserved. <BR>\r
+Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved. <BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -161,16 +161,18 @@ Tpm2PolicySecret (
   RecvBufferSize = sizeof (RecvBuffer);\r
   Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, &RecvBufferSize, (UINT8 *)&RecvBuffer);\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2PolicySecret - RecvBufferSize Error - %x\n", RecvBufferSize));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
   if (SwapBytes32(RecvBuffer.Header.responseCode) != TPM_RC_SUCCESS) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2PolicySecret - responseCode - %x\n", SwapBytes32(RecvBuffer.Header.responseCode)));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -189,7 +191,13 @@ Tpm2PolicySecret (
   Buffer += sizeof(UINT16);\r
   CopyMem (PolicyTicket->digest.buffer, Buffer, PolicyTicket->digest.size);\r
 \r
-  return EFI_SUCCESS;\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&SendBuffer, sizeof(SendBuffer));\r
+  ZeroMem (&RecvBuffer, sizeof(RecvBuffer));\r
+  return Status;\r
 }\r
 \r
 /**\r
index 11f12294346766a27924d2bc6fdf56b3448d5211..9bfbdad394c0aa9b80a22435ffdc7dff95c05e58 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Implement TPM2 Hierarchy related command.\r
 \r
-Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved. <BR>\r
+Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved. <BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -186,19 +186,27 @@ Tpm2SetPrimaryPolicy (
   RecvBufferSize = sizeof (RecvBuffer);\r
   Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, &RecvBufferSize, (UINT8 *)&RecvBuffer);\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2SetPrimaryPolicy - RecvBufferSize Error - %x\n", RecvBufferSize));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
   if (SwapBytes32(RecvBuffer.Header.responseCode) != TPM_RC_SUCCESS) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2SetPrimaryPolicy - responseCode - %x\n", SwapBytes32(RecvBuffer.Header.responseCode)));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
-  return EFI_SUCCESS;\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&SendBuffer, sizeof(SendBuffer));\r
+  ZeroMem (&RecvBuffer, sizeof(RecvBuffer));\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -246,12 +254,13 @@ Tpm2Clear (
   ResultBufSize = sizeof(Res);\r
   Status = Tpm2SubmitCommand (CmdSize, (UINT8 *)&Cmd, &ResultBufSize, (UINT8 *)&Res);\r
   if (EFI_ERROR(Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   if (ResultBufSize > sizeof(Res)) {\r
     DEBUG ((EFI_D_ERROR, "Clear: Failed ExecuteCommand: Buffer Too Small\r\n"));\r
-    return EFI_BUFFER_TOO_SMALL;\r
+    Status = EFI_BUFFER_TOO_SMALL;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -260,7 +269,8 @@ Tpm2Clear (
   RespSize = SwapBytes32(Res.Header.paramSize);\r
   if (RespSize > sizeof(Res)) {\r
     DEBUG ((EFI_D_ERROR, "Clear: Response size too large! %d\r\n", RespSize));\r
-    return EFI_BUFFER_TOO_SMALL;\r
+    Status = EFI_BUFFER_TOO_SMALL;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -268,7 +278,8 @@ Tpm2Clear (
   //\r
   if (SwapBytes32(Res.Header.responseCode) != TPM_RC_SUCCESS) {\r
     DEBUG ((EFI_D_ERROR, "Clear: Response Code error! 0x%08x\r\n", SwapBytes32(Res.Header.responseCode)));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -276,8 +287,13 @@ Tpm2Clear (
   //\r
 \r
   // None\r
-\r
-  return EFI_SUCCESS;\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&Cmd, sizeof(Cmd));\r
+  ZeroMem (&Res, sizeof(Res));\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -332,12 +348,13 @@ Tpm2ClearControl (
   ResultBufSize = sizeof(Res);\r
   Status = Tpm2SubmitCommand (CmdSize, (UINT8 *)&Cmd, &ResultBufSize, (UINT8 *)&Res);\r
   if (EFI_ERROR(Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   if (ResultBufSize > sizeof(Res)) {\r
     DEBUG ((EFI_D_ERROR, "ClearControl: Failed ExecuteCommand: Buffer Too Small\r\n"));\r
-    return EFI_BUFFER_TOO_SMALL;\r
+    Status = EFI_BUFFER_TOO_SMALL;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -346,7 +363,8 @@ Tpm2ClearControl (
   RespSize = SwapBytes32(Res.Header.paramSize);\r
   if (RespSize > sizeof(Res)) {\r
     DEBUG ((EFI_D_ERROR, "ClearControl: Response size too large! %d\r\n", RespSize));\r
-    return EFI_BUFFER_TOO_SMALL;\r
+    Status = EFI_BUFFER_TOO_SMALL;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -354,7 +372,8 @@ Tpm2ClearControl (
   //\r
   if (SwapBytes32(Res.Header.responseCode) != TPM_RC_SUCCESS) {\r
     DEBUG ((EFI_D_ERROR, "ClearControl: Response Code error! 0x%08x\r\n", SwapBytes32(Res.Header.responseCode)));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -362,8 +381,13 @@ Tpm2ClearControl (
   //\r
 \r
   // None\r
-\r
-  return EFI_SUCCESS;\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&Cmd, sizeof(Cmd));\r
+  ZeroMem (&Res, sizeof(Res));\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -436,10 +460,14 @@ Tpm2HierarchyChangeAuth (
              &ResultBufSize,\r
              ResultBuf\r
              );\r
+  if (EFI_ERROR(Status)) {\r
+    goto Done;\r
+  }\r
 \r
   if (ResultBufSize > sizeof(Res)) {\r
     DEBUG ((EFI_D_ERROR, "HierarchyChangeAuth: Failed ExecuteCommand: Buffer Too Small\r\n"));\r
-    return EFI_BUFFER_TOO_SMALL;\r
+    Status = EFI_BUFFER_TOO_SMALL;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -448,7 +476,8 @@ Tpm2HierarchyChangeAuth (
   RespSize = SwapBytes32(Res.Header.paramSize);\r
   if (RespSize > sizeof(Res)) {\r
     DEBUG ((EFI_D_ERROR, "HierarchyChangeAuth: Response size too large! %d\r\n", RespSize));\r
-    return EFI_BUFFER_TOO_SMALL;\r
+    Status = EFI_BUFFER_TOO_SMALL;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -456,10 +485,17 @@ Tpm2HierarchyChangeAuth (
   //\r
   if (SwapBytes32(Res.Header.responseCode) != TPM_RC_SUCCESS) {\r
     DEBUG((EFI_D_ERROR,"HierarchyChangeAuth: Response Code error! 0x%08x\r\n", SwapBytes32(Res.Header.responseCode)));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
-  return EFI_SUCCESS;\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&Cmd, sizeof(Cmd));\r
+  ZeroMem (&Res, sizeof(Res));\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -522,10 +558,14 @@ Tpm2ChangeEPS (
              &ResultBufSize,\r
              ResultBuf\r
              );\r
+  if (EFI_ERROR(Status)) {\r
+    goto Done;\r
+  }\r
 \r
   if (ResultBufSize > sizeof(Res)) {\r
     DEBUG ((EFI_D_ERROR, "ChangeEPS: Failed ExecuteCommand: Buffer Too Small\r\n"));\r
-    return EFI_BUFFER_TOO_SMALL;\r
+    Status = EFI_BUFFER_TOO_SMALL;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -534,7 +574,8 @@ Tpm2ChangeEPS (
   RespSize = SwapBytes32(Res.Header.paramSize);\r
   if (RespSize > sizeof(Res)) {\r
     DEBUG ((EFI_D_ERROR, "ChangeEPS: Response size too large! %d\r\n", RespSize));\r
-    return EFI_BUFFER_TOO_SMALL;\r
+    Status = EFI_BUFFER_TOO_SMALL;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -542,10 +583,17 @@ Tpm2ChangeEPS (
   //\r
   if (SwapBytes32(Res.Header.responseCode) != TPM_RC_SUCCESS) {\r
     DEBUG((EFI_D_ERROR,"ChangeEPS: Response Code error! 0x%08x\r\n", SwapBytes32(Res.Header.responseCode)));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
-  return EFI_SUCCESS;\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&Cmd, sizeof(Cmd));\r
+  ZeroMem (&Res, sizeof(Res));\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -608,10 +656,14 @@ Tpm2ChangePPS (
              &ResultBufSize,\r
              ResultBuf\r
              );\r
+  if (EFI_ERROR(Status)) {\r
+    goto Done;\r
+  }\r
 \r
   if (ResultBufSize > sizeof(Res)) {\r
     DEBUG ((EFI_D_ERROR, "ChangePPS: Failed ExecuteCommand: Buffer Too Small\r\n"));\r
-    return EFI_BUFFER_TOO_SMALL;\r
+    Status = EFI_BUFFER_TOO_SMALL;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -620,7 +672,8 @@ Tpm2ChangePPS (
   RespSize = SwapBytes32(Res.Header.paramSize);\r
   if (RespSize > sizeof(Res)) {\r
     DEBUG ((EFI_D_ERROR, "ChangePPS: Response size too large! %d\r\n", RespSize));\r
-    return EFI_BUFFER_TOO_SMALL;\r
+    Status = EFI_BUFFER_TOO_SMALL;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -628,10 +681,17 @@ Tpm2ChangePPS (
   //\r
   if (SwapBytes32(Res.Header.responseCode) != TPM_RC_SUCCESS) {\r
     DEBUG((EFI_D_ERROR,"ChangePPS: Response Code error! 0x%08x\r\n", SwapBytes32(Res.Header.responseCode)));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
-  return EFI_SUCCESS;\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&Cmd, sizeof(Cmd));\r
+  ZeroMem (&Res, sizeof(Res));\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -704,10 +764,14 @@ Tpm2HierarchyControl (
              &ResultBufSize,\r
              ResultBuf\r
              );\r
+  if (EFI_ERROR(Status)) {\r
+    goto Done;\r
+  }\r
 \r
   if (ResultBufSize > sizeof(Res)) {\r
     DEBUG ((EFI_D_ERROR, "HierarchyControl: Failed ExecuteCommand: Buffer Too Small\r\n"));\r
-    return EFI_BUFFER_TOO_SMALL;\r
+    Status = EFI_BUFFER_TOO_SMALL;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -716,7 +780,8 @@ Tpm2HierarchyControl (
   RespSize = SwapBytes32(Res.Header.paramSize);\r
   if (RespSize > sizeof(Res)) {\r
     DEBUG ((EFI_D_ERROR, "HierarchyControl: Response size too large! %d\r\n", RespSize));\r
-    return EFI_BUFFER_TOO_SMALL;\r
+    Status = EFI_BUFFER_TOO_SMALL;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -724,8 +789,15 @@ Tpm2HierarchyControl (
   //\r
   if (SwapBytes32(Res.Header.responseCode) != TPM_RC_SUCCESS) {\r
     DEBUG((EFI_D_ERROR,"HierarchyControl: Response Code error! 0x%08x\r\n", SwapBytes32(Res.Header.responseCode)));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
-  return EFI_SUCCESS;\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&Cmd, sizeof(Cmd));\r
+  ZeroMem (&Res, sizeof(Res));\r
+  return Status;\r
 }\r
index cfb27ecd6b7494a5aef83ba8e217477951e1046d..fa4318dd5fba707466933ee8a60b7c89c31e5aad 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Implement TPM2 Integrity related command.\r
 \r
-Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved. <BR>\r
+Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved. <BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -490,10 +490,14 @@ Tpm2PcrAllocate (
              &ResultBufSize,\r
              ResultBuf\r
              );\r
+  if (EFI_ERROR(Status)) {\r
+    goto Done;\r
+  }\r
 \r
   if (ResultBufSize > sizeof(Res)) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2PcrAllocate: Failed ExecuteCommand: Buffer Too Small\r\n"));\r
-    return EFI_BUFFER_TOO_SMALL;\r
+    Status = EFI_BUFFER_TOO_SMALL;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -502,7 +506,8 @@ Tpm2PcrAllocate (
   RespSize = SwapBytes32(Res.Header.paramSize);\r
   if (RespSize > sizeof(Res)) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2PcrAllocate: Response size too large! %d\r\n", RespSize));\r
-    return EFI_BUFFER_TOO_SMALL;\r
+    Status = EFI_BUFFER_TOO_SMALL;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -510,7 +515,8 @@ Tpm2PcrAllocate (
   //\r
   if (SwapBytes32(Res.Header.responseCode) != TPM_RC_SUCCESS) {\r
     DEBUG((EFI_D_ERROR,"Tpm2PcrAllocate: Response Code error! 0x%08x\r\n", SwapBytes32(Res.Header.responseCode)));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -521,5 +527,11 @@ Tpm2PcrAllocate (
   *SizeNeeded = SwapBytes32(Res.SizeNeeded);\r
   *SizeAvailable = SwapBytes32(Res.SizeAvailable);\r
 \r
-  return EFI_SUCCESS;\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&Cmd, sizeof(Cmd));\r
+  ZeroMem (&Res, sizeof(Res));\r
+  return Status;\r
 }\r
index 914ad7f70befa68d7fcced16cb1d2313a23cfbdb..5bd870fb9eb4daf49beacbb92b41893bf1dc8ac3 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Implement TPM2 Miscellanenous related command.\r
 \r
-Copyright (c) 2013, Intel Corporation. All rights reserved. <BR>\r
+Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved. <BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -98,17 +98,25 @@ Tpm2SetAlgorithmSet (
   RecvBufferSize = sizeof (RecvBuffer);\r
   Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, &RecvBufferSize, (UINT8 *)&RecvBuffer);\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2SetAlgorithmSet - RecvBufferSize Error - %x\n", RecvBufferSize));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
   if (SwapBytes32(RecvBuffer.Header.responseCode) != TPM_RC_SUCCESS) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2SetAlgorithmSet - responseCode - %x\n", SwapBytes32(RecvBuffer.Header.responseCode)));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
-  return EFI_SUCCESS;\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&SendBuffer, sizeof(SendBuffer));\r
+  ZeroMem (&RecvBuffer, sizeof(RecvBuffer));\r
+  return Status;\r
 }\r
index c4714d3e193348d7e7562a525bfb554b422e9f0b..5fe48e180463ae26a46ad3a46f7bfe384ab68025 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Implement TPM2 NVStorage related command.\r
 \r
-Copyright (c) 2013, Intel Corporation. All rights reserved. <BR>\r
+Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved. <BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -347,12 +347,13 @@ Tpm2NvDefineSpace (
   RecvBufferSize = sizeof (RecvBuffer);\r
   Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, &RecvBufferSize, (UINT8 *)&RecvBuffer);\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2NvDefineSpace - RecvBufferSize Error - %x\n", RecvBufferSize));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
   ResponseCode = SwapBytes32(RecvBuffer.Header.responseCode);\r
@@ -365,24 +366,37 @@ Tpm2NvDefineSpace (
     break;\r
   case TPM_RC_SIZE + RC_NV_DefineSpace_publicInfo:\r
   case TPM_RC_SIZE + RC_NV_DefineSpace_auth:\r
-    return EFI_BAD_BUFFER_SIZE;\r
+    Status = EFI_BAD_BUFFER_SIZE;\r
+    break;\r
   case TPM_RC_ATTRIBUTES:\r
   case TPM_RC_ATTRIBUTES + RC_NV_DefineSpace_publicInfo:\r
-    return EFI_UNSUPPORTED;\r
+    Status = EFI_UNSUPPORTED;\r
+    break;\r
   case TPM_RC_ATTRIBUTES + RC_NV_DefineSpace_authHandle:\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    break;\r
   case TPM_RC_NV_DEFINED:\r
-    return EFI_ALREADY_STARTED;\r
+    Status = EFI_ALREADY_STARTED;\r
+    break;\r
   case TPM_RC_VALUE + RC_NV_DefineSpace_publicInfo:\r
   case TPM_RC_VALUE + RC_NV_DefineSpace_authHandle:\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    break;\r
   case TPM_RC_NV_SPACE:\r
-    return EFI_OUT_OF_RESOURCES;\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    break;\r
   default:\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    break;\r
   }\r
-  \r
-  return EFI_SUCCESS;\r
+\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&SendBuffer, sizeof(SendBuffer));\r
+  ZeroMem (&RecvBuffer, sizeof(RecvBuffer));\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -441,12 +455,13 @@ Tpm2NvUndefineSpace (
   RecvBufferSize = sizeof (RecvBuffer);\r
   Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, &RecvBufferSize, (UINT8 *)&RecvBuffer);\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2NvUndefineSpace - RecvBufferSize Error - %x\n", RecvBufferSize));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
   ResponseCode = SwapBytes32(RecvBuffer.Header.responseCode);\r
@@ -459,21 +474,33 @@ Tpm2NvUndefineSpace (
     break;\r
   case TPM_RC_ATTRIBUTES:\r
   case TPM_RC_ATTRIBUTES + RC_NV_UndefineSpace_nvIndex:\r
-    return EFI_UNSUPPORTED;\r
+    Status = EFI_UNSUPPORTED;\r
+    break;\r
   case TPM_RC_NV_AUTHORIZATION:\r
-    return EFI_SECURITY_VIOLATION;\r
+    Status = EFI_SECURITY_VIOLATION;\r
+    break;\r
   case TPM_RC_HANDLE + RC_NV_UndefineSpace_nvIndex: // TPM_RC_NV_DEFINED:\r
-    return EFI_NOT_FOUND;\r
+    Status = EFI_NOT_FOUND;\r
+    break;\r
   case TPM_RC_HANDLE + RC_NV_UndefineSpace_authHandle: // TPM_RC_NV_DEFINED:\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    break;\r
   case TPM_RC_VALUE + RC_NV_UndefineSpace_authHandle:\r
   case TPM_RC_VALUE + RC_NV_UndefineSpace_nvIndex:\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    break;\r
   default:\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    break;\r
   }\r
 \r
-  return EFI_SUCCESS;\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&SendBuffer, sizeof(SendBuffer));\r
+  ZeroMem (&RecvBuffer, sizeof(RecvBuffer));\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -543,12 +570,13 @@ Tpm2NvRead (
   RecvBufferSize = sizeof (RecvBuffer);\r
   Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, &RecvBufferSize, (UINT8 *)&RecvBuffer);\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2NvRead - RecvBufferSize Error - %x\n", RecvBufferSize));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
   ResponseCode = SwapBytes32(RecvBuffer.Header.responseCode);\r
   if (ResponseCode != TPM_RC_SUCCESS) {\r
@@ -559,30 +587,45 @@ Tpm2NvRead (
     // return data\r
     break;\r
   case TPM_RC_NV_AUTHORIZATION:\r
-    return EFI_SECURITY_VIOLATION;\r
+    Status = EFI_SECURITY_VIOLATION;\r
+    break;\r
   case TPM_RC_NV_LOCKED:\r
-    return EFI_ACCESS_DENIED;\r
+    Status = EFI_ACCESS_DENIED;\r
+    break;\r
   case TPM_RC_NV_RANGE:\r
-    return EFI_BAD_BUFFER_SIZE;\r
+    Status = EFI_BAD_BUFFER_SIZE;\r
+    break;\r
   case TPM_RC_NV_UNINITIALIZED:\r
-    return EFI_NOT_READY;\r
+    Status = EFI_NOT_READY;\r
+    break;\r
   case TPM_RC_HANDLE + RC_NV_Read_nvIndex: // TPM_RC_NV_DEFINED:\r
-    return EFI_NOT_FOUND;\r
+    Status = EFI_NOT_FOUND;\r
+    break;\r
   case TPM_RC_HANDLE + RC_NV_Read_authHandle: // TPM_RC_NV_DEFINED:\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    break;\r
   case TPM_RC_VALUE + RC_NV_Read_nvIndex:\r
   case TPM_RC_VALUE + RC_NV_Read_authHandle:\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    break;\r
   case TPM_RC_BAD_AUTH + RC_NV_Read_authHandle + TPM_RC_S:\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    break;\r
   case TPM_RC_AUTH_UNAVAILABLE:\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    break;\r
   case TPM_RC_AUTH_FAIL + RC_NV_Read_authHandle + TPM_RC_S:\r
-    return EFI_INVALID_PARAMETER;\r
-  default:\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    break;\r
   case TPM_RC_ATTRIBUTES + RC_NV_Read_authHandle + TPM_RC_S:\r
-    return EFI_UNSUPPORTED;\r
+    Status = EFI_UNSUPPORTED;\r
+    break;\r
+  default:\r
+    Status = EFI_DEVICE_ERROR;\r
+    break;\r
+  }\r
+  if (Status != EFI_SUCCESS) {\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -591,7 +634,13 @@ Tpm2NvRead (
   OutData->size = SwapBytes16 (RecvBuffer.Data.size);\r
   CopyMem (OutData->buffer, &RecvBuffer.Data.buffer, OutData->size);\r
   \r
-  return EFI_SUCCESS;\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&SendBuffer, sizeof(SendBuffer));\r
+  ZeroMem (&RecvBuffer, sizeof(RecvBuffer));\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -661,12 +710,13 @@ Tpm2NvWrite (
   RecvBufferSize = sizeof (RecvBuffer);\r
   Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, &RecvBufferSize, (UINT8 *)&RecvBuffer);\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2NvWrite - RecvBufferSize Error - %x\n", RecvBufferSize));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
   ResponseCode = SwapBytes32(RecvBuffer.Header.responseCode);\r
   if (ResponseCode != TPM_RC_SUCCESS) {\r
@@ -674,33 +724,54 @@ Tpm2NvWrite (
   }\r
   switch (ResponseCode) {\r
   case TPM_RC_SUCCESS:\r
-    return EFI_SUCCESS;\r
+    // return data\r
+    break;\r
   case TPM_RC_ATTRIBUTES:\r
-    return EFI_UNSUPPORTED;\r
+    Status = EFI_UNSUPPORTED;\r
+    break;\r
   case TPM_RC_NV_AUTHORIZATION:\r
-    return EFI_SECURITY_VIOLATION;\r
+    Status = EFI_SECURITY_VIOLATION;\r
+    break;\r
   case TPM_RC_NV_LOCKED:\r
-    return EFI_ACCESS_DENIED;\r
+    Status = EFI_ACCESS_DENIED;\r
+    break;\r
   case TPM_RC_NV_RANGE:\r
-    return EFI_BAD_BUFFER_SIZE;\r
+    Status = EFI_BAD_BUFFER_SIZE;\r
+    break;\r
   case TPM_RC_HANDLE + RC_NV_Write_nvIndex: // TPM_RC_NV_DEFINED:\r
-    return EFI_NOT_FOUND;\r
+    Status = EFI_NOT_FOUND;\r
+    break;\r
   case TPM_RC_HANDLE + RC_NV_Write_authHandle: // TPM_RC_NV_DEFINED:\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    break;\r
   case TPM_RC_VALUE + RC_NV_Write_nvIndex:\r
   case TPM_RC_VALUE + RC_NV_Write_authHandle:\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    break;\r
   case TPM_RC_BAD_AUTH + RC_NV_Write_authHandle + TPM_RC_S:\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    break;\r
   case TPM_RC_AUTH_UNAVAILABLE:\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    break;\r
   case TPM_RC_AUTH_FAIL + RC_NV_Write_authHandle + TPM_RC_S:\r
-    return EFI_INVALID_PARAMETER;\r
-  default:\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    break;\r
   case TPM_RC_ATTRIBUTES + RC_NV_Write_authHandle + TPM_RC_S:\r
-    return EFI_UNSUPPORTED;\r
+    Status = EFI_UNSUPPORTED;\r
+    break;\r
+  default:\r
+    Status = EFI_DEVICE_ERROR;\r
+    break;\r
   }\r
+\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&SendBuffer, sizeof(SendBuffer));\r
+  ZeroMem (&RecvBuffer, sizeof(RecvBuffer));\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -759,12 +830,13 @@ Tpm2NvReadLock (
   RecvBufferSize = sizeof (RecvBuffer);\r
   Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, &RecvBufferSize, (UINT8 *)&RecvBuffer);\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2NvReadLock - RecvBufferSize Error - %x\n", RecvBufferSize));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
   ResponseCode = SwapBytes32(RecvBuffer.Header.responseCode);\r
@@ -776,10 +848,17 @@ Tpm2NvReadLock (
     // return data\r
     break;\r
   default:\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    break;\r
   }\r
 \r
-  return EFI_SUCCESS;\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&SendBuffer, sizeof(SendBuffer));\r
+  ZeroMem (&RecvBuffer, sizeof(RecvBuffer));\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -838,12 +917,13 @@ Tpm2NvWriteLock (
   RecvBufferSize = sizeof (RecvBuffer);\r
   Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, &RecvBufferSize, (UINT8 *)&RecvBuffer);\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2NvWriteLock - RecvBufferSize Error - %x\n", RecvBufferSize));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
   ResponseCode = SwapBytes32(RecvBuffer.Header.responseCode);\r
@@ -855,10 +935,17 @@ Tpm2NvWriteLock (
     // return data\r
     break;\r
   default:\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    break;\r
   }\r
 \r
-  return EFI_SUCCESS;\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&SendBuffer, sizeof(SendBuffer));\r
+  ZeroMem (&RecvBuffer, sizeof(RecvBuffer));\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -914,12 +1001,13 @@ Tpm2NvGlobalWriteLock (
   RecvBufferSize = sizeof (RecvBuffer);\r
   Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, &RecvBufferSize, (UINT8 *)&RecvBuffer);\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) {\r
     DEBUG ((EFI_D_ERROR, "Tpm2NvGlobalWriteLock - RecvBufferSize Error - %x\n", RecvBufferSize));\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
 \r
   ResponseCode = SwapBytes32(RecvBuffer.Header.responseCode);\r
@@ -931,8 +1019,15 @@ Tpm2NvGlobalWriteLock (
     // return data\r
     break;\r
   default:\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    break;\r
   }\r
 \r
-  return EFI_SUCCESS;\r
+Done:\r
+  //\r
+  // Clear AuthSession Content\r
+  //\r
+  ZeroMem (&SendBuffer, sizeof(SendBuffer));\r
+  ZeroMem (&RecvBuffer, sizeof(RecvBuffer));\r
+  return Status;\r
 }\r