]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/VarCheckLib/VarCheckLib.c
MdeModulePkg/ResetUtilityLib: Fix GCC build failure
[mirror_edk2.git] / MdeModulePkg / Library / VarCheckLib / VarCheckLib.c
index 3d1f8f6f4698aa6d9e5e8c19d08b0899e92546d4..5ca0d3edca44de30a677f5316db86e0e0f410961 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Implementation functions and structures for var check services.\r
 \r
-Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2015 - 2016, 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
@@ -79,6 +79,13 @@ VARIABLE_ENTRY_PROPERTY mVarCheckVariableWithWildcardName[] = {
       0\r
     },\r
   },\r
+  {\r
+    &gEfiGlobalVariableGuid,\r
+    L"PlatformRecovery####",\r
+    {\r
+      0\r
+    },\r
+  },\r
   {\r
     &gEfiHardwareErrorVariableGuid,\r
     L"HwErrRec####",\r
@@ -89,17 +96,17 @@ VARIABLE_ENTRY_PROPERTY mVarCheckVariableWithWildcardName[] = {
 };\r
 \r
 /**\r
-  Check if a Unicode character is a hexadecimal character.\r
+  Check if a Unicode character is an upper case hexadecimal character.\r
 \r
-  This function checks if a Unicode character is a\r
-  hexadecimal character.  The valid hexadecimal character is\r
-  L'0' to L'9', L'a' to L'f', or L'A' to L'F'.\r
+  This function checks if a Unicode character is an upper case\r
+  hexadecimal character.  The valid upper case hexadecimal character is\r
+  L'0' to L'9', or L'A' to L'F'.\r
 \r
 \r
   @param[in] Char       The character to check against.\r
 \r
-  @retval TRUE          If the Char is a hexadecmial character.\r
-  @retval FALSE         If the Char is not a hexadecmial character.\r
+  @retval TRUE          If the Char is an upper case hexadecmial character.\r
+  @retval FALSE         If the Char is not an upper case hexadecmial character.\r
 \r
 **/\r
 BOOLEAN\r
@@ -108,7 +115,7 @@ VarCheckInternalIsHexaDecimalDigitCharacter (
   IN CHAR16             Char\r
   )\r
 {\r
-  return (BOOLEAN) ((Char >= L'0' && Char <= L'9') || (Char >= L'A' && Char <= L'F') || (Char >= L'a' && Char <= L'f'));\r
+  return (BOOLEAN) ((Char >= L'0' && Char <= L'9') || (Char >= L'A' && Char <= L'F'));\r
 }\r
 \r
 /**\r
@@ -141,19 +148,11 @@ VariablePropertyGetWithWildcardName (
             VarCheckInternalIsHexaDecimalDigitCharacter (VariableName[NameLength + 1]) &&\r
             VarCheckInternalIsHexaDecimalDigitCharacter (VariableName[NameLength + 2]) &&\r
             VarCheckInternalIsHexaDecimalDigitCharacter (VariableName[NameLength + 3])) {\r
-          if (mVarCheckVariableWithWildcardName[Index].VariableProperty.Revision != VAR_CHECK_VARIABLE_PROPERTY_REVISION) {\r
-            return NULL;\r
-          } else {\r
-            return &mVarCheckVariableWithWildcardName[Index].VariableProperty;\r
-          }\r
+          return &mVarCheckVariableWithWildcardName[Index].VariableProperty;\r
         }\r
       }\r
       if (StrCmp (mVarCheckVariableWithWildcardName[Index].Name, VariableName) == 0) {\r
-        if (mVarCheckVariableWithWildcardName[Index].VariableProperty.Revision != VAR_CHECK_VARIABLE_PROPERTY_REVISION) {\r
-          return NULL;\r
-        } else {\r
-          return  &mVarCheckVariableWithWildcardName[Index].VariableProperty;\r
-        }\r
+        return  &mVarCheckVariableWithWildcardName[Index].VariableProperty;\r
       }\r
     }\r
   }\r
@@ -512,6 +511,9 @@ VarCheckLibVariablePropertySet (
 \r
   Status = EFI_SUCCESS;\r
 \r
+  //\r
+  // Get the pointer of property data for set.\r
+  //\r
   Property = VariablePropertyGetFunction (Name, Guid, FALSE);\r
   if (Property != NULL) {\r
     CopyMem (Property, VariableProperty, sizeof (*VariableProperty));\r
@@ -571,7 +573,12 @@ VarCheckLibVariablePropertyGet (
   }\r
 \r
   Property = VariablePropertyGetFunction (Name, Guid, TRUE);\r
-  if (Property != NULL) {\r
+  //\r
+  // Also check the property revision before using the property data.\r
+  // There is no property set to this variable(wildcard name)\r
+  // if the revision is not VAR_CHECK_VARIABLE_PROPERTY_REVISION.\r
+  //\r
+  if ((Property != NULL) && (Property->Revision == VAR_CHECK_VARIABLE_PROPERTY_REVISION)) {\r
     CopyMem (VariableProperty, Property, sizeof (*VariableProperty));\r
     return EFI_SUCCESS;\r
   }\r
@@ -619,7 +626,12 @@ VarCheckLibSetVariableCheck (
   }\r
 \r
   Property = VariablePropertyGetFunction (VariableName, VendorGuid, TRUE);\r
-  if (Property != NULL) {\r
+  //\r
+  // Also check the property revision before using the property data.\r
+  // There is no property set to this variable(wildcard name)\r
+  // if the revision is not VAR_CHECK_VARIABLE_PROPERTY_REVISION.\r
+  //\r
+  if ((Property != NULL) && (Property->Revision == VAR_CHECK_VARIABLE_PROPERTY_REVISION)) {\r
     if ((RequestSource != VarCheckFromTrusted) && ((Property->Property & VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY) != 0)) {\r
       DEBUG ((EFI_D_INFO, "Variable Check ReadOnly variable fail %r - %g:%s\n", EFI_WRITE_PROTECTED, VendorGuid, VariableName));\r
       return EFI_WRITE_PROTECTED;\r