summaryrefslogtreecommitdiff
path: root/bird
diff options
context:
space:
mode:
authorStijn Tintel <stijn@linux-ipv6.be>2016-05-10 16:52:45 +0300
committerStijn Tintel <stijn@linux-ipv6.be>2016-05-10 17:16:34 +0300
commit2f4ac3ada03a746ba31db1b7e57a5629d258dea4 (patch)
treef6c73d9a0065da095869b4a991a7e273bdb21f7c /bird
parent822d7cd8a85b762acc89a6be55c5ccde910ddfa2 (diff)
bird: fix recvmsg/sendmsg on mips64
Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
Diffstat (limited to 'bird')
-rw-r--r--bird/Makefile2
-rw-r--r--bird/patches/001-netlink-update-struct-msghdr.patch49
2 files changed, 50 insertions, 1 deletions
diff --git a/bird/Makefile b/bird/Makefile
index 04c43ef..aa8aa7f 100644
--- a/bird/Makefile
+++ b/bird/Makefile
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=bird
PKG_VERSION:=1.5.0
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=bird-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=ftp://bird.network.cz/pub/bird
diff --git a/bird/patches/001-netlink-update-struct-msghdr.patch b/bird/patches/001-netlink-update-struct-msghdr.patch
new file mode 100644
index 0000000..491e8f9
--- /dev/null
+++ b/bird/patches/001-netlink-update-struct-msghdr.patch
@@ -0,0 +1,49 @@
+From 31e9e10144a6994773a04d94903fa3bdde6de91e Mon Sep 17 00:00:00 2001
+From: Stijn Tintel <stijn@linux-ipv6.be>
+Date: Tue, 10 May 2016 16:45:35 +0300
+Subject: [PATCH] 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>
+---
+ sysdep/linux/netlink.c | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/sysdep/linux/netlink.c b/sysdep/linux/netlink.c
+index 1ffdff0..b42e7b6 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;
+--
+2.7.3
+