Hi Ard
Yes, your are right. We do observe similar odd behavior in old 
Win7/Win8/Win8.1, and we have to disable it.
Win8 and Win8.1 have OS patch to set adjacent virtual memory map, to resolve 
this issue.
We also tested Win10, and Suse 11 GM. They are good.

Would you please share the information on which OS you are using?

All in all, if OS cannot guarantee the virtual memory map is adjacent, we have 
to disable this feature.

Thank you
Yao Jiewen


-----Original Message-----
From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] 
Sent: Monday, June 29, 2015 6:46 PM
To: edk2-devel@lists.sourceforge.net; Yao, Jiewen; Gao, Liming; Laszlo Ersek; 
Justen, Jordan L; Kinney, Michael D; Zeng, Star
Subject: BUG in properties table feature implementation

Hello all,

I am running into another problem with the implementation of the UEFI
2.5 Properties Table feature. It splits PE/COFF images into separate but 
adjacent memory regions, only to be able to assign different permissions to 
.text and .data sections. This is working fine at boot time.

However, at runtime, after calling virtual address map, this breaks down 
completely. Since the virtual mapping supplied to
SetVirtualAddressMap() does not have to guarantee adjacency between code and 
data regions (of which the OS does not know whether they belong together or 
not), reapplying the relocations corrupts the memory image and breaks the 
runtime services.

For example, this region

  0x00005eeb1000-0x00005eeb6fff [Runtime Code]
  0x00005eeb7000-0x00005eec0fff [Runtime Data]

is mapped on AARCH64 as

  EFI remap 0x000000005eeb1000 => 00000000440a1000
  EFI remap 0x000000005eeb7000 => 00000000440b7000

which retains the relative alignment, but adds a 64 KB offset to the second 
regions so that the regions can still be mapped with different permissions when 
the OS is executing with a 64 KB page size.

As far as I can tell, this is in accordance with the spec, and was working fine 
until I tried to enable the properties table feature.
With that enabled, the two above regions could actually describe one single 
PE/COFF image in memory, and the 64 KB offset results in the relocations to be 
applied incorrectly.

I looked at PeCoffLoaderRelocateImageForRuntime () but to me, it is not very 
obvious how to solve this. Obviously, our PE/COFF implementation is not 
complete since it assumes file offset == memory offset for sections, but this 
does not hold anymore for UEFI 2.5

I would also like to point out again that this is another result of the fact 
that this series was pushed through with any review or testing outside of the 
Intel firmware team. For features of this magnitude and complexity, more 
scrutiny and testing is obviously required.

Kind regards,
Ard.
------------------------------------------------------------------------------
Monitor 25 network devices or servers for free with OpManager!
OpManager is web-based network management software that monitors 
network devices and physical & virtual servers, alerts via email & sms 
for fault. Monitor 25 devices for free with no restriction. Download now
http://ad.doubleclick.net/ddm/clk/292181274;119417398;o
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to