]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmmDxe.c
1. Fix TOCTOU issue in VariableSmm, FtwSmm, FpdtSmm, SmmCorePerformance SMM handler...
[mirror_edk2.git] / MdeModulePkg / Universal / FaultTolerantWriteDxe / FaultTolerantWriteSmmDxe.c
index 24b157df088c3c5f493f5a01830c313faec90460..772d10dcd46cb18e6965c1743bf39156a62f72ca 100644 (file)
@@ -3,7 +3,7 @@
   Implement the Fault Tolerant Write (FTW) protocol based on SMM FTW \r
   module.\r
 \r
-Copyright (c) 2011, Intel Corporation. All rights reserved. <BR>\r
+Copyright (c) 2011 - 2013, 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
@@ -463,13 +463,17 @@ FtwGetLastWrite (
   // Get data from SMM\r
   //\r
   *PrivateDataSize = SmmFtwGetLastWriteHeader->PrivateDataSize;\r
-  if (!EFI_ERROR (Status)) {\r
+  if (Status == EFI_SUCCESS || Status == EFI_BUFFER_TOO_SMALL) {\r
     *Lba      = SmmFtwGetLastWriteHeader->Lba;\r
     *Offset   = SmmFtwGetLastWriteHeader->Offset; \r
     *Length   = SmmFtwGetLastWriteHeader->Length;\r
     *Complete = SmmFtwGetLastWriteHeader->Complete;\r
     CopyGuid (CallerId, &SmmFtwGetLastWriteHeader->CallerId);\r
-    CopyMem (PrivateData, SmmFtwGetLastWriteHeader->Data, *PrivateDataSize);\r
+    if (Status == EFI_SUCCESS) {\r
+      CopyMem (PrivateData, SmmFtwGetLastWriteHeader->Data, *PrivateDataSize);\r
+    }\r
+  } else if (Status == EFI_NOT_FOUND) {\r
+    *Complete = SmmFtwGetLastWriteHeader->Complete;\r
   }\r
 \r
   FreePool (SmmCommunicateHeader);  \r