]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
netlink: update struct msghdr
authorStijn Tintel <stijn@linux-ipv6.be>
Tue, 10 May 2016 13:45:35 +0000 (16:45 +0300)
committerJan Moskyto Matejka <mq@ucw.cz>
Tue, 10 May 2016 14:05:16 +0000 (16:05 +0200)
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>
sysdep/linux/netlink.c

index 1ffdff07adc5130a7d9679122d4e8900cd952fa7..b42e7b6f1b301bc2f376077b67c6bfc5f0cd2a96 100644 (file)
@@ -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;