]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
align CMSG buffer
authorRoy Marples <roy@marples.name>
Tue, 21 Apr 2020 08:55:50 +0000 (09:55 +0100)
committerRoy Marples <roy@marples.name>
Tue, 21 Apr 2020 08:55:50 +0000 (09:55 +0100)
src/dhcp.c
src/dhcp6.c
src/ipv6nd.c

index 8d13c9b684ffae6d821963b55d6a43e283f3d66c..6333c27c4c0c47850f66c36255ba1b02c3ee3275 100644 (file)
@@ -3510,15 +3510,18 @@ dhcp_readudp(struct dhcpcd_ctx *ctx, struct interface *ifp)
                .iov_base = buf,
                .iov_len = sizeof(buf),
        };
+       union {
+               struct cmsghdr hdr;
 #ifdef IP_RECVIF
-       unsigned char ctl[CMSG_SPACE(sizeof(struct sockaddr_dl))] = { 0 };
+               uint8_t buf[CMSG_SPACE(sizeof(struct sockaddr_dl))];
 #else
-       unsigned char ctl[CMSG_SPACE(sizeof(struct in_pktinfo))] = { 0 };
+               uint8_t buf[CMSG_SPACE(sizeof(struct in_pktinfo))];
 #endif
+       } cmsgbuf = { .buf = { 0 } };
        struct msghdr msg = {
            .msg_name = &from, .msg_namelen = sizeof(from),
            .msg_iov = &iov, .msg_iovlen = 1,
-           .msg_control = ctl, .msg_controllen = sizeof(ctl),
+           .msg_control = buf, .msg_controllen = sizeof(cmsgbuf.buf),
        };
        int s;
        ssize_t bytes;
index 8c976419ab0c5b36a5ca94b857eebab03aaad767..3038d02dd064a0d3ae8868639ac77bcda7771228 100644 (file)
@@ -3581,11 +3581,14 @@ dhcp6_recv(struct dhcpcd_ctx *ctx, struct ipv6_addr *ia)
                .iov_base = buf,
                .iov_len = sizeof(buf),
        };
-       unsigned char ctl[CMSG_SPACE(sizeof(struct in6_pktinfo))] = { 0 };
+       union {
+               struct cmsghdr hdr;
+               uint8_t buf[CMSG_SPACE(sizeof(struct in6_pktinfo))];
+       } cmsgbuf = { .buf = { 0 } };
        struct msghdr msg = {
            .msg_name = &from, .msg_namelen = sizeof(from),
            .msg_iov = &iov, .msg_iovlen = 1,
-           .msg_control = ctl, .msg_controllen = sizeof(ctl),
+           .msg_control = cmsgbuf.buf, .msg_controllen = sizeof(cmsgbuf.buf),
        };
        int s;
        ssize_t bytes;
index dc8ec40177df3a1f12262fb7def5d72158917081..e8ab20fbc8348e6341afc8a7d8cbfe8ce190e4df 100644 (file)
@@ -1832,11 +1832,15 @@ ipv6nd_handledata(void *arg)
                .iov_base = buf,
                .iov_len = sizeof(buf),
        };
-       unsigned char ctl[CMSG_SPACE(sizeof(struct in6_pktinfo)) + CMSG_SPACE(sizeof(int))] = { 0 };
+       union {
+               struct cmsghdr hdr;
+               uint8_t buf[CMSG_SPACE(sizeof(struct in6_pktinfo)) +
+                   CMSG_SPACE(sizeof(int))];
+       } cmsgbuf = { .buf = { 0 } };
        struct msghdr msg = {
            .msg_name = &from, .msg_namelen = sizeof(from),
            .msg_iov = &iov, .msg_iovlen = 1,
-           .msg_control = ctl, .msg_controllen = sizeof(ctl),
+           .msg_control = cmsgbuf.buf, .msg_controllen = sizeof(cmsgbuf.buf),
        };
        ssize_t len;