From c6ded48cdd38b8e44e01c6cfd12348ca9dd09a87 Mon Sep 17 00:00:00 2001 From: Star Zeng Date: Fri, 8 Dec 2017 18:57:29 +0800 Subject: [PATCH] MdeModulePkg PiSmmCore: Unregister each other for LegacyBoot and EBS Otherwise, LegacyBoot may be triggered wrongly by other code in UEFI OS, or vice versa. Cc: Jiewen Yao Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Star Zeng Reviewed-by: Jiewen Yao --- MdeModulePkg/Core/PiSmmCore/PiSmmCore.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c index 4aef9b70a1..dbb89932e7 100644 --- a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c +++ b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c @@ -157,6 +157,7 @@ SmmLegacyBootHandler ( { EFI_STATUS Status; EFI_HANDLE SmmHandle; + UINTN Index; // // Install SMM Legacy Boot protocol. @@ -173,6 +174,16 @@ SmmLegacyBootHandler ( SmiHandlerUnRegister (DispatchHandle); + // + // It is legacy boot, unregister ExitBootService SMI handler. + // + for (Index = 0; mSmmCoreSmiHandlers[Index].HandlerType != NULL; Index++) { + if (CompareGuid (mSmmCoreSmiHandlers[Index].HandlerType, &gEfiEventExitBootServicesGuid)) { + SmiHandlerUnRegister (mSmmCoreSmiHandlers[Index].DispatchHandle); + break; + } + } + return Status; } @@ -201,6 +212,7 @@ SmmExitBootServicesHandler ( { EFI_STATUS Status; EFI_HANDLE SmmHandle; + UINTN Index; // // Install SMM Exit Boot Services protocol. @@ -215,6 +227,16 @@ SmmExitBootServicesHandler ( SmiHandlerUnRegister (DispatchHandle); + // + // It is UEFI boot, unregister LegacyBoot SMI handler. + // + for (Index = 0; mSmmCoreSmiHandlers[Index].HandlerType != NULL; Index++) { + if (CompareGuid (mSmmCoreSmiHandlers[Index].HandlerType, &gEfiEventLegacyBootGuid)) { + SmiHandlerUnRegister (mSmmCoreSmiHandlers[Index].DispatchHandle); + break; + } + } + return Status; }