diff options
Diffstat (limited to 'sysdeps/mach/hurd/mlock.c')
-rw-r--r-- | sysdeps/mach/hurd/mlock.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/sysdeps/mach/hurd/mlock.c b/sysdeps/mach/hurd/mlock.c index 10078e7f80..8ef568ea4c 100644 --- a/sysdeps/mach/hurd/mlock.c +++ b/sysdeps/mach/hurd/mlock.c @@ -28,19 +28,20 @@ int mlock (const void *addr, size_t len) { - mach_port_t hostpriv; + mach_port_t host; vm_address_t page; error_t err; - err = __get_privileged_ports (&hostpriv, NULL); + err = __get_privileged_ports (&host, NULL); if (err) - return __hurd_fail (EPERM); + host = __mach_host_self(); page = trunc_page ((vm_address_t) addr); len = round_page ((vm_address_t) addr + len) - page; - err = __vm_wire (hostpriv, __mach_task_self (), page, len, - VM_PROT_READ); - __mach_port_deallocate (__mach_task_self (), hostpriv); + + err = __vm_wire (host, __mach_task_self (), page, len, VM_PROT_READ); + if (host != __mach_host_self()) + __mach_port_deallocate (__mach_task_self (), host); return err ? __hurd_fail (err) : 0; } |