]> git.proxmox.com Git - mirror_frr.git/blobdiff - bgpd/bgp_table.c
Merge pull request #5455 from donaldsharp/7.1_bgp_rpki_crash
[mirror_frr.git] / bgpd / bgp_table.c
index 53175bfccf05828d513c1c0626541053ac35c2f1..b75246b172c606d9379afa7b1e529d21ac211346 100644 (file)
@@ -159,7 +159,8 @@ void bgp_table_range_lookup(const struct bgp_table *table, struct prefix *p,
        if (node == NULL)
                return;
 
-       while (node->p.prefixlen <= p->prefixlen && prefix_match(&node->p, p)) {
+       while (node &&
+              node->p.prefixlen <= p->prefixlen && prefix_match(&node->p, p)) {
                if (bgp_node_has_bgp_path_info_data(node)
                    && node->p.prefixlen == p->prefixlen) {
                        matched = node;
@@ -169,14 +170,20 @@ void bgp_table_range_lookup(const struct bgp_table *table, struct prefix *p,
                        &p->u.prefix, node->p.prefixlen)]);
        }
 
+       if (!node)
+               return;
+
        if (matched == NULL && node->p.prefixlen <= maxlen
            && prefix_match(p, &node->p) && node->parent == NULL)
                matched = node;
        else if ((matched == NULL && node->p.prefixlen > maxlen) || !node->parent)
                return;
-       else if (matched == NULL)
+       else if (matched == NULL && node->parent)
                matched = node = bgp_node_from_rnode(node->parent);
 
+       if (!matched)
+               return;
+
        if (bgp_node_has_bgp_path_info_data(matched)) {
                bgp_lock_node(matched);
                listnode_add(matches, matched);