From 7e37880a7fe0f485d00c5ffd046d6b81fd18e144 Mon Sep 17 00:00:00 2001 From: Star Zeng Date: Mon, 16 Nov 2015 07:18:36 +0000 Subject: MdeModulePkg VarCheckLib: R18611 was thoughtless for property set R18611 only updated the logic to return correct property when no property set to variable with wildcard name. But VariablePropertySet needs the pointer of property data for set. So roll back the change in VariablePropertyGetWithWildcardName at R18611, and check the property revision first in VariablePropertyGet and SetVariableCheck before using the property data. (Sync patch r18626 from main trunk.) Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Star Zeng Reviewed-by: Jiewen Yao git-svn-id: https://svn.code.sf.net/p/edk2/code/branches/UDK2015@18802 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Library/VarCheckLib/VarCheckLib.c | 29 +++++++++++++++----------- 1 file changed, 17 insertions(+), 12 deletions(-) (limited to 'MdeModulePkg/Library') diff --git a/MdeModulePkg/Library/VarCheckLib/VarCheckLib.c b/MdeModulePkg/Library/VarCheckLib/VarCheckLib.c index 3d1f8f6f46..60c141a6b9 100644 --- a/MdeModulePkg/Library/VarCheckLib/VarCheckLib.c +++ b/MdeModulePkg/Library/VarCheckLib/VarCheckLib.c @@ -141,19 +141,11 @@ VariablePropertyGetWithWildcardName ( VarCheckInternalIsHexaDecimalDigitCharacter (VariableName[NameLength + 1]) && VarCheckInternalIsHexaDecimalDigitCharacter (VariableName[NameLength + 2]) && VarCheckInternalIsHexaDecimalDigitCharacter (VariableName[NameLength + 3])) { - if (mVarCheckVariableWithWildcardName[Index].VariableProperty.Revision != VAR_CHECK_VARIABLE_PROPERTY_REVISION) { - return NULL; - } else { - return &mVarCheckVariableWithWildcardName[Index].VariableProperty; - } + return &mVarCheckVariableWithWildcardName[Index].VariableProperty; } } if (StrCmp (mVarCheckVariableWithWildcardName[Index].Name, VariableName) == 0) { - if (mVarCheckVariableWithWildcardName[Index].VariableProperty.Revision != VAR_CHECK_VARIABLE_PROPERTY_REVISION) { - return NULL; - } else { - return &mVarCheckVariableWithWildcardName[Index].VariableProperty; - } + return &mVarCheckVariableWithWildcardName[Index].VariableProperty; } } } @@ -512,6 +504,9 @@ VarCheckLibVariablePropertySet ( Status = EFI_SUCCESS; + // + // Get the pointer of property data for set. + // Property = VariablePropertyGetFunction (Name, Guid, FALSE); if (Property != NULL) { CopyMem (Property, VariableProperty, sizeof (*VariableProperty)); @@ -571,7 +566,12 @@ VarCheckLibVariablePropertyGet ( } Property = VariablePropertyGetFunction (Name, Guid, TRUE); - if (Property != NULL) { + // + // Also check the property revision before using the property data. + // There is no property set to this variable(wildcard name) + // if the revision is not VAR_CHECK_VARIABLE_PROPERTY_REVISION. + // + if ((Property != NULL) && (Property->Revision == VAR_CHECK_VARIABLE_PROPERTY_REVISION)) { CopyMem (VariableProperty, Property, sizeof (*VariableProperty)); return EFI_SUCCESS; } @@ -619,7 +619,12 @@ VarCheckLibSetVariableCheck ( } Property = VariablePropertyGetFunction (VariableName, VendorGuid, TRUE); - if (Property != NULL) { + // + // Also check the property revision before using the property data. + // There is no property set to this variable(wildcard name) + // if the revision is not VAR_CHECK_VARIABLE_PROPERTY_REVISION. + // + if ((Property != NULL) && (Property->Revision == VAR_CHECK_VARIABLE_PROPERTY_REVISION)) { if ((RequestSource != VarCheckFromTrusted) && ((Property->Property & VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY) != 0)) { DEBUG ((EFI_D_INFO, "Variable Check ReadOnly variable fail %r - %g:%s\n", EFI_WRITE_PROTECTED, VendorGuid, VariableName)); return EFI_WRITE_PROTECTED; -- cgit v1.2.3