Previously, all net_rcv_messages sent by net_deliver were malformed. It never was a problem in practice, since the messages are not complex and thus the kernel does not try to parse the message.
struct net_rcv_messages contains an additional field of type boolean_t. This field has no associated type descriptor, so it must not be included in the message. * device/net_io.c (net_deliver): Account for the extra field in the msgh_size calculation. --- device/net_io.c | 1 + 1 file changed, 1 insertion(+) diff --git a/device/net_io.c b/device/net_io.c index 82b6fb9..a9d318e 100644 --- a/device/net_io.c +++ b/device/net_io.c @@ -467,6 +467,7 @@ boolean_t net_deliver(boolean_t nonblocking) /* remember message sizes must be rounded up */ kmsg->ikm_header.msgh_size = (((mach_msg_size_t) (sizeof(struct net_rcv_msg) + - sizeof net_kmsg(kmsg)->sent - NET_RCV_MAX + count)) + 3) &~ 3; kmsg->ikm_header.msgh_local_port = MACH_PORT_NULL; kmsg->ikm_header.msgh_kind = MACH_MSGH_KIND_NORMAL; -- 2.0.0