From c2886e18c39182084c11d85f18fff5f9f81360ef Mon Sep 17 00:00:00 2001 From: Luca Dariz Date: Mon, 16 Jan 2023 11:58:53 +0100 Subject: update syscall signature with rpc_vm_* and mach_port_name_t * include/mach/mach_types.h: use mach port names * kern/ipc_mig.c: update vm types and use copyin/copyout helpers * kern/ipc_mig.h: Likewise Signed-off-by: Luca Dariz Message-Id: <20230116105857.240210-4-luca@orpolo.org> --- kern/ipc_mig.c | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) (limited to 'kern/ipc_mig.c') diff --git a/kern/ipc_mig.c b/kern/ipc_mig.c index a9e3f53b..afda1016 100644 --- a/kern/ipc_mig.c +++ b/kern/ipc_mig.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -576,12 +577,12 @@ port_name_to_space(mach_port_name_t name) kern_return_t syscall_vm_map( mach_port_name_t target_map, - vm_offset_t *address, - vm_size_t size, - vm_offset_t mask, + rpc_vm_offset_t *address, + rpc_vm_size_t size, + rpc_vm_offset_t mask, boolean_t anywhere, mach_port_name_t memory_object, - vm_offset_t offset, + rpc_vm_offset_t offset, boolean_t copy, vm_prot_t cur_protection, vm_prot_t max_protection, @@ -607,12 +608,12 @@ syscall_vm_map( } else port = (ipc_port_t) memory_object; - copyin(address, &addr, sizeof(vm_offset_t)); + copyin_address(address, &addr); result = vm_map(map, &addr, size, mask, anywhere, port, offset, copy, cur_protection, max_protection, inheritance); if (result == KERN_SUCCESS) - copyout(&addr, address, sizeof(vm_offset_t)); + copyout_address(&addr, address); if (IP_VALID(port)) ipc_port_release_send(port); vm_map_deallocate(map); @@ -621,9 +622,9 @@ syscall_vm_map( } kern_return_t syscall_vm_allocate( - mach_port_name_t target_map, - vm_offset_t *address, - vm_size_t size, + mach_port_name_t target_map, + rpc_vm_offset_t *address, + rpc_vm_size_t size, boolean_t anywhere) { vm_map_t map; @@ -634,19 +635,19 @@ kern_return_t syscall_vm_allocate( if (map == VM_MAP_NULL) return MACH_SEND_INTERRUPTED; - copyin(address, &addr, sizeof(vm_offset_t)); + copyin_address(address, &addr); result = vm_allocate(map, &addr, size, anywhere); if (result == KERN_SUCCESS) - copyout(&addr, address, sizeof(vm_offset_t)); + copyout_address(&addr, address); vm_map_deallocate(map); return result; } kern_return_t syscall_vm_deallocate( - mach_port_name_t target_map, - vm_offset_t start, - vm_size_t size) + mach_port_name_t target_map, + rpc_vm_offset_t start, + rpc_vm_size_t size) { vm_map_t map; kern_return_t result; @@ -682,7 +683,7 @@ kern_return_t syscall_task_create( (void) ipc_kmsg_copyout_object(current_space(), (ipc_object_t) port, MACH_MSG_TYPE_PORT_SEND, &name); - copyout(&name, child_task, sizeof(mach_port_name_t)); + copyout_port(&name, child_task); } task_deallocate(t); @@ -767,7 +768,9 @@ syscall_mach_port_allocate( kr = mach_port_allocate(space, right, &name); if (kr == KERN_SUCCESS) - copyout(&name, namep, sizeof(mach_port_name_t)); + { + copyout_port(&name, namep); + } is_release(space); return kr; @@ -873,8 +876,8 @@ syscall_device_write_request(mach_port_name_t device_name, mach_port_name_t reply_name, dev_mode_t mode, recnum_t recnum, - vm_offset_t data, - vm_size_t data_count) + rpc_vm_offset_t data, + rpc_vm_size_t data_count) { device_t dev; /*ipc_port_t reply_port;*/ @@ -925,7 +928,7 @@ syscall_device_writev_request(mach_port_name_t device_name, dev_mode_t mode, recnum_t recnum, io_buf_vec_t *iovec, - vm_size_t iocount) + rpc_vm_size_t iocount) { device_t dev; /*ipc_port_t reply_port;*/ -- cgit v1.2.3