(start: VirtAddr, layout: Layout, access_flags: MappingFlags)
| 19 | use starry_vm::{vm_load_until_nul, vm_read_slice, vm_write_slice}; |
| 20 | |
| 21 | fn 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 | |
| 41 | fn check_null_terminated<T: PartialEq + Default>( |
| 42 | start: VirtAddr, |
no test coverage detected