From 69620634858b2992e1a362e33c95d9a8ee57bce7 Mon Sep 17 00:00:00 2001 From: Flavio Cruz Date: Thu, 14 Dec 2023 01:02:31 -0500 Subject: 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. --- i386/i386/copy_user.h | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'i386') 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 */ -- cgit v1.2.3