]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/Variable/RuntimeDxe/Variable.c
This check-in fixed the following bugs:
[mirror_edk2.git] / EdkModulePkg / Universal / Variable / RuntimeDxe / Variable.c
index 178fa1ea598114d84919f95a2e268e80daa9e9e9..5d631a53682b91515f3bffb59265e2957f4e4cab 100644 (file)
@@ -15,7 +15,7 @@ Module Name:
 \r
 Abstract:\r
 \r
-  Provide support functions for variable services.\r
+Revision History\r
 \r
 --*/\r
 \r
@@ -125,8 +125,7 @@ Arguments:
 \r
 Returns:\r
 \r
-  EFI_INVALID_PARAMETER   - Parameters not valid\r
-  EFI_SUCCESS             - Variable store successfully updated\r
+  EFI STATUS\r
 \r
 --*/\r
 {\r
@@ -177,10 +176,11 @@ Returns:
     if ((DataPtr + DataSize) >= ((UINTN) ((UINT8 *) VolatileBase + VolatileBase->Size))) {\r
       return EFI_INVALID_PARAMETER;\r
     }\r
-\r
-    //\r
-    // If Volatile Variable just do a simple mem copy.\r
-    //\r
+  }\r
+  //\r
+  // If Volatile Variable just do a simple mem copy.\r
+  //\r
+  if (Volatile) {\r
     CopyMem ((UINT8 *) ((UINTN) DataPtr), Buffer, DataSize);\r
     return EFI_SUCCESS;\r
   }\r
@@ -212,7 +212,9 @@ Returns:
                     &CurrWriteSize,\r
                     CurrBuffer\r
                     );\r
-          return Status;\r
+          if (EFI_ERROR (Status)) {\r
+            return Status;\r
+          }\r
         } else {\r
           Size = (UINT32) (LinearOffset + PtrBlockMapEntry->BlockLength - CurrWritePtr);\r
           Status = EfiFvbWriteBlock (\r
@@ -813,7 +815,8 @@ Returns:
   //  The size of the VariableName, including the Unicode Null in bytes plus\r
   //  the DataSize is limited to maximum size of MAX_VARIABLE_SIZE (1024) bytes.\r
   //\r
-  else if (sizeof (VARIABLE_HEADER) + ArrayLength (VariableName) + DataSize > MAX_VARIABLE_SIZE) {\r
+  else if ((DataSize > MAX_VARIABLE_SIZE) ||\r
+           (sizeof (VARIABLE_HEADER) + ArrayLength (VariableName) + DataSize > MAX_VARIABLE_SIZE)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
   //\r