On 20 October 2014 18:25, Ard Biesheuvel <ard.biesheu...@linaro.org> wrote:
> On 20 October 2014 18:16, Andrew Fish <af...@apple.com> wrote:
>>
>>> On Oct 20, 2014, at 4:36 AM, Ard Biesheuvel <ard.biesheu...@linaro.org> 
>>> wrote:
>>>
>>> Hello all,
>>>
>>> I am currently investigating what would be the best way to make sure
>>> Runtime Services regions are never mapped both writable and executable
>>> by the arm64 Linux kernel, as a security enhancement. This is
>>> especially important under kexec, as the UEFI memory ranges may
>>> survive many reboots.
>>>
>>> It would seem inappropriate to me to just apply the WP bit to RT code
>>> regions and the XP bit to RT data regions, so I am trying to figure
>>> out how UEFI uses those bits. The spec lists the EFI_MEMORY_WP and
>>> EFI_MEMORY_XP bits as indicating whether the hardware that backs a
>>> memory region supports being configured as the respective type.
>>> However, those bits are only set based on the nature of the system
>>> RAM, and inherited by all the allocations that are done from it. I
>>> can't find any logic that manipulates any of those bits base on the
>>> code/data nature of the allocation.
>>>
>>> So what kind of logic should be applied to this data? Is it in fact
>>> appropriate to, for instance, write protect a code region just based
>>> on its type and its attribute having EFI_MEMORY_WP set?
>>>
>>
>> EfiRuntimeServicesData is malloc’ed data used at runtime.
>> EfiRuntimeServicesCode is the memory allocated to load the PE/COFF image. 
>> Thus it includes the C data and text regions.
>>
>> The default linker config for EFI PE/COFF images is to have 32 byte  section 
>> alignment to save space, it is not 4K aligned as is typical in the OS.
>>
>
> Thanks for your reply.
>
> However, the question was about write-protected and execute-protected
> data. While the UEFI spec describes those bits, it is unclear to me if
> I can legally map the runtime code sections as read-only and the
> runtime data sections as execute protected, which is preferable from
> security point of view. Currently, all regions (except the MMIO ones)
> are mapped read-write-execute, which means an exploit can cause much
> more damage than necessary, especially considering the fact that Linux
> has kexec(), which implements reboot without going through a firmware
> reset.
>

After reading more carefully (apologies), I suppose mapping code as
write protected may cause trouble for static read-write data then?
But mapping data as execute protected should be feasible ...

-- 
Ard.


>>>
>>> ------------------------------------------------------------------------------
>>> Comprehensive Server Monitoring with Site24x7.
>>> Monitor 10 servers for $9/Month.
>>> Get alerted through email, SMS, voice calls or mobile push notifications.
>>> Take corrective actions from your mobile device.
>>> http://p.sf.net/sfu/Zoho
>>> _______________________________________________
>>> edk2-devel mailing list
>>> edk2-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/edk2-devel
>>
>>
>> ------------------------------------------------------------------------------
>> Comprehensive Server Monitoring with Site24x7.
>> Monitor 10 servers for $9/Month.
>> Get alerted through email, SMS, voice calls or mobile push notifications.
>> Take corrective actions from your mobile device.
>> http://p.sf.net/sfu/Zoho
>> _______________________________________________
>> edk2-devel mailing list
>> edk2-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/edk2-devel

------------------------------------------------------------------------------
Comprehensive Server Monitoring with Site24x7.
Monitor 10 servers for $9/Month.
Get alerted through email, SMS, voice calls or mobile push notifications.
Take corrective actions from your mobile device.
http://p.sf.net/sfu/Zoho
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to