]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
BGP: Fix handling of strange IPv6 link-local-only next hops
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Wed, 29 Apr 2020 00:50:29 +0000 (02:50 +0200)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Wed, 29 Apr 2020 00:50:29 +0000 (02:50 +0200)
There are three common ways how to encode IPv6 link-local-only next hops:
(:: ll), (ll), and (ll ll). We use the first one but we should accept all
three. The patch fixes handling of the last one.

Thanks to Sebastian Hahn for the bugreport.

proto/bgp/packets.c

index ee031c05ae7e33b5c0a42cf641fe26a675f5313f..78fdd1e006a396321f8b775b7a91e367d269b01f 100644 (file)
@@ -1157,7 +1157,10 @@ bgp_decode_next_hop_ip(struct bgp_parse_state *s, byte *data, uint len, rta *a)
     nh[0] = ipa_from_ip6(get_ip6(data));
     nh[1] = ipa_from_ip6(get_ip6(data+16));
 
-    if (ipa_is_ip4(nh[0]) || !ip6_is_link_local(nh[1]))
+    if (ipa_is_link_local(nh[0]))
+    { nh[1] = nh[0]; nh[0] = IPA_NONE; }
+
+    if (ipa_is_ip4(nh[0]) || !ipa_is_link_local(nh[1]))
       nh[1] = IPA_NONE;
   }
   else