bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 2/2] Memory proxies: Add support for anonymous mappings


From: Joan Lledó
Subject: [PATCH 2/2] Memory proxies: Add support for anonymous mappings
Date: Sat, 6 Nov 2021 09:13:33 +0100

From: Sergey Bugaev <bugaevc@gmail.com>

* vm/memory_object_proxy.c:
  * memory_object_get_proxy():
    * Return KERN_INVALID_ARGUMENT when the entry is a submap.
    * Create a pager for the vm_object when the entry doesn't
      have any yet, since it's an anonymous mapping.
---
 vm/memory_object_proxy.c | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/vm/memory_object_proxy.c b/vm/memory_object_proxy.c
index b6c73576..13a124ba 100644
--- a/vm/memory_object_proxy.c
+++ b/vm/memory_object_proxy.c
@@ -201,6 +201,7 @@ memory_object_get_proxy (task_t task, const vm_offset_t 
address,
 {
   kern_return_t ret;
   vm_map_entry_t entry, tmp_entry;
+  vm_object_t object;
   vm_offset_t offset, start;
   ipc_port_t pager;
 
@@ -217,16 +218,28 @@ memory_object_get_proxy (task_t task, const vm_offset_t 
address,
     entry = tmp_entry;
   }
 
+  if (entry->is_sub_map) {
+    vm_map_unlock_read(task->map);
+    return(KERN_INVALID_ARGUMENT);
+  }
+
   /* Limit the allowed protection and range to the entry ones */
   if (len > entry->vme_end - entry->vme_start) {
     vm_map_unlock_read(task->map);
     return(KERN_INVALID_ARGUMENT);
   }
-
   max_protection &= entry->max_protection;
-  pager = ipc_port_copy_send(entry->object.vm_object->pager);
-  offset = entry->offset;
-  start = 0;
+
+  object = entry->object.vm_object;
+  vm_object_lock(object);
+  /* Create a pager in case this is an internal object that does
+     not yet have one. */
+  vm_object_pager_create(object);
+  pager = ipc_port_copy_send(object->pager);
+  vm_object_unlock(object);
+
+  start = (address - entry->vme_start) + entry->offset;
+  offset = 0;
 
   vm_map_unlock_read(task->map);
 
-- 
2.31.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]