/** @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
0\r
},\r
},\r
+ {\r
+ &gEfiGlobalVariableGuid,\r
+ L"PlatformRecovery####",\r
+ {\r
+ 0\r
+ },\r
+ },\r
{\r
&gEfiHardwareErrorVariableGuid,\r
L"HwErrRec####",\r
};\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
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
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
\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
}\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
}\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