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. Cc: Jiewen Yao <[email protected]> Cc: Ruiyu Ni <[email protected]> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Star Zeng <[email protected]> --- .../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 94b60bf..ffa0b07 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 // -- 1.9.5.msysgit.0 ------------------------------------------------------------------------------ _______________________________________________ edk2-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/edk2-devel
