diff --git a/MdeModulePkg/Core/Dxe/DxeMain.h b/MdeModulePkg/Core/Dxe/DxeMain.h index 2821b6c2ef..da6a744e88 100644 --- a/MdeModulePkg/Core/Dxe/DxeMain.h +++ b/MdeModulePkg/Core/Dxe/DxeMain.h @@ -223,7 +223,8 @@ typedef struct { /// Status returned by LoadImage() service. EFI_STATUS LoadImageStatus; - VOID *HiiData; + VOID *HiiData; + BOOLEAN IsUserImage; } LOADED_IMAGE_PRIVATE_DATA; #define LOADED_IMAGE_PRIVATE_DATA_FROM_THIS(a) \ @@ -2727,12 +2728,14 @@ RemoveImageRecord ( @param[in] LoadedImage The loaded image protocol @param[in] ImageOrigin Where File comes from. @param[in] LoadedImageDevicePath The loaded image device path protocol + @param[out] IsUserImage Whether the loaded image is in user space. **/ VOID ProtectUefiImage ( - IN EFI_LOADED_IMAGE_PROTOCOL *LoadedImage, - IN UINT8 ImageOrigin, - UEFI_IMAGE_LOADER_IMAGE_CONTEXT *ImageContext + IN EFI_LOADED_IMAGE_PROTOCOL *LoadedImage, + IN UINT8 ImageOrigin, + IN UEFI_IMAGE_LOADER_IMAGE_CONTEXT *ImageContext, + OUT BOOLEAN *IsUserImage ); /** diff --git a/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c b/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c index 963c44c8f7..376f0f056c 100644 --- a/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c +++ b/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c @@ -324,7 +324,7 @@ DxeMain ( CoreInitializeMemoryProtection (); - ProtectUefiImage (&mCurrentImage->Info, UefiImageOriginFv, &ImageContext); + ProtectUefiImage (&mCurrentImage->Info, UefiImageOriginFv, &ImageContext, &mCurrentImage->IsUserImage); // // Call constructor for all libraries diff --git a/MdeModulePkg/Core/Dxe/Image/Image.c b/MdeModulePkg/Core/Dxe/Image/Image.c index 2233c68a87..c6ee74cfdd 100644 --- a/MdeModulePkg/Core/Dxe/Image/Image.c +++ b/MdeModulePkg/Core/Dxe/Image/Image.c @@ -64,7 +64,10 @@ LOADED_IMAGE_PRIVATE_DATA mCorePrivateImage = { 0, // Machine NULL, // PeCoffEmu NULL, // RuntimeData - NULL // LoadedImageDevicePath + NULL, // LoadedImageDevicePath + EFI_SUCCESS, // LoadImageStatus + NULL, // HiiData + FALSE // IsUserImage }; // // The field is define for Loading modules at fixed address feature to tracker the PEI code @@ -1435,7 +1438,7 @@ CoreLoadImageCommon ( } Status = EFI_SUCCESS; - ProtectUefiImage (&Image->Info, ImageOrigin, &ImageContext); + ProtectUefiImage (&Image->Info, ImageOrigin, &ImageContext, &Image->IsUserImage); RegisterMemoryProfileImage ( Image->LoadedImageDevicePath, diff --git a/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c b/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c index 8c173eaf6a..910958370a 100644 --- a/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c +++ b/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c @@ -168,12 +168,14 @@ IsMemoryProtectionSectionAligned ( @param[in] LoadedImage The loaded image protocol @param[in] ImageOrigin Where File comes from. @param[in] LoadedImageDevicePath The loaded image device path protocol + @param[out] IsUserImage Whether the loaded image is in user space. **/ VOID ProtectUefiImage ( - IN EFI_LOADED_IMAGE_PROTOCOL *LoadedImage, - IN UINT8 ImageOrigin, - UEFI_IMAGE_LOADER_IMAGE_CONTEXT *ImageContext + IN EFI_LOADED_IMAGE_PROTOCOL *LoadedImage, + IN UINT8 ImageOrigin, + IN UEFI_IMAGE_LOADER_IMAGE_CONTEXT *ImageContext, + OUT BOOLEAN *IsUserImage ) { RETURN_STATUS PdbStatus; @@ -234,8 +236,10 @@ ProtectUefiImage ( // if (AsciiStrStr (PdbPointer, "Ntfs") != NULL) { SetUefiImageProtectionAttributes (ImageRecord, TRUE); + *IsUserImage = TRUE; } else { SetUefiImageProtectionAttributes (ImageRecord, FALSE); + *IsUserImage = FALSE; } }