]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SecurityPkg/VariableAuthenticated/RuntimeDxe/Variable.c
Calculate enough space for 2 variables (public key and variable data) instead of...
[mirror_edk2.git] / SecurityPkg / VariableAuthenticated / RuntimeDxe / Variable.c
index 8f4a0a8f1b0609334584eb48f03b143d793b3511..7d7bc9e0e121314aae642066500eb431ab6df2e1 100644 (file)
@@ -610,7 +610,7 @@ IsValidPubKeyIndex (
     return FALSE;\r
   }\r
   \r
-  Variable = GetStartPointer (mNvVariableCache);\r
+  Variable = GetStartPointer ((VARIABLE_STORE_HEADER *) (UINTN) mVariableModuleGlobal->VariableGlobal.NonVolatileVariableBase);\r
   \r
   while (IsValidVariableHeader (Variable)) {\r
     if ((Variable->State == VAR_ADDED || Variable->State == (VAR_IN_DELETED_TRANSITION & VAR_ADDED)) && \r
@@ -1518,8 +1518,10 @@ VariableGetBestLanguage (
   so follow the argument sequence to check the Variables.\r
 \r
   @param[in] Attributes         Variable attributes for Variable entries.\r
-  @param     ...                Variable argument list with type VARIABLE_ENTRY_CONSISTENCY *.\r
-                                A NULL terminates the list.\r
+  @param ...                    The variable argument list with type VARIABLE_ENTRY_CONSISTENCY *.\r
+                                A NULL terminates the list. The VariableSize of \r
+                                VARIABLE_ENTRY_CONSISTENCY is the variable data size as input.\r
+                                It will be changed to variable total size as output.\r
 \r
   @retval TRUE                  Have enough variable space to set the Variables successfully.\r
   @retval FALSE                 No enough variable space to set the Variables successfully.\r
@@ -1543,6 +1545,8 @@ CheckRemainingSpaceForConsistency (
   VARIABLE_STORE_HEADER         *VariableStoreHeader;\r
   VARIABLE_POINTER_TRACK        VariablePtrTrack;\r
   VARIABLE_HEADER               *NextVariable;\r
+  UINTN                         VarNameSize;\r
+  UINTN                         VarDataSize;\r
 \r
   //\r
   // Non-Volatile related.\r
@@ -1561,6 +1565,15 @@ CheckRemainingSpaceForConsistency (
   VA_START (Args, Attributes);\r
   VariableEntry = VA_ARG (Args, VARIABLE_ENTRY_CONSISTENCY *);\r
   while (VariableEntry != NULL) {\r
+    //\r
+    // Calculate variable total size.\r
+    //\r
+    VarNameSize  = StrSize (VariableEntry->Name);\r
+    VarNameSize += GET_PAD_SIZE (VarNameSize);\r
+    VarDataSize  = VariableEntry->VariableSize;\r
+    VarDataSize += GET_PAD_SIZE (VarDataSize);\r
+    VariableEntry->VariableSize = HEADER_ALIGN (sizeof (VARIABLE_HEADER) + VarNameSize + VarDataSize);\r
+\r
     TotalNeededSize += VariableEntry->VariableSize;\r
     VariableEntry = VA_ARG (Args, VARIABLE_ENTRY_CONSISTENCY *);\r
   }\r
@@ -1657,8 +1670,6 @@ AutoUpdateLangVariable (
   UINT32                 Attributes;\r
   VARIABLE_POINTER_TRACK Variable;\r
   BOOLEAN                SetLanguageCodes;\r
-  UINTN                  VarNameSize;\r
-  UINTN                  VarDataSize;\r
   VARIABLE_ENTRY_CONSISTENCY VariableEntry[2];\r
 \r
   //\r
@@ -1782,21 +1793,13 @@ AutoUpdateLangVariable (
         BestLang = GetLangFromSupportedLangCodes (mVariableModuleGlobal->LangCodes, Index, TRUE);\r
 \r
         //\r
-        // Calculate the needed variable size for Lang variable.\r
+        // Check the variable space for both Lang and PlatformLang variable.\r
         //\r
-        VarNameSize = StrSize (EFI_LANG_VARIABLE_NAME);\r
-        VarDataSize = ISO_639_2_ENTRY_SIZE + 1;\r
-        VariableEntry[0].VariableSize = sizeof (VARIABLE_HEADER) + VarNameSize + GET_PAD_SIZE (VarNameSize) + VarDataSize + GET_PAD_SIZE (VarDataSize);\r
-        VariableEntry[0].VariableSize = HEADER_ALIGN (VariableEntry[0].VariableSize);\r
+        VariableEntry[0].VariableSize = ISO_639_2_ENTRY_SIZE + 1;\r
         VariableEntry[0].Guid = &gEfiGlobalVariableGuid;\r
         VariableEntry[0].Name = EFI_LANG_VARIABLE_NAME;\r
-        //\r
-        // Calculate the needed variable size for PlatformLang variable.\r
-        //\r
-        VarNameSize = StrSize (EFI_PLATFORM_LANG_VARIABLE_NAME);\r
-        VarDataSize = AsciiStrSize (BestPlatformLang);\r
-        VariableEntry[1].VariableSize = sizeof (VARIABLE_HEADER) + VarNameSize + GET_PAD_SIZE (VarNameSize) + VarDataSize + GET_PAD_SIZE (VarDataSize);\r
-        VariableEntry[1].VariableSize = HEADER_ALIGN (VariableEntry[1].VariableSize);\r
+        \r
+        VariableEntry[1].VariableSize = AsciiStrSize (BestPlatformLang);\r
         VariableEntry[1].Guid = &gEfiGlobalVariableGuid;\r
         VariableEntry[1].Name = EFI_PLATFORM_LANG_VARIABLE_NAME;\r
         if (!CheckRemainingSpaceForConsistency (VARIABLE_ATTRIBUTE_NV_BS_RT, &VariableEntry[0], &VariableEntry[1], NULL)) {\r
@@ -1839,21 +1842,13 @@ AutoUpdateLangVariable (
         BestPlatformLang = GetLangFromSupportedLangCodes (mVariableModuleGlobal->PlatformLangCodes, Index, FALSE);\r
 \r
         //\r
-        // Calculate the needed variable size for PlatformLang variable.\r
+        // Check the variable space for both PlatformLang and Lang variable.\r
         //\r
-        VarNameSize = StrSize (EFI_PLATFORM_LANG_VARIABLE_NAME);\r
-        VarDataSize = AsciiStrSize (BestPlatformLang);\r
-        VariableEntry[0].VariableSize = sizeof (VARIABLE_HEADER) + VarNameSize + GET_PAD_SIZE (VarNameSize) + VarDataSize + GET_PAD_SIZE (VarDataSize);\r
-        VariableEntry[0].VariableSize = HEADER_ALIGN (VariableEntry[0].VariableSize);\r
+        VariableEntry[0].VariableSize = AsciiStrSize (BestPlatformLang);\r
         VariableEntry[0].Guid = &gEfiGlobalVariableGuid;\r
         VariableEntry[0].Name = EFI_PLATFORM_LANG_VARIABLE_NAME;\r
-        //\r
-        // Calculate the needed variable size for Lang variable.\r
-        //\r
-        VarNameSize = StrSize (EFI_LANG_VARIABLE_NAME);\r
-        VarDataSize = ISO_639_2_ENTRY_SIZE + 1;\r
-        VariableEntry[1].VariableSize = sizeof (VARIABLE_HEADER) + VarNameSize + GET_PAD_SIZE (VarNameSize) + VarDataSize + GET_PAD_SIZE (VarDataSize);\r
-        VariableEntry[1].VariableSize = HEADER_ALIGN (VariableEntry[1].VariableSize);\r
+\r
+        VariableEntry[1].VariableSize = ISO_639_2_ENTRY_SIZE + 1;\r
         VariableEntry[1].Guid = &gEfiGlobalVariableGuid;\r
         VariableEntry[1].Name = EFI_LANG_VARIABLE_NAME;\r
         if (!CheckRemainingSpaceForConsistency (VARIABLE_ATTRIBUTE_NV_BS_RT, &VariableEntry[0], &VariableEntry[1], NULL)) {\r