From 91b5d64c22779a7c8b0df4d3b741363bbc1af453 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Sat, 27 Aug 2022 18:05:20 -0600 Subject: [PATCH] Use current address space for proc kfmap workaround --- src/scheme/proc.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/scheme/proc.rs b/src/scheme/proc.rs index 46164bb..f7f735b 100644 --- a/src/scheme/proc.rs +++ b/src/scheme/proc.rs @@ -1258,16 +1258,18 @@ impl KernelScheme for ProcScheme { match info.operation { Operation::GrantHandle { ref description } => { + let current_space = AddrSpace::current()?; + // Copy Map to user memory let page_count = 1; // TODO: find size required to store Map - let page = dst_addr_space + let page = current_space .write() .mmap(None, page_count, MapFlags::PROT_READ, |page, flags, mapper, flusher| { Ok(Grant::zeroed(page, page_count, flags, mapper, flusher)?) })?; - + // Write Map using kernel's physmap - let (phys, _flags) = dst_addr_space.read().table.utable.translate(page.start_address()).expect("could not find mapping that was just made"); + let (phys, _flags) = current_space.read().table.utable.translate(page.start_address()).expect("could not find mapping that was just made"); unsafe { core::ptr::write(RmmA::phys_to_virt(phys).data() as *mut Map, *map); } // Scheme fmap with Map in user memory @@ -1280,7 +1282,7 @@ impl KernelScheme for ProcScheme { let res = scheme.fmap(number, unsafe { &*(page.start_address().data() as *const Map) }); // Unmap Map user memory - dst_addr_space.write().munmap(page, page_count); + current_space.write().munmap(page, page_count); res }