summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2020-04-21 09:55:50 +0100
committerRoy Marples <roy@marples.name>2020-04-21 09:55:50 +0100
commit4d67bee130ac4ca1b7e19f5081f1b9ce40a04974 (patch)
tree6a30a201ecf7f53df3d232de1dec92aa4d0b4370
parent83fba2aeaeba9ace7f4aeff85c36322296236ffc (diff)
downloaddhcpcd-4d67bee130ac4ca1b7e19f5081f1b9ce40a04974.tar.xz
align CMSG buffer
-rw-r--r--src/dhcp.c9
-rw-r--r--src/dhcp6.c7
-rw-r--r--src/ipv6nd.c8
3 files changed, 17 insertions, 7 deletions
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;