Hello, Flavio Cruz, le ven. 24 nov. 2023 16:30:41 -0500, a ecrit: > +#ifdef USER32 > + assert(size == > bytes_to_descsize(sizeof(mach_port_name_t))); > if ((usaddr + sizeof(mach_port_name_t)*number) > ueaddr) > return 1; > adjust_msg_type_size(ktaddr, sizeof(mach_port_t) - > sizeof(mach_port_name_t)); > @@ -433,6 +453,16 @@ int copyinmsg (const void *userbuf, void *kernelbuf, > const size_t usize, const s > ksaddr += sizeof(mach_port_t); > usaddr += sizeof(mach_port_name_t); > } > +#else > + assert(size == > bytes_to_descsize(sizeof(mach_port_name_inlined_t))); [...] > + if (MACH_MSG_TYPE_PORT_ANY(name)) { > + assert(size == bytes_to_descsize(sizeof(mach_port_name_t)));
size is coming from userland, we don't want to assert here, but return an error. I'm hitting the last assertion, not sure exactly where it is coming from yet. > @@ -470,6 +503,9 @@ int copyinmsg (const void *userbuf, void *kernelbuf, > const size_t usize, const s > > kmsg->msgh_size = sizeof(mach_msg_header_t) + ksaddr - (vm_offset_t)(kmsg > + 1); > assert(kmsg->msgh_size <= ksize); > +#ifndef USER32 > + assert(kmsg->msgh_size == usize); > +#endif > return 0; > } > ditto with usize. > @@ -526,10 +563,17 @@ int copyoutmsg (const void *kernelbuf, void *userbuf, > const size_t ksize) > ksaddr += sizeof(mach_port_t); > usaddr += sizeof(mach_port_name_t); > } > +#else > + assert(size == > bytes_to_descsize(sizeof(mach_port_name_inlined_t))); > @@ -554,6 +598,9 @@ int copyoutmsg (const void *kernelbuf, void *userbuf, > const size_t ksize) > usize = sizeof(mach_msg_user_header_t) + usaddr - (vm_offset_t)(umsg + 1); > if (copyout(&usize, &umsg->msgh_size, sizeof(umsg->msgh_size))) > return 1; > +#ifndef USER32 > + assert(usize == ksize); > +#endif > > return 0; and there as well. Samuel