]> git.proxmox.com Git - mirror_frr.git/commitdiff
zebra: Do not allow redistribution for non-vrf tables
authorDonald Sharp <sharpd@nvidia.com>
Mon, 19 Jul 2021 23:52:43 +0000 (19:52 -0400)
committerDonald Sharp <sharpd@nvidia.com>
Tue, 20 Jul 2021 00:04:03 +0000 (20:04 -0400)
Current code was allowing redistribution of kernel routes from
the non-default non vrf tables once FRR was already up and running.

In the case where we add `redistribute kernel` in an upper level
protocol we never consider the non-default vrf or non-vrf tables
so it is never accepted.

In the case where a kernel route is added after `redistribute kernel`
is already in place we were never looking at the fact that the
route was in a non-default non-vrf table.  This code fixes
that issue.

Fixes: #9073
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
zebra/redistribute.c

index 89f46f9c97a030d61ea0bd43c8b253cc19775594..26f6d404e95f4a2bd6de375ab5e3ab334709aa97 100644 (file)
@@ -153,10 +153,16 @@ static bool zebra_redistribute_check(const struct route_entry *re,
                                     struct zserv *client,
                                     const struct prefix *p, int afi)
 {
+       struct zebra_vrf *zvrf;
+
        /* Process only if there is valid re */
        if (!re)
                return false;
 
+       zvrf = vrf_info_lookup(re->vrf_id);
+       if (re->vrf_id == VRF_DEFAULT && zvrf->table_id != re->table)
+               return false;
+
        /* If default route and redistributed */
        if (is_default_prefix(p)
            && vrf_bitmap_check(client->redist_default[afi], re->vrf_id))