]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Merge pull request #15570 from poettering/cmsg-find
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 24 Apr 2020 05:45:07 +0000 (07:45 +0200)
committerGitHub <noreply@github.com>
Fri, 24 Apr 2020 05:45:07 +0000 (07:45 +0200)
CMSG_FIND_DATA() and cmsg_find() work

1  2 
src/libsystemd-network/sd-dhcp-client.c
src/shared/ask-password-api.c

index 31416c9f43fdcf1e7f1e6dd381e492df8bfd8f3a,c23df7b436a7eac2e09a3bc3124d0eac5e4506a8..0cff6c4f33dfc165f65383c6124459e0a3c04e25
@@@ -1927,25 -1927,21 +1927,21 @@@ static int client_receive_message_raw
  
          iov = IOVEC_MAKE(packet, buflen);
  
 -        len = recvmsg(fd, &msg, 0);
 -        if (len < 0) {
 -                if (IN_SET(errno, EAGAIN, EINTR, ENETDOWN))
 -                        return 0;
 -
 -                return log_dhcp_client_errno(client, errno,
 +        len = recvmsg_safe(fd, &msg, 0);
 +        if (IN_SET(len, -EAGAIN, -EINTR, -ENETDOWN))
 +                return 0;
 +        if (len < 0)
 +                return log_dhcp_client_errno(client, len,
                                               "Could not receive message from raw socket: %m");
 -        } else if ((size_t)len < sizeof(DHCPPacket))
 +
 +        if ((size_t) len < sizeof(DHCPPacket))
                  return 0;
  
-         CMSG_FOREACH(cmsg, &msg)
-                 if (cmsg->cmsg_level == SOL_PACKET &&
-                     cmsg->cmsg_type == PACKET_AUXDATA &&
-                     cmsg->cmsg_len == CMSG_LEN(sizeof(struct tpacket_auxdata))) {
-                         struct tpacket_auxdata *aux = (struct tpacket_auxdata*)CMSG_DATA(cmsg);
-                         checksum = !(aux->tp_status & TP_STATUS_CSUMNOTREADY);
-                         break;
-                 }
+         cmsg = cmsg_find(&msg, SOL_PACKET, PACKET_AUXDATA, CMSG_LEN(sizeof(struct tpacket_auxdata)));
+         if (cmsg) {
+                 struct tpacket_auxdata *aux = (struct tpacket_auxdata*) CMSG_DATA(cmsg);
+                 checksum = !(aux->tp_status & TP_STATUS_CSUMNOTREADY);
+         }
  
          r = dhcp_packet_verify_headers(packet, len, checksum, client->port);
          if (r < 0)
Simple merge