From fe9dfae5149af20c08127fb5849dbb0ae44c71ae Mon Sep 17 00:00:00 2001 From: Star Zeng Date: Thu, 11 Jun 2015 10:23:44 +0000 Subject: [PATCH] SecurityPkg Variable: Move VariableLock install into SmmVariableReady(). VariableLock in VariableSmmRuntimeDxe.c is installed in EntryPoint now. It works based on SMM variable handler by SMM communication with payload buffer. But the payload buffer and SMM variable handler will be not ready in EntryPoint before SmmVariableReady() call back. VarCheck in VariableSmmRuntimeDxe.c has the same issue, so move VarCheck install into SmmVariableReady() also. 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/trunk/edk2@17625 6f19259b-4bc3-4df7-8a09-765794883524 --- .../RuntimeDxe/VariableSmmRuntimeDxe.c | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/SecurityPkg/VariableAuthenticated/RuntimeDxe/VariableSmmRuntimeDxe.c b/SecurityPkg/VariableAuthenticated/RuntimeDxe/VariableSmmRuntimeDxe.c index 94b60bf5cf..ffa0b078b2 100644 --- a/SecurityPkg/VariableAuthenticated/RuntimeDxe/VariableSmmRuntimeDxe.c +++ b/SecurityPkg/VariableAuthenticated/RuntimeDxe/VariableSmmRuntimeDxe.c @@ -961,6 +961,26 @@ SmmVariableReady ( NULL ); ASSERT_EFI_ERROR (Status); + + mVariableLock.RequestToLock = VariableLockRequestToLock; + Status = gBS->InstallMultipleProtocolInterfaces ( + &mHandle, + &gEdkiiVariableLockProtocolGuid, + &mVariableLock, + NULL + ); + ASSERT_EFI_ERROR (Status); + + mVarCheck.RegisterSetVariableCheckHandler = VarCheckRegisterSetVariableCheckHandler; + mVarCheck.VariablePropertySet = VarCheckVariablePropertySet; + mVarCheck.VariablePropertyGet = VarCheckVariablePropertyGet; + Status = gBS->InstallMultipleProtocolInterfaces ( + &mHandle, + &gEdkiiVarCheckProtocolGuid, + &mVarCheck, + NULL + ); + ASSERT_EFI_ERROR (Status); } @@ -1018,7 +1038,6 @@ VariableSmmRuntimeInitialize ( IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; VOID *SmmVariableRegistration; VOID *SmmVariableWriteRegistration; EFI_EVENT OnReadyToBootEvent; @@ -1027,26 +1046,6 @@ VariableSmmRuntimeInitialize ( EfiInitializeLock (&mVariableServicesLock, TPL_NOTIFY); - mVariableLock.RequestToLock = VariableLockRequestToLock; - Status = gBS->InstallMultipleProtocolInterfaces ( - &mHandle, - &gEdkiiVariableLockProtocolGuid, - &mVariableLock, - NULL - ); - ASSERT_EFI_ERROR (Status); - - mVarCheck.RegisterSetVariableCheckHandler = VarCheckRegisterSetVariableCheckHandler; - mVarCheck.VariablePropertySet = VarCheckVariablePropertySet; - mVarCheck.VariablePropertyGet = VarCheckVariablePropertyGet; - Status = gBS->InstallMultipleProtocolInterfaces ( - &mHandle, - &gEdkiiVarCheckProtocolGuid, - &mVarCheck, - NULL - ); - ASSERT_EFI_ERROR (Status); - // // Smm variable service is ready //