]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: Check if attributes exists for the path before checking mp_nexthop_len 15450/head
authorDonatas Abraitis <donatas@opensourcerouting.org>
Wed, 28 Feb 2024 06:26:25 +0000 (08:26 +0200)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Wed, 28 Feb 2024 06:26:25 +0000 (08:26 +0200)
CID: 1583901

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
bgpd/bgp_nht.c

index 884fabf07713a019cb6228630329e6b3d0f56ef7..fa566f0433e20fd767bb2c187ed49f42e9783824 100644 (file)
@@ -1068,18 +1068,19 @@ static int make_prefix(int afi, struct bgp_path_info *pi, struct prefix *p)
                        /* If we receive MP_REACH nexthop with ::(LL)
                         * or LL(LL), use LL address as nexthop cache.
                         */
-                       if (pi->attr->mp_nexthop_len
-                                   == BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL
-                           && (IN6_IS_ADDR_UNSPECIFIED(
-                                       &pi->attr->mp_nexthop_global)
-                               || IN6_IS_ADDR_LINKLOCAL(
-                                       &pi->attr->mp_nexthop_global)))
+                       if (pi->attr &&
+                           pi->attr->mp_nexthop_len ==
+                                   BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL &&
+                           (IN6_IS_ADDR_UNSPECIFIED(
+                                    &pi->attr->mp_nexthop_global) ||
+                            IN6_IS_ADDR_LINKLOCAL(&pi->attr->mp_nexthop_global)))
                                p->u.prefix6 = pi->attr->mp_nexthop_local;
                        /* If we receive MR_REACH with (GA)::(LL)
                         * then check for route-map to choose GA or LL
                         */
-                       else if (pi->attr->mp_nexthop_len
-                                == BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL) {
+                       else if (pi->attr &&
+                                pi->attr->mp_nexthop_len ==
+                                        BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL) {
                                if (CHECK_FLAG(pi->attr->nh_flags,
                                               BGP_ATTR_NH_MP_PREFER_GLOBAL))
                                        p->u.prefix6 =