summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Tintel <stijn@linux-ipv6.be>2016-05-10 16:45:35 +0300
committerJan Moskyto Matejka <mq@ucw.cz>2016-05-10 16:05:16 +0200
commit31e9e10144a6994773a04d94903fa3bdde6de91e (patch)
tree6a99ee431124d8d95ad07ac118251f6ffefd0913
parentf7a99acb4eac23223f51ce83b8081cc9695fef1e (diff)
netlink: update struct msghdr
The netlink code assumes an order for the members of struct msghdr. This breaks recvmsg and sendmsg with musl libc on mips64. Fix this by using designated initializers instead. Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
-rw-r--r--sysdep/linux/netlink.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/sysdep/linux/netlink.c b/sysdep/linux/netlink.c
index 1ffdff07..b42e7b6f 100644
--- a/sysdep/linux/netlink.c
+++ b/sysdep/linux/netlink.c
@@ -125,7 +125,12 @@ nl_get_reply(struct nl_sock *nl)
{
struct iovec iov = { nl->rx_buffer, NL_RX_SIZE };
struct sockaddr_nl sa;
- struct msghdr m = { (struct sockaddr *) &sa, sizeof(sa), &iov, 1, NULL, 0, 0 };
+ struct msghdr m = {
+ .msg_name = &sa,
+ .msg_namelen = sizeof(sa),
+ .msg_iov = &iov,
+ .msg_iovlen = 1,
+ };
int x = recvmsg(nl->fd, &m, 0);
if (x < 0)
die("nl_get_reply: %m");
@@ -1231,7 +1236,12 @@ nl_async_hook(sock *sk, int size UNUSED)
{
struct iovec iov = { nl_async_rx_buffer, NL_RX_SIZE };
struct sockaddr_nl sa;
- struct msghdr m = { (struct sockaddr *) &sa, sizeof(sa), &iov, 1, NULL, 0, 0 };
+ struct msghdr m = {
+ .msg_name = &sa,
+ .msg_namelen = sizeof(sa),
+ .msg_iov = &iov,
+ .msg_iovlen = 1,
+ };
struct nlmsghdr *h;
int x;
uint len;