]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: fix routing socket AF_LINK handling on NETMASK
authorRafael Zalamena <rzalamena@opensourcerouting.org>
Thu, 17 Jan 2019 22:46:11 +0000 (20:46 -0200)
committerRafael Zalamena <rzalamena@opensourcerouting.org>
Tue, 22 Jan 2019 11:33:38 +0000 (09:33 -0200)
IPv6 netmasks use AF_LINK family type and puts the correct amount of
set bits in the data structure. If we only copy the SDL header we
won't get all IPv6 address length, we must copy the whole extension of
the `sockaddr_in6` struct (which is provided in `destlen` parameter).

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
(cherry picked from commit 691e903879bcf88c872d74f6317784bd2187f3ca)

zebra/kernel_socket.c

index f290d456d68f267d2846afb3f2a1bb82b35b32d5..48db4815157a19f48086e226bb21a6c2a5032709 100644 (file)
@@ -274,7 +274,7 @@ size_t _rta_get(caddr_t sap, void *destp, size_t destlen, bool checkaf)
                if (sa->sa_family == AF_LINK) {
                        sdl = (struct sockaddr_dl *)sa;
                        if (sdl->sdl_index == 0 || sdl->sdl_nlen == 0)
-                               copylen = sizeof(*sdl) - sizeof(sdl->sdl_data);
+                               copylen = destlen;
                }
 
                if (copylen > destlen) {