]> git.meshlink.io Git - catta/blobdiff - avahi-core/socket.c
netlink: fix wrong use of netlink flags for dump operations
[catta] / avahi-core / socket.c
index 265536de1d5f28ec9b208a47b2692e2ac0b01ef1..be62105dba8788975d83b9f2a196f3a761b83bdd 100644 (file)
@@ -1,5 +1,3 @@
-/* $Id$ */
-
 /***
   This file is part of avahi.
 
@@ -450,8 +448,15 @@ static int sendmsg_loop(int fd, struct msghdr *msg, int flags) {
         if (sendmsg(fd, msg, flags) >= 0)
             break;
 
+        if (errno == EINTR)
+            continue;
+
         if (errno != EAGAIN) {
-            avahi_log_debug("sendmsg() failed: %s", strerror(errno));
+            char where[64];
+            struct sockaddr_in *sin = msg->msg_name;
+
+            inet_ntop(sin->sin_family, &sin->sin_addr, where, sizeof(where));
+            avahi_log_debug("sendmsg() to %s failed: %s", where, strerror(errno));
             return -1;
         }
 
@@ -648,6 +653,10 @@ AvahiDnsPacket *avahi_recv_dns_packet_ipv4(
         goto fail;
     }
 
+    /* For corrupt packets FIONREAD returns zero size (See rhbz #607297) */
+    if (!ms)
+        goto fail;
+
     p = avahi_dns_packet_new(ms + AVAHI_DNS_PACKET_EXTRA_SIZE);
 
     io.iov_base = AVAHI_DNS_PACKET_DATA(p);
@@ -801,6 +810,10 @@ AvahiDnsPacket *avahi_recv_dns_packet_ipv6(
         goto fail;
     }
 
+    /* For corrupt packets FIONREAD returns zero size (See rhbz #607297) */
+    if (!ms)
+        goto fail;
+
     p = avahi_dns_packet_new(ms + AVAHI_DNS_PACKET_EXTRA_SIZE);
 
     io.iov_base = AVAHI_DNS_PACKET_DATA(p);