From: Ondrej Zajicek (work) Date: Wed, 29 Apr 2020 00:50:29 +0000 (+0200) Subject: BGP: Fix handling of strange IPv6 link-local-only next hops X-Git-Tag: v2.0.8~78 X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fbird.git;a=commitdiff_plain;h=17de3a023f7bde293892b41bfafe5740c8553fc8 BGP: Fix handling of strange IPv6 link-local-only next hops 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. --- diff --git a/proto/bgp/packets.c b/proto/bgp/packets.c index ee031c05a..78fdd1e00 100644 --- a/proto/bgp/packets.c +++ b/proto/bgp/packets.c @@ -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