summaryrefslogtreecommitdiff
path: root/ipc
diff options
context:
space:
mode:
authorLuca Dariz <luca@orpolo.org>2022-06-28 12:10:41 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2022-08-28 02:42:30 +0200
commitc6fb30a04df6455ae225f6ccf437f5eb907f1a2b (patch)
tree7a4db68d9fb1894501b6dd88b49e2840b9475f4d /ipc
parent88444dca8edf573a79730562519220b9ebc9e88c (diff)
simplify ipc_kmsg_copyout_body() usage
* ipc/ipc_kmsg.h: change prototype of ipc_kmsg_copyout_body() * ipc/ipc_kmsg.c: change prototype and usage of ipc_kmsg_copyout_body() by incorporating common code * ipc/mach_msg.c: change usage of ipc_kmsg_copyout_body() Signed-off-by: Luca Dariz <luca@orpolo.org> Message-Id: <20220628101054.446126-3-luca@orpolo.org>
Diffstat (limited to 'ipc')
-rw-r--r--ipc/ipc_kmsg.c24
-rw-r--r--ipc/ipc_kmsg.h2
-rw-r--r--ipc/mach_msg.c4
3 files changed, 10 insertions, 20 deletions
diff --git a/ipc/ipc_kmsg.c b/ipc/ipc_kmsg.c
index 28ed23c6..292aa569 100644
--- a/ipc/ipc_kmsg.c
+++ b/ipc/ipc_kmsg.c
@@ -2336,13 +2336,17 @@ ipc_kmsg_copyout_object(
mach_msg_return_t
ipc_kmsg_copyout_body(
- vm_offset_t saddr,
- vm_offset_t eaddr,
+ ipc_kmsg_t kmsg,
ipc_space_t space,
vm_map_t map)
{
mach_msg_return_t mr = MACH_MSG_SUCCESS;
kern_return_t kr;
+ vm_offset_t saddr, eaddr;
+
+ saddr = (vm_offset_t) (&kmsg->ikm_header + 1);
+ eaddr = (vm_offset_t) &kmsg->ikm_header +
+ kmsg->ikm_header.msgh_size;
while (saddr < eaddr) {
vm_offset_t taddr = saddr;
@@ -2502,13 +2506,7 @@ ipc_kmsg_copyout(
return mr;
if (mbits & MACH_MSGH_BITS_COMPLEX) {
- vm_offset_t saddr, eaddr;
-
- saddr = (vm_offset_t) (&kmsg->ikm_header + 1);
- eaddr = (vm_offset_t) &kmsg->ikm_header +
- kmsg->ikm_header.msgh_size;
-
- mr = ipc_kmsg_copyout_body(saddr, eaddr, space, map);
+ mr = ipc_kmsg_copyout_body(kmsg, space, map);
if (mr != MACH_MSG_SUCCESS)
mr |= MACH_RCV_BODY_ERROR;
}
@@ -2560,13 +2558,7 @@ ipc_kmsg_copyout_pseudo(
kmsg->ikm_header.msgh_local_port = reply_name;
if (mbits & MACH_MSGH_BITS_COMPLEX) {
- vm_offset_t saddr, eaddr;
-
- saddr = (vm_offset_t) (&kmsg->ikm_header + 1);
- eaddr = (vm_offset_t) &kmsg->ikm_header +
- kmsg->ikm_header.msgh_size;
-
- mr |= ipc_kmsg_copyout_body(saddr, eaddr, space, map);
+ mr |= ipc_kmsg_copyout_body(kmsg, space, map);
}
return mr;
diff --git a/ipc/ipc_kmsg.h b/ipc/ipc_kmsg.h
index c6cd77f0..2d75b173 100644
--- a/ipc/ipc_kmsg.h
+++ b/ipc/ipc_kmsg.h
@@ -270,7 +270,7 @@ ipc_kmsg_copyout_object(ipc_space_t, ipc_object_t,
mach_msg_type_name_t, mach_port_t *);
extern mach_msg_return_t
-ipc_kmsg_copyout_body(vm_offset_t, vm_offset_t, ipc_space_t, vm_map_t);
+ipc_kmsg_copyout_body(ipc_kmsg_t, ipc_space_t, vm_map_t);
extern mach_msg_return_t
ipc_kmsg_copyout(ipc_kmsg_t, ipc_space_t, vm_map_t, mach_port_t);
diff --git a/ipc/mach_msg.c b/ipc/mach_msg.c
index fe0c43e3..0ae8fe0c 100644
--- a/ipc/mach_msg.c
+++ b/ipc/mach_msg.c
@@ -1148,9 +1148,7 @@ mach_msg_trap(
kmsg->ikm_header.msgh_remote_port = MACH_PORT_NULL;
mr = ipc_kmsg_copyout_body(
- (vm_offset_t) (&kmsg->ikm_header + 1),
- (vm_offset_t) &kmsg->ikm_header
- + kmsg->ikm_header.msgh_size,
+ kmsg,
space,
current_map());