]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c
Fix a bug with changing the NVRAM properties of a Variable
[mirror_edk2.git] / MdeModulePkg / Universal / Variable / RuntimeDxe / Variable.c
index 767fafce1f1c339f6c288c63387a9d1b24990001..11a36ba8264959f6f27033b4fabf3355f41758fb 100644 (file)
@@ -1033,6 +1033,7 @@ RuntimeServiceSetVariable (
   UINTN                   *VolatileOffset;\r
   UINTN                   *NonVolatileOffset;\r
   UINT32                  Instance;\r
+  BOOLEAN                 Volatile;\r
 \r
   Reclaimed         = FALSE;\r
   VolatileOffset    = &mVariableModuleGlobal->VolatileLastVariableOffset;\r
@@ -1076,11 +1077,11 @@ RuntimeServiceSetVariable (
   //\r
   \r
   Status = FindVariable (VariableName, VendorGuid, &Variable, &mVariableModuleGlobal->VariableGlobal);\r
-\r
   if (Status == EFI_SUCCESS && Variable.CurrPtr != NULL) {\r
     //\r
     // Update/Delete existing variable\r
     //\r
+    Volatile = Variable.Volatile;\r
     \r
     if (EfiAtRuntime ()) {        \r
       //\r
@@ -1118,7 +1119,7 @@ RuntimeServiceSetVariable (
                  &State\r
                  ); \r
       if (!EFI_ERROR (Status)) {\r
-        UpdateVariableInfo (VariableName, VendorGuid, Variable.Volatile, FALSE, FALSE, TRUE, FALSE);\r
+        UpdateVariableInfo (VariableName, VendorGuid, Volatile, FALSE, FALSE, TRUE, FALSE);\r
         UpdateVariableCache (VariableName, VendorGuid, Attributes, DataSize, Data);\r
       }\r
       goto Done;     \r
@@ -1130,7 +1131,7 @@ RuntimeServiceSetVariable (
     if (Variable.CurrPtr->DataSize == DataSize &&\r
         (CompareMem (Data, GetVariableDataPtr (Variable.CurrPtr), DataSize) == 0)) {\r
       \r
-      UpdateVariableInfo (VariableName, VendorGuid, Variable.Volatile, FALSE, TRUE, FALSE, FALSE);\r
+      UpdateVariableInfo (VariableName, VendorGuid, Volatile, FALSE, TRUE, FALSE, FALSE);\r
       Status = EFI_SUCCESS;\r
       goto Done;\r
     } else if ((Variable.CurrPtr->State == VAR_ADDED) ||\r
@@ -1232,7 +1233,7 @@ RuntimeServiceSetVariable (
     //\r
     // Create a nonvolatile variable\r
     //\r
-    Variable.Volatile = FALSE;\r
+    Volatile = FALSE;\r
     \r
     if ((UINT32) (VarSize +*NonVolatileOffset) >\r
           ((VARIABLE_STORE_HEADER *) ((UINTN) (mVariableModuleGlobal->VariableGlobal.NonVolatileVariableBase)))->Size\r
@@ -1322,7 +1323,7 @@ RuntimeServiceSetVariable (
     //\r
     // Create a volatile variable\r
     //      \r
-    Variable.Volatile = TRUE;\r
+    Volatile = TRUE;\r
 \r
     if ((UINT32) (VarSize +*VolatileOffset) >\r
         ((VARIABLE_STORE_HEADER *) ((UINTN) (mVariableModuleGlobal->VariableGlobal.VolatileVariableBase)))->Size) {\r
@@ -1381,14 +1382,14 @@ RuntimeServiceSetVariable (
                );\r
     \r
     if (!EFI_ERROR (Status)) {\r
-      UpdateVariableInfo (VariableName, VendorGuid, Variable.Volatile, FALSE, TRUE, FALSE, FALSE);\r
+      UpdateVariableInfo (VariableName, VendorGuid, Volatile, FALSE, TRUE, FALSE, FALSE);\r
       UpdateVariableCache (VariableName, VendorGuid, Attributes, DataSize, Data);\r
     }\r
     goto Done;      \r
   }\r
 \r
   Status = EFI_SUCCESS;\r
-  UpdateVariableInfo (VariableName, VendorGuid, Variable.Volatile, FALSE, TRUE, FALSE, FALSE);\r
+  UpdateVariableInfo (VariableName, VendorGuid, Volatile, FALSE, TRUE, FALSE, FALSE);\r
   UpdateVariableCache (VariableName, VendorGuid, Attributes, DataSize, Data);\r
 \r
 Done:\r