MCPcopy Create free account
hub / github.com/Starry-OS/StarryOS / check_region

Function check_region

api/src/mm.rs:21–39  ·  view source on GitHub ↗
(start: VirtAddr, layout: Layout, access_flags: MappingFlags)

Source from the content-addressed store, hash-verified

19use starry_vm::{vm_load_until_nul, vm_read_slice, vm_write_slice};
20
21fn check_region(start: VirtAddr, layout: Layout, access_flags: MappingFlags) -> AxResult<()> {
22 let align = layout.align();
23 if start.as_usize() & (align - 1) != 0 {
24 return Err(AxError::BadAddress);
25 }
26
27 let curr = current();
28 let mut aspace = curr.as_thread().proc_data.aspace.lock();
29
30 if !aspace.can_access_range(start, layout.size(), access_flags) {
31 return Err(AxError::BadAddress);
32 }
33
34 let page_start = start.align_down_4k();
35 let page_end = (start + layout.size()).align_up_4k();
36 aspace.populate_area(page_start, page_end - page_start, access_flags)?;
37
38 Ok(())
39}
40
41fn check_null_terminated<T: PartialEq + Default>(
42 start: VirtAddr,

Callers 4

get_as_mutMethod · 0.85
get_as_mut_sliceMethod · 0.85
get_as_refMethod · 0.85
get_as_sliceMethod · 0.85

Calls 2

as_usizeMethod · 0.80
as_threadMethod · 0.80

Tested by

no test coverage detected