From 3a80528d13d0ae91a7289a9828d1a9c453d04337 Mon Sep 17 00:00:00 2001
From: 4lDO2 <4lDO2@protonmail.com>
Date: Wed, 5 Jul 2023 14:28:53 +0200
Subject: [PATCH] Fix MAP_LAZY mappings.

---
 src/scheme/user.rs | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/scheme/user.rs b/src/scheme/user.rs
index 0c966513..78993876 100644
--- a/src/scheme/user.rs
+++ b/src/scheme/user.rs
@@ -364,8 +364,12 @@ impl UserInner {
     }
     pub fn request_fmap(&self, id: usize, offset: u64, required_page_count: usize, flags: MapFlags) -> Result<()> {
         log::info!("REQUEST FMAP");
+
+        let packet_id = self.next_id();
+        self.fmap.lock().insert(packet_id, Arc::downgrade(&context::current()?));
+
         self.todo.send(Packet {
-            id: self.next_id(),
+            id: packet_id,
             pid: context::context_id().into(),
             a: KSMSG_MMAP,
             b: id,
@@ -502,8 +506,10 @@ impl UserInner {
             gid: (map.offset >> 32) as u32,
         })?;
 
+        let mapping_is_lazy = map.flags.contains(MapFlags::MAP_LAZY);
+
         let base_page_opt = match response {
-            Response::Regular(code) => (!map.flags.contains(MapFlags::MAP_LAZY))
+            Response::Regular(code) => (!mapping_is_lazy)
                 .then_some(Error::demux(code)?),
             Response::Fd(_) => {
                 log::debug!("Scheme incorrectly returned an fd for fmap.");
-- 
GitLab