]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c
MdeModulePkg/Variable: add debug logs in VariableServiceSetVariable
[mirror_edk2.git] / MdeModulePkg / Universal / Variable / RuntimeDxe / Variable.c
index 1ea2f84dda68ee700d2d9317cc3c98d2630a7272..d100b1dcc552b196409b400926cab54f553e36d2 100644 (file)
@@ -681,7 +681,7 @@ GetStartPointer (
   )\r
 {\r
   //\r
-  // The end of variable store.\r
+  // The start of variable store.\r
   //\r
   return (VARIABLE_HEADER *) HEADER_ALIGN (VarStoreHeader + 1);\r
 }\r
@@ -2462,6 +2462,8 @@ UpdateVariable (
         if (Variable->CurrPtr != NULL) {\r
           if (VariableCompareTimeStampInternal (&(((AUTHENTICATED_VARIABLE_HEADER *) CacheVariable->CurrPtr)->TimeStamp), TimeStamp)) {\r
             CopyMem (&AuthVariable->TimeStamp, TimeStamp, sizeof (EFI_TIME));\r
+          } else {\r
+            CopyMem (&AuthVariable->TimeStamp, &(((AUTHENTICATED_VARIABLE_HEADER *) CacheVariable->CurrPtr)->TimeStamp), sizeof (EFI_TIME));\r
           }\r
         }\r
       }\r
@@ -3198,6 +3200,12 @@ VariableServiceSetVariable (
       ((EFI_VARIABLE_AUTHENTICATION_2 *) Data)->AuthInfo.Hdr.dwLength < OFFSET_OF (WIN_CERTIFICATE_UEFI_GUID, CertData)) {\r
       return EFI_SECURITY_VIOLATION;\r
     }\r
+    //\r
+    // The MemoryLoadFence() call here is to ensure the above sanity check\r
+    // for the EFI_VARIABLE_AUTHENTICATION_2 descriptor has been completed\r
+    // before the execution of subsequent codes.\r
+    //\r
+    MemoryLoadFence ();\r
     PayloadSize = DataSize - AUTHINFO2_SIZE (Data);\r
   } else {\r
     PayloadSize = DataSize;\r
@@ -3226,14 +3234,44 @@ VariableServiceSetVariable (
     //\r
     if ((Attributes & VARIABLE_ATTRIBUTE_AT_AW) != 0) {\r
       if (StrSize (VariableName) + PayloadSize > mVariableModuleGlobal->MaxAuthVariableSize - GetVariableHeaderSize ()) {\r
+        DEBUG ((DEBUG_ERROR,\r
+          "%a: Failed to set variable '%s' with Guid %g\n",\r
+          __FUNCTION__, VariableName, VendorGuid));\r
+        DEBUG ((DEBUG_ERROR,\r
+          "NameSize(0x%x) + PayloadSize(0x%x) > "\r
+          "MaxAuthVariableSize(0x%x) - HeaderSize(0x%x)\n",\r
+          StrSize (VariableName), PayloadSize,\r
+          mVariableModuleGlobal->MaxAuthVariableSize,\r
+          GetVariableHeaderSize ()\r
+          ));\r
         return EFI_INVALID_PARAMETER;\r
       }\r
     } else if ((Attributes & EFI_VARIABLE_NON_VOLATILE) != 0) {\r
       if (StrSize (VariableName) + PayloadSize > mVariableModuleGlobal->MaxVariableSize - GetVariableHeaderSize ()) {\r
+        DEBUG ((DEBUG_ERROR,\r
+          "%a: Failed to set variable '%s' with Guid %g\n",\r
+          __FUNCTION__, VariableName, VendorGuid));\r
+        DEBUG ((DEBUG_ERROR,\r
+          "NameSize(0x%x) + PayloadSize(0x%x) > "\r
+          "MaxVariableSize(0x%x) - HeaderSize(0x%x)\n",\r
+          StrSize (VariableName), PayloadSize,\r
+          mVariableModuleGlobal->MaxVariableSize,\r
+          GetVariableHeaderSize ()\r
+          ));\r
         return EFI_INVALID_PARAMETER;\r
       }\r
     } else {\r
       if (StrSize (VariableName) + PayloadSize > mVariableModuleGlobal->MaxVolatileVariableSize - GetVariableHeaderSize ()) {\r
+        DEBUG ((DEBUG_ERROR,\r
+          "%a: Failed to set variable '%s' with Guid %g\n",\r
+          __FUNCTION__, VariableName, VendorGuid));\r
+        DEBUG ((DEBUG_ERROR,\r
+          "NameSize(0x%x) + PayloadSize(0x%x) > "\r
+          "MaxVolatileVariableSize(0x%x) - HeaderSize(0x%x)\n",\r
+          StrSize (VariableName), PayloadSize,\r
+          mVariableModuleGlobal->MaxVolatileVariableSize,\r
+          GetVariableHeaderSize ()\r
+          ));\r
         return EFI_INVALID_PARAMETER;\r
       }\r
     }\r