Fix set access rights when exploding block to finer granule table
If set_access_rights is called with a range which is mapped as a larger
block, Xlat explodes this into a new table with finer granule. The patch
fixes the address calculation for this case.
The patch also fixes setting the first block descriptor after creating
the new table.
Signed-off-by: Imre Kis <imre.kis@arm.com>
Change-Id: Ibdef2bec191f073380bbe8e77b3f5844a470c257
diff --git a/src/lib.rs b/src/lib.rs
index c939335..496681c 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -747,7 +747,7 @@
}
DescriptorType::Block => {
// Saving current descriptor details
- let current_va = va.mask_for_level(granule, level);
+ let current_va = va.mask_bits(!(granule.block_size_at_level(level) - 1));
let current_pa = descriptor.get_block_output_address(granule, level);
let current_attributes = descriptor.get_block_attributes(level);
@@ -798,7 +798,7 @@
let result = Self::set_block_descriptor_recursively(
attributes,
pa,
- va.mask_for_level(granule, level + 1),
+ va.mask_for_level(granule, level),
block_size,
level + 1,
next_table,