vmbase: Explicitly map valid memory ranges
The new version of aarch64-paging crate introduces a breaking change in
'Mapping::map_range' API. Unless 'Attributes::VALID' is explicitly
passed to 'map_range', the VALID bit is no longer set in leaf page table
entries (blocks and pages).
This change explicitly sets the VALID bit in all places where `map_range`
is called.
Bug: 245267332
Test: atest MicrodroidTestApp
Change-Id: Ide81433f2b719f35cdf7a80b7694b63e79a0275e
diff --git a/vmbase/example/src/main.rs b/vmbase/example/src/main.rs
index 3bf850c..90a0ec2 100644
--- a/vmbase/example/src/main.rs
+++ b/vmbase/example/src/main.rs
@@ -82,17 +82,23 @@
check_alloc();
let mut idmap = IdMap::new(ASID, ROOT_LEVEL);
- idmap.map_range(&DEVICE_REGION, Attributes::DEVICE_NGNRE | Attributes::EXECUTE_NEVER).unwrap();
+ idmap
+ .map_range(
+ &DEVICE_REGION,
+ Attributes::VALID | Attributes::DEVICE_NGNRE | Attributes::EXECUTE_NEVER,
+ )
+ .unwrap();
idmap
.map_range(
&text_range().into(),
- Attributes::NORMAL | Attributes::NON_GLOBAL | Attributes::READ_ONLY,
+ Attributes::VALID | Attributes::NORMAL | Attributes::NON_GLOBAL | Attributes::READ_ONLY,
)
.unwrap();
idmap
.map_range(
&rodata_range().into(),
- Attributes::NORMAL
+ Attributes::VALID
+ | Attributes::NORMAL
| Attributes::NON_GLOBAL
| Attributes::READ_ONLY
| Attributes::EXECUTE_NEVER,
@@ -101,26 +107,36 @@
idmap
.map_range(
&scratch_range().into(),
- Attributes::NORMAL | Attributes::NON_GLOBAL | Attributes::EXECUTE_NEVER,
+ Attributes::VALID
+ | Attributes::NORMAL
+ | Attributes::NON_GLOBAL
+ | Attributes::EXECUTE_NEVER,
)
.unwrap();
idmap
.map_range(
&boot_stack_range().into(),
- Attributes::NORMAL | Attributes::NON_GLOBAL | Attributes::EXECUTE_NEVER,
+ Attributes::VALID
+ | Attributes::NORMAL
+ | Attributes::NON_GLOBAL
+ | Attributes::EXECUTE_NEVER,
)
.unwrap();
idmap
.map_range(
&dtb_range().into(),
- Attributes::NORMAL
+ Attributes::VALID
+ | Attributes::NORMAL
| Attributes::NON_GLOBAL
| Attributes::READ_ONLY
| Attributes::EXECUTE_NEVER,
)
.unwrap();
idmap
- .map_range(&get_bar_region(&pci_info), Attributes::DEVICE_NGNRE | Attributes::EXECUTE_NEVER)
+ .map_range(
+ &get_bar_region(&pci_info),
+ Attributes::VALID | Attributes::DEVICE_NGNRE | Attributes::EXECUTE_NEVER,
+ )
.unwrap();
info!("Activating IdMap...");