summaryrefslogtreecommitdiffstats
path: root/ArmPkg/Library/ArmLib
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2016-04-20 10:07:20 +0200
committerArd Biesheuvel <ard.biesheuvel@linaro.org>2016-05-10 14:44:40 +0200
commitd1ec2b2f78b752b9dfc06843f994cbfad134ea63 (patch)
treecb3777e2f058e073bf64b2e8476762c6751a5d49 /ArmPkg/Library/ArmLib
parentb64e44cc098ffd03ccbf1a635ae405ae98971419 (diff)
downloadedk2-d1ec2b2f78b752b9dfc06843f994cbfad134ea63.tar.gz
edk2-d1ec2b2f78b752b9dfc06843f994cbfad134ea63.tar.bz2
edk2-d1ec2b2f78b752b9dfc06843f994cbfad134ea63.zip
ArmPkg/AArch64Mmu: don't let table entries inherit XN permission bits
When we split a block entry into a table entry, the UXN/PXN/XN permission attributes are inherited both by the new table entry and by the new block entries at the next level down. Unlike the NS bit, which only affects the next level of lookup, the XN table bits supersede the permissions of the final translation, and setting the permissions at multiple levels is not only redundant, it also prevents us from lifting XN restrictions on a subregion of the original block entry by simply clearing the appropriate bits at the lowest level. So drop the code that sets the UXN/PXN/XN bits on the table entries. Reported-by: "Oliyil Kunnil, Vishal" <vishalo@qti.qualcomm.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
Diffstat (limited to 'ArmPkg/Library/ArmLib')
-rw-r--r--ArmPkg/Library/ArmLib/AArch64/AArch64Mmu.c7
1 files changed, 0 insertions, 7 deletions
diff --git a/ArmPkg/Library/ArmLib/AArch64/AArch64Mmu.c b/ArmPkg/Library/ArmLib/AArch64/AArch64Mmu.c
index 48ca827184..cf9b7222b4 100644
--- a/ArmPkg/Library/ArmLib/AArch64/AArch64Mmu.c
+++ b/ArmPkg/Library/ArmLib/AArch64/AArch64Mmu.c
@@ -306,13 +306,6 @@ GetBlockEntryListFromAddress (
// Convert the block entry attributes into Table descriptor attributes
TableAttributes = TT_TABLE_AP_NO_PERMISSION;
- if (Attributes & TT_PXN_MASK) {
- TableAttributes = TT_TABLE_PXN;
- }
- // XN maps to UXN in the EL1&0 translation regime
- if (Attributes & TT_XN_MASK) {
- TableAttributes = TT_TABLE_XN;
- }
if (Attributes & TT_NS) {
TableAttributes = TT_TABLE_NS;
}