]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tree-wide: use cmsg_find() helper at various places where appropriate
authorLennart Poettering <lennart@poettering.net>
Fri, 17 Apr 2020 09:52:05 +0000 (11:52 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 23 Apr 2020 17:41:15 +0000 (19:41 +0200)
src/basic/socket-util.c
src/coredump/coredump.c
src/libsystemd-network/sd-dhcp-client.c
src/libsystemd/sd-netlink/netlink-socket.c

index b797a52180f959d3bc34ef6235314f54f7502d97..b502a62a248117bdd8048137e56ce35d847c247d 100644 (file)
@@ -887,7 +887,7 @@ ssize_t receive_one_fd_iov(
                 .msg_iov = iov,
                 .msg_iovlen = iovlen,
         };
-        struct cmsghdr *cmsg, *found = NULL;
+        struct cmsghdr *found;
         ssize_t k;
 
         assert(transport_fd >= 0);
@@ -905,16 +905,7 @@ ssize_t receive_one_fd_iov(
         if (k < 0)
                 return k;
 
-        CMSG_FOREACH(cmsg, &mh) {
-                if (cmsg->cmsg_level == SOL_SOCKET &&
-                    cmsg->cmsg_type == SCM_RIGHTS &&
-                    cmsg->cmsg_len == CMSG_LEN(sizeof(int))) {
-                        assert(!found);
-                        found = cmsg;
-                        break;
-                }
-        }
-
+        found = cmsg_find(&mh, SOL_SOCKET, SCM_RIGHTS, CMSG_LEN(sizeof(int)));
         if (!found) {
                 cmsg_close_all(&mh);
 
index e4266baa62cc67856d2d35ecade4e5e9ab0fa1aa..b88b2845840c8b99511ac1b057538fb734959be7 100644 (file)
@@ -921,19 +921,11 @@ static int process_socket(int fd) {
                 /* The final zero-length datagram carries the file descriptor and tells us
                  * that we're done. */
                 if (n == 0) {
-                        struct cmsghdr *cmsg, *found = NULL;
+                        struct cmsghdr *found;
 
                         free(iovec.iov_base);
 
-                        CMSG_FOREACH(cmsg, &mh) {
-                                if (cmsg->cmsg_level == SOL_SOCKET &&
-                                    cmsg->cmsg_type == SCM_RIGHTS &&
-                                    cmsg->cmsg_len == CMSG_LEN(sizeof(int))) {
-                                        assert(!found);
-                                        found = cmsg;
-                                }
-                        }
-
+                        found = cmsg_find(&mh, SOL_SOCKET, SCM_RIGHTS, CMSG_LEN(sizeof(int)));
                         if (!found) {
                                 cmsg_close_all(&mh);
                                 r = log_error_errno(SYNTHETIC_ERRNO(EBADMSG),
index a59ae4767e2b6acd9256b05c600b7cfa0f4ad94c..c23df7b436a7eac2e09a3bc3124d0eac5e4506a8 100644 (file)
@@ -1937,15 +1937,11 @@ static int client_receive_message_raw(
         } else 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)
index 9401c43d05309d50733edb12dacede3295fd0393..aa3c6074cb5850aecf2b4f234c48a86c25424209 100644 (file)
@@ -238,7 +238,7 @@ int socket_write_message(sd_netlink *nl, sd_netlink_message *m) {
         return k;
 }
 
-static int socket_recv_message(int fd, struct iovec *iov, uint32_t *_group, bool peek) {
+static int socket_recv_message(int fd, struct iovec *iov, uint32_t *ret_mcast_group, bool peek) {
         union sockaddr_union sender;
         uint8_t cmsg_buffer[CMSG_SPACE(sizeof(struct nl_pktinfo))];
         struct msghdr msg = {
@@ -249,8 +249,6 @@ static int socket_recv_message(int fd, struct iovec *iov, uint32_t *_group, bool
                 .msg_control = cmsg_buffer,
                 .msg_controllen = sizeof(cmsg_buffer),
         };
-        struct cmsghdr *cmsg;
-        uint32_t group = 0;
         ssize_t n;
 
         assert(fd >= 0);
@@ -281,20 +279,16 @@ static int socket_recv_message(int fd, struct iovec *iov, uint32_t *_group, bool
                 return 0;
         }
 
-        CMSG_FOREACH(cmsg, &msg) {
-                if (cmsg->cmsg_level == SOL_NETLINK &&
-                    cmsg->cmsg_type == NETLINK_PKTINFO &&
-                    cmsg->cmsg_len == CMSG_LEN(sizeof(struct nl_pktinfo))) {
-                        struct nl_pktinfo *pktinfo = (void *)CMSG_DATA(cmsg);
+        if (ret_mcast_group) {
+                struct cmsghdr *cmsg;
 
-                        /* multi-cast group */
-                        group = pktinfo->group;
-                }
+                cmsg = cmsg_find(&msg, SOL_NETLINK, NETLINK_PKTINFO, CMSG_LEN(sizeof(struct nl_pktinfo)));
+                if (ret_mcast_group)
+                        *ret_mcast_group = ((struct nl_pktinfo*) CMSG_DATA(cmsg))->group;
+                else
+                        *ret_mcast_group = 0;
         }
 
-        if (_group)
-                *_group = group;
-
         return (int) n;
 }