Description: [hurd] recvmsg: don't try to resolve invalid address Hurd's PF_LOCAL implementation doesn't return an address when calling __recv. recvmsg wasn't catching that and tried to call __socket_whatis_address on MACH_PORT_NULL, causing Hurd to send SIGLOST to the process. Properly handle this, analogously to how recvfrom does it. Author: Christian Seiler Bug: https://lists.gnu.org/archive/html/bug-hurd/2016-08/msg00000.html Last-Update: 2016-08-05 --- This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ --- a/sysdeps/mach/hurd/recvmsg.c +++ b/sysdeps/mach/hurd/recvmsg.c @@ -202,7 +202,7 @@ __libc_recvmsg (int fd, struct msghdr *m &message->msg_flags, amount))) return __hurd_sockfail (fd, flags, err); - if (message->msg_name != NULL) + if (message->msg_name != NULL && aport != MACH_PORT_NULL) { char *buf = message->msg_name; mach_msg_type_number_t buflen = message->msg_namelen; @@ -236,6 +236,8 @@ __libc_recvmsg (int fd, struct msghdr *m if (buflen > 0) ((struct sockaddr *) message->msg_name)->sa_family = type; } + else if (message->msg_name != NULL) + message->msg_namelen = 0; __mach_port_deallocate (__mach_task_self (), aport);