]> git.proxmox.com Git - mirror_frr.git/commitdiff
zebra: Prevent crash if ZEBRA_ROUTE_ALL is used for a route type
authorDonald Sharp <sharpd@nvidia.com>
Sun, 27 Feb 2022 19:00:41 +0000 (14:00 -0500)
committerDonald Sharp <sharpd@nvidia.com>
Mon, 28 Feb 2022 14:50:35 +0000 (09:50 -0500)
FRR will crash when the re->type is a ZEBRA_ROUTE_ALL and it
is inserted into the meta-queue.  Let's just put some basic
code in place to prevent a crash from happening.  No routing
protocol should be using ZEBRA_ROUTE_ALL as a value but
bugs do happen.  Let's just accept the weird route type
gracefully and move on.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
zebra/zebra_rib.c

index af159da3cca6c3b9535afc899dcbc4a36642b5fb..e376d4b2af4461c826e30bfa3b7b38f9fd102e4e 100644 (file)
@@ -116,6 +116,7 @@ static const struct {
        [ZEBRA_ROUTE_OPENFABRIC] = {ZEBRA_ROUTE_OPENFABRIC, 115, 5},
        [ZEBRA_ROUTE_VRRP] = {ZEBRA_ROUTE_VRRP, 255, 7},
        [ZEBRA_ROUTE_SRTE] = {ZEBRA_ROUTE_SRTE, 255, 7},
+       [ZEBRA_ROUTE_ALL] = {ZEBRA_ROUTE_ALL, 255, 7},
        /* Any new route type added to zebra, should be mirrored here */
 
        /* no entry/default: 150 */
@@ -4386,9 +4387,8 @@ static void check_route_info(void)
         * ZEBRA_ROUTE_ALL is also ignored.
         */
        for (int i = 0; i < len; i++) {
-               if (i == ZEBRA_ROUTE_SYSTEM || i == ZEBRA_ROUTE_ALL)
-                       continue;
-               assert(route_info[i].key);
+               assert(route_info[i].key >= ZEBRA_ROUTE_SYSTEM &&
+                      route_info[i].key < ZEBRA_ROUTE_MAX);
                assert(route_info[i].meta_q_map < MQ_SIZE);
        }
 }