summaryrefslogtreecommitdiffstats
path: root/ArmPkg
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2018-11-30 12:28:27 +0100
committerArd Biesheuvel <ard.biesheuvel@linaro.org>2018-12-03 15:55:35 +0100
commitaa1097921d7581a8a9c527d5beb3d9d97c731f7e (patch)
treed07a5d16ace59c2d62f840b9f6b595f7b62e9507 /ArmPkg
parent36a87fec6879b4bd96de88a7234f9a98c69af8e1 (diff)
downloadedk2-aa1097921d7581a8a9c527d5beb3d9d97c731f7e.tar.gz
edk2-aa1097921d7581a8a9c527d5beb3d9d97c731f7e.tar.bz2
edk2-aa1097921d7581a8a9c527d5beb3d9d97c731f7e.zip
ArmPkg/ArmMmuLib ARM: handle unmapped sections when updating permissions
The ARM ArmMmuLib code currently does not take into account that setting permissions on a region should take into account that a region may not be mapped yet to begin with. So when updating a section descriptor whose old value is zero, pass in the address explicitly. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
Diffstat (limited to 'ArmPkg')
-rw-r--r--ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c b/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c
index ec51e072ab..889b22867d 100644
--- a/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c
+++ b/ArmPkg/Library/ArmMmuLib/Arm/ArmMmuLibCore.c
@@ -695,8 +695,12 @@ UpdateSectionEntries (
} else {
// still a section entry
- // mask off appropriate fields
- Descriptor = CurrentDescriptor & ~EntryMask;
+ if (CurrentDescriptor != 0) {
+ // mask off appropriate fields
+ Descriptor = CurrentDescriptor & ~EntryMask;
+ } else {
+ Descriptor = ((UINTN)FirstLevelIdx + i) << TT_DESCRIPTOR_SECTION_BASE_SHIFT;
+ }
// mask in new attributes and/or permissions
Descriptor |= EntryValue;