From: Roy Marples Date: Tue, 21 Apr 2020 08:55:50 +0000 (+0100) Subject: align CMSG buffer X-Git-Tag: v8.1.9~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4d67bee130ac4ca1b7e19f5081f1b9ce40a04974;p=thirdparty%2Fdhcpcd.git align CMSG buffer --- diff --git a/src/dhcp.c b/src/dhcp.c index 8d13c9b6..6333c27c 100644 --- a/src/dhcp.c +++ b/src/dhcp.c @@ -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; diff --git a/src/dhcp6.c b/src/dhcp6.c index 8c976419..3038d02d 100644 --- a/src/dhcp6.c +++ b/src/dhcp6.c @@ -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; diff --git a/src/ipv6nd.c b/src/ipv6nd.c index dc8ec401..e8ab20fb 100644 --- a/src/ipv6nd.c +++ b/src/ipv6nd.c @@ -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;