summaryrefslogtreecommitdiff
path: root/zebra/zserv.c
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2012-09-26 14:52:39 +0200
committerDavid Lamparter <equinox@opensourcerouting.org>2013-01-16 01:45:57 +0100
commitca3ccd8748434719e4670ce812d1310013fad518 (patch)
tree3fae89070206bc47704a456219350c34b5f8ea54 /zebra/zserv.c
parent8d083b9ec5bb0375ebb6d8b2b05c848febd92cb5 (diff)
zebra: fix sockaddr_dl length assumptions (BZ#737)
Quagga makes bad assumptions about sockaddr_dl (on NetBSD, but possibly on other systems as well). Particularly, sizeof(struct sockaddr_dl) returns a size that does not include the full sdl_data field, leading to not enough data being copied. This breaks IPv6 RAs in particular, as a broken mac address from sockaddr_dl will be included in the packets. From: Matthias-Christian Ott <ott@mirix.org> Tested-by: Uwe Toenjes <6bone@6bone.informatik.uni-leipzig.de> [further simplified + more comments] Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'zebra/zserv.c')
-rw-r--r--zebra/zserv.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/zebra/zserv.c b/zebra/zserv.c
index 9e47f23f..cb8dbcb3 100644
--- a/zebra/zserv.c
+++ b/zebra/zserv.c
@@ -153,7 +153,7 @@ zserv_encode_interface (struct stream *s, struct interface *ifp)
stream_putl (s, ifp->mtu6);
stream_putl (s, ifp->bandwidth);
#ifdef HAVE_STRUCT_SOCKADDR_DL
- stream_put (s, &ifp->sdl, sizeof (ifp->sdl));
+ stream_put (s, &ifp->sdl, sizeof (ifp->sdl_storage));
#else
stream_putl (s, ifp->hw_addr_len);
if (ifp->hw_addr_len)