summaryrefslogtreecommitdiff
path: root/i386
diff options
context:
space:
mode:
authorFlavio Cruz <flaviocruz@gmail.com>2023-12-14 01:02:31 -0500
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2023-12-17 23:17:27 +0100
commit69620634858b2992e1a362e33c95d9a8ee57bce7 (patch)
treebd9e8647ec2ee236166301e347557323d10d69c0 /i386
parentc5f150653fd0642fdbd11b043dfbbbe473604570 (diff)
x86_64: Support 8 byte inlined port rights to avoid message resizing.
If a port is inlined in a message, the user has to use mach_port_name_inlined_t to define each port. Out of line memory continues to use mach_port_name_t since that memory has to be copied to the kernel anyway. Both copyinmsg and copyoutmsg can be reduced to nothing (if we ignore USER32) as a follow up but kept this patch simple for ease of review.
Diffstat (limited to 'i386')
-rw-r--r--i386/i386/copy_user.h12
1 files changed, 5 insertions, 7 deletions
diff --git a/i386/i386/copy_user.h b/i386/i386/copy_user.h
index 5cdbfa80..3d1c7278 100644
--- a/i386/i386/copy_user.h
+++ b/i386/i386/copy_user.h
@@ -87,16 +87,14 @@ static inline int copyout_port(const mach_port_t *kaddr, mach_port_name_t *uaddr
#endif /* __x86_64__ */
}
-// XXX we could add another field to kmsg to store the user-side size, but then we
-// should check if we can obtain it for rpc and notifications originating from
-// the kernel
-#ifndef __x86_64__
+#if defined(__x86_64__) && defined(USER32)
+/* For 32 bit userland, kernel and user land messages are not the same size. */
+size_t msg_usize(const mach_msg_header_t *kmsg);
+#else
static inline size_t msg_usize(const mach_msg_header_t *kmsg)
{
return kmsg->msgh_size;
}
-#else /* __x86_64__ */
-size_t msg_usize(const mach_msg_header_t *kmsg);
-#endif /* __x86_64__ */
+#endif /* __x86_64__ && USER32 */
#endif /* COPY_USER_H */