diff --git a/MdeModulePkg/Core/Dxe/DxeMain.h b/MdeModulePkg/Core/Dxe/DxeMain.h index 012e2d379d..512fc871cf 100644 --- a/MdeModulePkg/Core/Dxe/DxeMain.h +++ b/MdeModulePkg/Core/Dxe/DxeMain.h @@ -224,7 +224,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) \ @@ -2728,12 +2729,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 0b3c222ed1..d36d0061af 100644 --- a/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c +++ b/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c @@ -332,7 +332,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 5065c01fb3..3843f32935 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; } }