git-recvmsg
authorGNU Libc Maintainers <debian-glibc@lists.debian.org>
Mon, 16 Jan 2017 17:43:37 +0000 (17:43 +0000)
committerAurelien Jarno <aurel32@debian.org>
Mon, 16 Jan 2017 17:43:37 +0000 (17:43 +0000)
commit a194625ef31f0c33afae9b53e2dfaa17c2517606
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date:   Tue Aug 9 01:42:50 2016 +0200

    Fix recvmsg returning SIGLOST on PF_LOCAL sockets

    when msg_name is not NULL.

     * sysdeps/mach/hurd/recvmsg.c (__libc_recvmsg): Cope with aport being
     MACH_PORT_NULL.

Gbp-Pq: Topic hurd-i386
Gbp-Pq: Name git-recvmsg.diff

sysdeps/mach/hurd/recvmsg.c

index a174794913d1dc9952d772ac89767d80d28faa18..a1b96782552c860eaa1a972da8bed05793af1f32 100644 (file)
@@ -202,7 +202,7 @@ __libc_recvmsg (int fd, struct msghdr *message, int flags)
                                               &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 *message, int flags)
       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);