aboutsummaryrefslogtreecommitdiff
path: root/tools/lib/api
diff options
context:
space:
mode:
authorArd Biesheuvel <[email protected]>2015-09-25 23:02:19 +0100
committerIngo Molnar <[email protected]>2015-10-01 12:51:28 +0200
commit0ce3cc008ec04258b6a6314b09f1a6012810881a (patch)
treecd94bbe92edb33a27a2cc0028d0abe87b2a886e2 /tools/lib/api
parenta5caa209ba9c29c6421292e7879d2387a2ef39c9 (diff)
arm64/efi: Fix boot crash by not padding between EFI_MEMORY_RUNTIME regions
The new Properties Table feature introduced in UEFIv2.5 may split memory regions that cover PE/COFF memory images into separate code and data regions. Since these regions only differ in the type (runtime code vs runtime data) and the permission bits, but not in the memory type attributes (UC/WC/WT/WB), the spec does not require them to be aligned to 64 KB. Since the relative offset of PE/COFF .text and .data segments cannot be changed on the fly, this means that we can no longer pad out those regions to be mappable using 64 KB pages. Unfortunately, there is no annotation in the UEFI memory map that identifies data regions that were split off from a code region, so we must apply this logic to all adjacent runtime regions whose attributes only differ in the permission bits. So instead of rounding each memory region to 64 KB alignment at both ends, only round down regions that are not directly preceded by another runtime region with the same type attributes. Since the UEFI spec does not mandate that the memory map be sorted, this means we also need to sort it first. Note that this change will result in all EFI_MEMORY_RUNTIME regions whose start addresses are not aligned to the OS page size to be mapped with executable permissions (i.e., on kernels compiled with 64 KB pages). However, since these mappings are only active during the time that UEFI Runtime Services are being invoked, the window for abuse is rather small. Tested-by: Mark Salter <[email protected]> Tested-by: Mark Rutland <[email protected]> [UEFI 2.4 only] Signed-off-by: Ard Biesheuvel <[email protected]> Signed-off-by: Matt Fleming <[email protected]> Reviewed-by: Mark Salter <[email protected]> Reviewed-by: Mark Rutland <[email protected]> Cc: <[email protected]> # v4.0+ Cc: Catalin Marinas <[email protected]> Cc: Leif Lindholm <[email protected]> Cc: Linus Torvalds <[email protected]> Cc: Mike Galbraith <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Thomas Gleixner <[email protected]> Cc: Will Deacon <[email protected]> Cc: [email protected] Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Ingo Molnar <[email protected]>
Diffstat (limited to 'tools/lib/api')
0 files changed, 0 insertions, 0 deletions