diff --git a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.c b/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.c index 38be18560f..4960df7555 100644 --- a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.c +++ b/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.c @@ -30,6 +30,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. SMM_LOCK_BOX_CONTEXT mSmmLockBoxContext; LIST_ENTRY mLockBoxQueue = INITIALIZE_LIST_HEAD_VARIABLE (mLockBoxQueue); +BOOLEAN mSmmConfigurationTableInstalled = FALSE; + /** This function return SmmLockBox context from SMST. @@ -114,6 +116,7 @@ SmmLockBoxSmmConstructor ( sizeof(mSmmLockBoxContext) ); ASSERT_EFI_ERROR (Status); + mSmmConfigurationTableInstalled = TRUE; DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SmmLockBoxContext - %x\n", (UINTN)&mSmmLockBoxContext)); DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib LockBoxDataAddress - %x\n", (UINTN)&mLockBoxQueue)); @@ -122,6 +125,42 @@ SmmLockBoxSmmConstructor ( return Status; } +/** + Destructor for SmmLockBox library. + This is used to uninstall SmmLockBoxCommunication configuration table + if it has been installed in Constructor. + + @param[in] ImageHandle Image handle of this driver. + @param[in] SystemTable A Pointer to the EFI System Table. + + @retval EFI_SUCEESS The destructor always returns EFI_SUCCESS. + +**/ +EFI_STATUS +EFIAPI +SmmLockBoxSmmDestructor ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + + DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SmmLockBoxSmmDestructor in %a module\n", gEfiCallerBaseName)); + + if (mSmmConfigurationTableInstalled) { + Status = gSmst->SmmInstallConfigurationTable ( + gSmst, + &gEfiSmmLockBoxCommunicationGuid, + NULL, + 0 + ); + ASSERT_EFI_ERROR (Status); + DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib uninstall SmmLockBoxCommunication configuration table\n")); + } + + return EFI_SUCCESS; +} + /** This function return SmmLockBox queue address. diff --git a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf b/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf index d722f57a66..eb7ba0bb2e 100644 --- a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf +++ b/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf @@ -23,6 +23,7 @@ VERSION_STRING = 1.0 LIBRARY_CLASS = LockBoxLib|DXE_SMM_DRIVER CONSTRUCTOR = SmmLockBoxSmmConstructor + DESTRUCTOR = SmmLockBoxSmmDestructor # # The following information is for reference only and not required by the build tools.