Applied, thanks! Flavio Cruz, le mer. 11 janv. 2023 23:22:53 -0500, a ecrit: > Not only is uintptr_t more accurate for what protected payloads are but > we also provide compatibility for 64 + 32 bits. Also the use of > natural_t in the RPC definition is wrong since it is always 32 bits. > --- > i386/include/mach/i386/vm_types.h | 2 ++ > include/mach/mach_port.defs | 2 +- > include/mach/mach_types.defs | 2 ++ > include/mach/message.h | 2 +- > ipc/ipc_kmsg.c | 8 ++++---- > ipc/ipc_port.c | 2 +- > ipc/ipc_port.h | 4 ++-- > ipc/mach_msg.c | 6 +++--- > ipc/mach_port.c | 2 +- > ipc/mach_port.h | 2 +- > 10 files changed, 18 insertions(+), 14 deletions(-) > > diff --git a/i386/include/mach/i386/vm_types.h > b/i386/include/mach/i386/vm_types.h > index 4522f48b..670ad4c2 100644 > --- a/i386/include/mach/i386/vm_types.h > +++ b/i386/include/mach/i386/vm_types.h > @@ -110,6 +110,7 @@ typedef vm_size_t * vm_size_array_t; > * functions. > */ > #if defined(MACH_KERNEL) && defined(USER32) > +typedef uint32_t rpc_uintptr_t; > typedef uint32_t rpc_vm_address_t; > typedef uint32_t rpc_vm_offset_t; > typedef uint32_t rpc_vm_size_t; > @@ -139,6 +140,7 @@ static inline int32_t > convert_long_integer_to_user(int64_t i) > typedef uint32_t rpc_long_natural_t; > typedef int32_t rpc_long_integer_t; > #else /* MACH_KERNEL */ > +typedef uintptr_t rpc_uintptr_t; > typedef vm_offset_t rpc_vm_address_t; > typedef vm_offset_t rpc_vm_offset_t; > typedef vm_size_t rpc_vm_size_t; > diff --git a/include/mach/mach_port.defs b/include/mach/mach_port.defs > index 7cb8a659..3823bb14 100644 > --- a/include/mach/mach_port.defs > +++ b/include/mach/mach_port.defs > @@ -348,7 +348,7 @@ skip; /* mach_port_create_act */ > routine mach_port_set_protected_payload( > task : ipc_space_t; > name : mach_port_name_t; > - payload : natural_t); > + payload : rpc_uintptr_t); > > /* > * Only valid for receive rights. > diff --git a/include/mach/mach_types.defs b/include/mach/mach_types.defs > index 5e5d0f2f..a98e5c67 100644 > --- a/include/mach/mach_types.defs > +++ b/include/mach/mach_types.defs > @@ -121,8 +121,10 @@ type ipc_space_t = mach_port_t > ; > > #if defined(KERNEL) && defined(USER32) > +type rpc_uintptr_t = uint32_t; > type rpc_vm_size_t = uint32_t; > #else /* KERNEL and USER32 */ > +type rpc_uintptr_t = uintptr_t; > type rpc_vm_size_t = uintptr_t; > #endif /* KERNEL_SERVER and USER32 */ > > diff --git a/include/mach/message.h b/include/mach/message.h > index e6d26f58..af7988ed 100644 > --- a/include/mach/message.h > +++ b/include/mach/message.h > @@ -138,7 +138,7 @@ typedef struct mach_msg_header { > mach_port_t msgh_remote_port; > union { > mach_port_t msgh_local_port; > - unsigned long msgh_protected_payload; > + rpc_uintptr_t msgh_protected_payload; > }; > mach_port_seqno_t msgh_seqno; > mach_msg_id_t msgh_id; > diff --git a/ipc/ipc_kmsg.c b/ipc/ipc_kmsg.c > index 73041703..62e138c7 100644 > --- a/ipc/ipc_kmsg.c > +++ b/ipc/ipc_kmsg.c > @@ -1727,7 +1727,7 @@ ipc_kmsg_copyout_header( > case MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND, 0): { > mach_port_name_t dest_name; > ipc_port_t nsrequest; > - unsigned long payload; > + rpc_uintptr_t payload; > > /* receiving an asynchronous message */ > > @@ -1780,7 +1780,7 @@ ipc_kmsg_copyout_header( > ipc_port_t reply = (ipc_port_t) msg->msgh_local_port; > mach_port_name_t dest_name, reply_name; > ipc_port_t nsrequest; > - unsigned long payload; > + rpc_uintptr_t payload; > > /* receiving a request message */ > > @@ -1882,7 +1882,7 @@ ipc_kmsg_copyout_header( > > case MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE, 0): { > mach_port_name_t dest_name; > - unsigned long payload; > + rpc_uintptr_t payload; > > /* receiving a reply message */ > > @@ -1936,7 +1936,7 @@ ipc_kmsg_copyout_header( > mach_msg_type_name_t reply_type = MACH_MSGH_BITS_LOCAL(mbits); > ipc_port_t reply = (ipc_port_t) msg->msgh_local_port; > mach_port_name_t dest_name, reply_name; > - unsigned long payload; > + rpc_uintptr_t payload; > > if (IP_VALID(reply)) { > ipc_port_t notify_port; > diff --git a/ipc/ipc_port.c b/ipc/ipc_port.c > index a0006cf4..c593e8b3 100644 > --- a/ipc/ipc_port.c > +++ b/ipc/ipc_port.c > @@ -431,7 +431,7 @@ ipc_port_set_seqno( > */ > > void > -ipc_port_set_protected_payload(ipc_port_t port, unsigned long payload) > +ipc_port_set_protected_payload(ipc_port_t port, rpc_uintptr_t payload) > { > ipc_mqueue_t mqueue; > > diff --git a/ipc/ipc_port.h b/ipc/ipc_port.h > index b0433876..022921f7 100644 > --- a/ipc/ipc_port.h > +++ b/ipc/ipc_port.h > @@ -97,7 +97,7 @@ struct ipc_port { > mach_port_msgcount_t ip_msgcount; > mach_port_msgcount_t ip_qlimit; > struct ipc_thread_queue ip_blocked; > - unsigned long ip_protected_payload; > + rpc_uintptr_t ip_protected_payload; > }; > > #define ip_object ip_target.ipt_object > @@ -264,7 +264,7 @@ extern void > ipc_port_set_seqno(ipc_port_t, mach_port_seqno_t); > > extern void > -ipc_port_set_protected_payload(ipc_port_t, unsigned long); > +ipc_port_set_protected_payload(ipc_port_t, rpc_uintptr_t); > > extern void > ipc_port_clear_protected_payload(ipc_port_t); > diff --git a/ipc/mach_msg.c b/ipc/mach_msg.c > index 420e2a26..f15164a3 100644 > --- a/ipc/mach_msg.c > +++ b/ipc/mach_msg.c > @@ -951,7 +951,7 @@ mach_msg_trap( > ipc_port_t reply_port = > (ipc_port_t) kmsg->ikm_header.msgh_local_port; > mach_port_name_t dest_name, reply_name; > - unsigned long payload; > + rpc_uintptr_t payload; > > /* receiving a request message */ > > @@ -1056,7 +1056,7 @@ mach_msg_trap( > > case MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE, 0): { > mach_port_name_t dest_name; > - unsigned long payload; > + rpc_uintptr_t payload; > > /* receiving a reply message */ > > @@ -1101,7 +1101,7 @@ mach_msg_trap( > case MACH_MSGH_BITS_COMPLEX| > MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE, 0): { > mach_port_name_t dest_name; > - unsigned long payload; > + rpc_uintptr_t payload; > > /* receiving a complex reply message */ > > diff --git a/ipc/mach_port.c b/ipc/mach_port.c > index 1c9cdc97..6edf9f88 100644 > --- a/ipc/mach_port.c > +++ b/ipc/mach_port.c > @@ -1511,7 +1511,7 @@ kern_return_t > mach_port_set_protected_payload( > ipc_space_t space, > mach_port_name_t name, > - unsigned long payload) > + rpc_uintptr_t payload) > { > ipc_port_t port; > kern_return_t kr; > diff --git a/ipc/mach_port.h b/ipc/mach_port.h > index c93c48df..70b6cc7f 100644 > --- a/ipc/mach_port.h > +++ b/ipc/mach_port.h > @@ -157,7 +157,7 @@ kern_return_t > mach_port_set_protected_payload( > ipc_space_t space, > mach_port_name_t name, > - unsigned long payload); > + rpc_uintptr_t payload); > > kern_return_t > mach_port_clear_protected_payload( > -- > 2.39.0 > >
-- Samuel --- Pour une évaluation indépendante, transparente et rigoureuse ! Je soutiens la Commission d'Évaluation de l'Inria.