Zhiguang, The commit message should not have more than one Signed-off-by.
Use of Suggested-by may be more appropriate here. Mike > -----Original Message----- > From: Liu, Zhiguang <zhiguang....@intel.com> > Sent: Tuesday, June 16, 2020 2:05 AM > To: devel@edk2.groups.io > Cc: Tian, Feng <feng.t...@intel.com>; Zeng, Star > <star.z...@intel.com>; Kinney, Michael D > <michael.d.kin...@intel.com>; Laszlo Ersek > <ler...@redhat.com>; Yao, Jiewen <jiewen....@intel.com> > Subject: [PATCH 2/5] MdeModulePkg/SmmCore: Remove UEFI > LOADED_IMAGE from SMM. > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2317 > > This patch removes EFI_LOADED_IMAGE_PROTOCOL from DXE > database. > The SmmCore only install EFI_LOADED_IMAGE_PROTOCOL to > SMM database. > > Exposing LOADED_IMAGE_PROTOCOL may cause SMM information > leakage > to non-SMM component. > > Cc: Feng Tian <feng.t...@intel.com> > Cc: Star Zeng <star.z...@intel.com> > Cc: Michael D Kinney <michael.d.kin...@intel.com> > Cc: Laszlo Ersek <ler...@redhat.com> > Signed-off-by: Jiewen Yao <jiewen....@intel.com> > Signed-off-by: Zhiguang Liu <zhiguang....@intel.com> > --- > MdeModulePkg/Core/PiSmmCore/Dispatcher.c | 104 > +++++++++++--------------------------------------------- > ------------------------------------------------ > MdeModulePkg/Core/PiSmmCore/PiSmmCore.c | 34 -------- > -------------------------- > MdeModulePkg/Core/PiSmmCore/PiSmmCore.h | 4 ++-- > 3 files changed, 13 insertions(+), 129 deletions(-) > > diff --git a/MdeModulePkg/Core/PiSmmCore/Dispatcher.c > b/MdeModulePkg/Core/PiSmmCore/Dispatcher.c > index 76ee9e0b89..2be2866234 100644 > --- a/MdeModulePkg/Core/PiSmmCore/Dispatcher.c > +++ b/MdeModulePkg/Core/PiSmmCore/Dispatcher.c > @@ -316,7 +316,7 @@ SmmLoadImage ( > EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv; > > PE_COFF_LOADER_IMAGE_CONTEXT ImageContext; > > > > - PERF_LOAD_IMAGE_BEGIN (DriverEntry->ImageHandle); > > + PERF_LOAD_IMAGE_BEGIN (DriverEntry->SmmImageHandle); > > > > Buffer = NULL; > > Size = 0; > > @@ -546,51 +546,14 @@ SmmLoadImage ( > DriverEntry->ImageBuffer = DstBuffer; > > DriverEntry->NumberOfPage = PageCount; > > > > - // > > - // Allocate a Loaded Image Protocol in > EfiBootServicesData > > - // > > - Status = gBS->AllocatePool (EfiBootServicesData, > sizeof (EFI_LOADED_IMAGE_PROTOCOL), (VOID > **)&DriverEntry->LoadedImage); > > - if (EFI_ERROR (Status)) { > > - if (Buffer != NULL) { > > - gBS->FreePool (Buffer); > > - } > > - SmmFreePages (DstBuffer, PageCount); > > - return Status; > > - } > > - > > - ZeroMem (DriverEntry->LoadedImage, sizeof > (EFI_LOADED_IMAGE_PROTOCOL)); > > // > > // Fill in the remaining fields of the Loaded Image > Protocol instance. > > - // Note: ImageBase is an SMRAM address that can not > be accessed outside of SMRAM if SMRAM window is closed. > > // > > - DriverEntry->LoadedImage->Revision = > EFI_LOADED_IMAGE_PROTOCOL_REVISION; > > - DriverEntry->LoadedImage->ParentHandle = > gSmmCorePrivate->SmmIplImageHandle; > > - DriverEntry->LoadedImage->SystemTable = gST; > > - DriverEntry->LoadedImage->DeviceHandle = > DeviceHandle; > > - > > DriverEntry->SmmLoadedImage.Revision = > EFI_LOADED_IMAGE_PROTOCOL_REVISION; > > DriverEntry->SmmLoadedImage.ParentHandle = > gSmmCorePrivate->SmmIplImageHandle; > > DriverEntry->SmmLoadedImage.SystemTable = gST; > > DriverEntry->SmmLoadedImage.DeviceHandle = > DeviceHandle; > > > > - // > > - // Make an EfiBootServicesData buffer copy of > FilePath > > - // > > - Status = gBS->AllocatePool (EfiBootServicesData, > GetDevicePathSize (FilePath), (VOID **)&DriverEntry- > >LoadedImage->FilePath); > > - if (EFI_ERROR (Status)) { > > - if (Buffer != NULL) { > > - gBS->FreePool (Buffer); > > - } > > - SmmFreePages (DstBuffer, PageCount); > > - return Status; > > - } > > - CopyMem (DriverEntry->LoadedImage->FilePath, > FilePath, GetDevicePathSize (FilePath)); > > - > > - DriverEntry->LoadedImage->ImageBase = (VOID > *)(UINTN) ImageContext.ImageAddress; > > - DriverEntry->LoadedImage->ImageSize = > ImageContext.ImageSize; > > - DriverEntry->LoadedImage->ImageCodeType = > EfiRuntimeServicesCode; > > - DriverEntry->LoadedImage->ImageDataType = > EfiRuntimeServicesData; > > - > > // > > // Make a buffer copy of FilePath > > // > > @@ -599,7 +562,6 @@ SmmLoadImage ( > if (Buffer != NULL) { > > gBS->FreePool (Buffer); > > } > > - gBS->FreePool (DriverEntry->LoadedImage->FilePath); > > SmmFreePages (DstBuffer, PageCount); > > return Status; > > } > > @@ -610,16 +572,6 @@ SmmLoadImage ( > DriverEntry->SmmLoadedImage.ImageCodeType = > EfiRuntimeServicesCode; > > DriverEntry->SmmLoadedImage.ImageDataType = > EfiRuntimeServicesData; > > > > - // > > - // Create a new image handle in the UEFI handle > database for the SMM Driver > > - // > > - DriverEntry->ImageHandle = NULL; > > - Status = gBS->InstallMultipleProtocolInterfaces ( > > - &DriverEntry->ImageHandle, > > - &gEfiLoadedImageProtocolGuid, > DriverEntry->LoadedImage, > > - NULL > > - ); > > - > > // > > // Create a new image handle in the SMM handle > database for the SMM Driver > > // > > @@ -631,7 +583,7 @@ SmmLoadImage ( > &DriverEntry->SmmLoadedImage > > ); > > > > - PERF_LOAD_IMAGE_END (DriverEntry->ImageHandle); > > + PERF_LOAD_IMAGE_END (DriverEntry->SmmImageHandle); > > > > // > > // Print the load address and the PDB file name if it > is available > > @@ -856,7 +808,7 @@ SmmDispatcher ( > // Untrused to Scheduled it would have already > been loaded so we may need to > > // skip the LoadImage > > // > > - if (DriverEntry->ImageHandle == NULL) { > > + if (DriverEntry->SmmImageHandle == NULL) { > > Status = SmmLoadImage (DriverEntry); > > > > // > > @@ -885,8 +837,8 @@ SmmDispatcher ( > REPORT_STATUS_CODE_WITH_EXTENDED_DATA ( > > EFI_PROGRESS_CODE, > > EFI_SOFTWARE_SMM_DRIVER | EFI_SW_PC_INIT_BEGIN, > > - &DriverEntry->ImageHandle, > > - sizeof (DriverEntry->ImageHandle) > > + &DriverEntry->SmmImageHandle, > > + sizeof (DriverEntry->SmmImageHandle) > > ); > > > > // > > @@ -898,9 +850,10 @@ SmmDispatcher ( > // For each SMM driver, pass NULL as ImageHandle > > // > > RegisterSmramProfileImage (DriverEntry, TRUE); > > - PERF_START_IMAGE_BEGIN (DriverEntry- > >ImageHandle); > > - Status = > ((EFI_IMAGE_ENTRY_POINT)(UINTN)DriverEntry- > >ImageEntryPoint)(DriverEntry->ImageHandle, gST); > > - PERF_START_IMAGE_END (DriverEntry->ImageHandle); > > + DEBUG ((DEBUG_INFO, "SMM StartImage - 0x%11p\n", > DriverEntry->ImageEntryPoint)); > > + PERF_START_IMAGE_BEGIN (DriverEntry- > >SmmImageHandle); > > + Status = > ((EFI_IMAGE_ENTRY_POINT)(UINTN)DriverEntry- > >ImageEntryPoint)(DriverEntry->SmmImageHandle, gST); > > + PERF_START_IMAGE_END (DriverEntry- > >SmmImageHandle); > > if (EFI_ERROR(Status)){ > > DEBUG (( > > DEBUG_ERROR, > > @@ -910,20 +863,6 @@ SmmDispatcher ( > )); > > UnregisterSmramProfileImage (DriverEntry, > TRUE); > > SmmFreePages(DriverEntry->ImageBuffer, > DriverEntry->NumberOfPage); > > - // > > - // Uninstall LoadedImage > > - // > > - Status = gBS->UninstallProtocolInterface ( > > - DriverEntry->ImageHandle, > > - &gEfiLoadedImageProtocolGuid, > > - DriverEntry->LoadedImage > > - ); > > - if (!EFI_ERROR (Status)) { > > - if (DriverEntry->LoadedImage->FilePath != > NULL) { > > - gBS->FreePool (DriverEntry->LoadedImage- > >FilePath); > > - } > > - gBS->FreePool (DriverEntry->LoadedImage); > > - } > > Status = SmmUninstallProtocolInterface ( > > DriverEntry->SmmImageHandle, > > &gEfiLoadedImageProtocolGuid, > > @@ -939,8 +878,8 @@ SmmDispatcher ( > REPORT_STATUS_CODE_WITH_EXTENDED_DATA ( > > EFI_PROGRESS_CODE, > > EFI_SOFTWARE_SMM_DRIVER | EFI_SW_PC_INIT_END, > > - &DriverEntry->ImageHandle, > > - sizeof (DriverEntry->ImageHandle) > > + &DriverEntry->SmmImageHandle, > > + sizeof (DriverEntry->SmmImageHandle) > > ); > > > > if (!PreviousSmmEntryPointRegistered && > gSmmCorePrivate->SmmEntryPointRegistered) { > > @@ -1344,27 +1283,6 @@ SmmDriverDispatchHandler ( > // > > // If this is the SMM core fill in it's > DevicePath & DeviceHandle > > // > > - if (mSmmCoreLoadedImage->FilePath == NULL) > { > > - // > > - // Maybe one special FV contains only one > SMM_CORE module, so its device path must > > - // be initialized completely. > > - // > > - EfiInitializeFwVolDevicepathNode > (&mFvDevicePath.File, &NameGuid); > > - SetDevicePathEndNode > (&mFvDevicePath.End); > > - > > - // > > - // Make an EfiBootServicesData buffer > copy of FilePath > > - // > > - Status = gBS->AllocatePool ( > > - EfiBootServicesData, > > - GetDevicePathSize > ((EFI_DEVICE_PATH_PROTOCOL *)&mFvDevicePath), > > - (VOID > **)&mSmmCoreLoadedImage->FilePath > > - ); > > - ASSERT_EFI_ERROR (Status); > > - CopyMem (mSmmCoreLoadedImage->FilePath, > &mFvDevicePath, GetDevicePathSize > ((EFI_DEVICE_PATH_PROTOCOL *)&mFvDevicePath)); > > - > > - mSmmCoreLoadedImage->DeviceHandle = > FvHandle; > > - } > > if (mSmmCoreDriverEntry- > >SmmLoadedImage.FilePath == NULL) { > > // > > // Maybe one special FV contains only one > SMM_CORE module, so its device path must > > diff --git a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c > b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c > index cfa9922cbd..c1b18b047e 100644 > --- a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c > +++ b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.c > @@ -104,8 +104,6 @@ EFI_SMRAM_DESCRIPTOR > *mFullSmramRanges; > > > EFI_SMM_DRIVER_ENTRY *mSmmCoreDriverEntry; > > > > -EFI_LOADED_IMAGE_PROTOCOL *mSmmCoreLoadedImage; > > - > > /** > > Place holder function until all the SMM System Table > Service are available. > > > > @@ -756,38 +754,6 @@ SmmCoreInstallLoadedImage ( > ) > > { > > EFI_STATUS Status; > > - EFI_HANDLE Handle; > > - > > - // > > - // Allocate a Loaded Image Protocol in > EfiBootServicesData > > - // > > - Status = gBS->AllocatePool (EfiBootServicesData, > sizeof(EFI_LOADED_IMAGE_PROTOCOL), (VOID > **)&mSmmCoreLoadedImage); > > - ASSERT_EFI_ERROR (Status); > > - > > - ZeroMem (mSmmCoreLoadedImage, sizeof > (EFI_LOADED_IMAGE_PROTOCOL)); > > - // > > - // Fill in the remaining fields of the Loaded Image > Protocol instance. > > - // Note: ImageBase is an SMRAM address that can not > be accessed outside of SMRAM if SMRAM window is closed. > > - // > > - mSmmCoreLoadedImage->Revision = > EFI_LOADED_IMAGE_PROTOCOL_REVISION; > > - mSmmCoreLoadedImage->ParentHandle = gSmmCorePrivate- > >SmmIplImageHandle; > > - mSmmCoreLoadedImage->SystemTable = gST; > > - > > - mSmmCoreLoadedImage->ImageBase = (VOID > *)(UINTN)gSmmCorePrivate->PiSmmCoreImageBase; > > - mSmmCoreLoadedImage->ImageSize = gSmmCorePrivate- > >PiSmmCoreImageSize; > > - mSmmCoreLoadedImage->ImageCodeType = > EfiRuntimeServicesCode; > > - mSmmCoreLoadedImage->ImageDataType = > EfiRuntimeServicesData; > > - > > - // > > - // Create a new image handle in the UEFI handle > database for the SMM Driver > > - // > > - Handle = NULL; > > - Status = gBS->InstallMultipleProtocolInterfaces ( > > - &Handle, > > - &gEfiLoadedImageProtocolGuid, > mSmmCoreLoadedImage, > > - NULL > > - ); > > - ASSERT_EFI_ERROR (Status); > > > > // > > // Allocate a Loaded Image Protocol in SMM > > diff --git a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.h > b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.h > index 50a7fc0000..3bbd1e1603 100644 > --- a/MdeModulePkg/Core/PiSmmCore/PiSmmCore.h > +++ b/MdeModulePkg/Core/PiSmmCore/PiSmmCore.h > @@ -122,8 +122,8 @@ typedef struct { > BOOLEAN Initialized; > > BOOLEAN DepexProtocolError; > > > > - EFI_HANDLE ImageHandle; > > - EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; > > + EFI_HANDLE > ImageHandle_Reserved1; > > + EFI_LOADED_IMAGE_PROTOCOL > *LoadedImage_Reserved2; > > // > > // Image EntryPoint in SMRAM > > // > > -- > 2.25.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#61366): https://edk2.groups.io/g/devel/message/61366 Mute This Topic: https://groups.io/mt/74912558/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-