On 06/06/16 12:38, Star Zeng wrote:
> SmmLockBoxSmmLib is linked to SMM modules. If the module entry-point
> function returns error, the module will be unloaded and the global
> variables will point to undefined memory.
> 
> This patch is to add DESTRUCTOR SmmLockBoxSmmDestructor to uninstall
> SmmLockBoxCommunication configuration table if it has been installed
> in Constructor.
> 
> Cc: Jiewen Yao <[email protected]>
> Cc: Laszlo Ersek <[email protected]>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Star Zeng <[email protected]>
> Reviewed-by: Jiewen Yao <[email protected]>
> ---
>  .../Library/SmmLockBoxLib/SmmLockBoxSmmLib.c       | 39 
> ++++++++++++++++++++++
>  .../Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf     |  1 +
>  2 files changed, 40 insertions(+)
> 
> diff --git a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.c 
> b/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.c
> index 38be18560fe9..04afe54accb8 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));
> @@ -123,6 +126,42 @@ SmmLockBoxSmmConstructor (
>  }
>  
>  /**
> +  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     
> +  @return Others          Some error occurs.
> +**/
> +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 Status;
> +}

The value returned above should be constant EFI_SUCCESS.

Namely, if "mSmmConfigurationTableInstalled" is FALSE, then Status will
never be assigned, and the function will return an indeterminate value.

With that fix:

Reviewed-by: Laszlo Ersek <[email protected]>

> +
> +/**
>    This function return SmmLockBox queue address.
>  
>    @return SmmLockBox queue address.
> diff --git a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf 
> b/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf
> index d722f57a66bd..eb7ba0bb2e89 100644
> --- a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf
> +++ b/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf
> @@ -23,6 +23,7 @@ [Defines]
>    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.
> 

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to