According to UEFI spec 2.3.1a. hardware error record variable should use the EFI_HARDWARE_ERROR_VARIABLE VendorGuid and have the L"HwErrRec####" name convention, #### is a printed hex value and no 0x or h is included in the hex value.
Signed-off-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Guo Dong <guo.dong@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13373 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -1760,6 +1760,63 @@ Done:
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Check if a Unicode character is a hexadecimal character.
|
||||
|
||||
This function checks if a Unicode character is a
|
||||
hexadecimal character. The valid hexadecimal character is
|
||||
L'0' to L'9', L'a' to L'f', or L'A' to L'F'.
|
||||
|
||||
|
||||
@param Char The character to check against.
|
||||
|
||||
@retval TRUE If the Char is a hexadecmial character.
|
||||
@retval FALSE If the Char is not a hexadecmial character.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
IsHexaDecimalDigitCharacter (
|
||||
IN CHAR16 Char
|
||||
)
|
||||
{
|
||||
return (BOOLEAN) ((Char >= L'0' && Char <= L'9') || (Char >= L'A' && Char <= L'F') || (Char >= L'a' && Char <= L'f'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
This code checks if variable is hardware error record variable or not.
|
||||
|
||||
According to UEFI spec, hardware error record variable should use the EFI_HARDWARE_ERROR_VARIABLE VendorGuid
|
||||
and have the L"HwErrRec####" name convention, #### is a printed hex value and no 0x or h is included in the hex value.
|
||||
|
||||
@param VariableName Pointer to variable name.
|
||||
@param VendorGuid Variable Vendor Guid.
|
||||
|
||||
@retval TRUE Variable is hardware error record variable.
|
||||
@retval FALSE Variable is not hardware error record variable.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
IsHwErrRecVariable (
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid
|
||||
)
|
||||
{
|
||||
if (!CompareGuid (VendorGuid, &gEfiHardwareErrorVariableGuid) ||
|
||||
(StrLen (VariableName) != StrLen (L"HwErrRec####")) ||
|
||||
(StrnCmp(VariableName, L"HwErrRec", StrLen (L"HwErrRec")) != 0) ||
|
||||
!IsHexaDecimalDigitCharacter (VariableName[0x8]) ||
|
||||
!IsHexaDecimalDigitCharacter (VariableName[0x9]) ||
|
||||
!IsHexaDecimalDigitCharacter (VariableName[0xA]) ||
|
||||
!IsHexaDecimalDigitCharacter (VariableName[0xB])) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
This code finds variable in storage blocks (Volatile or Non-Volatile).
|
||||
@ -2050,10 +2107,7 @@ VariableServiceSetVariable (
|
||||
(sizeof (VARIABLE_HEADER) + StrSize (VariableName) + DataSize > PcdGet32 (PcdMaxHardwareErrorVariableSize))) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
//
|
||||
// According to UEFI spec, HARDWARE_ERROR_RECORD variable name convention should be L"HwErrRecXXXX".
|
||||
//
|
||||
if (StrnCmp(VariableName, L"HwErrRec", StrLen(L"HwErrRec")) != 0) {
|
||||
if (!IsHwErrRecVariable(VariableName, VendorGuid)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user